安装git
yum install git
提示是否可以
输入y回车即可安装
设置用户名
git config --global user.name'xxxxx'
git config --global user.email'xxx@xx.com'
进入对应文件夹进行初始化
git init
此时在该目录下会生成一个.git文件夹
拉取远程仓库代码
git clone http://xxxxx.git
设置永久保存账号密码
进入你的项目文件夹,执行如下指令
git config credential.helper store
然后执行一次拉取
git pull
重新输入一次账号密码,下一次执行git pull时则不再提示
git常用指令
清除.gitignore缓存
git rm -r --cached .
git add .
git commit
切换www
sudo su - www -s /bin/bash
git查看当前分支
git branch
git 强制切换分支
git checkout -f
git 重新拉取远端最新直接覆盖同名
git reset --hard origin/master
升级psr/http-message版本
composer require psr/http-message:1.1
git 拉取远程指定文件
git fetch origin
git checkout
git pull回滚
git reset --hard HEAD@{1}
git log 查看历史记录
git reset 命令回滚到指定的commit id
git reset –hard 彻底回滚到指定的commit id,将更改内容和提交历史都删除
liunx本地有改动git pull失败
git pull拉取远程仓内容的时候有可能会出现以下报错:
error: Your local changes to the following files would be overwritten by merge:
xxx/xxx/xxx.php
Please, commit your changes or stash them before you can merge.
Aborting
这是由于你liunx本地项目有修改而与远程仓的代码冲突,此时有3种解决办法:
- 直接commit本地的修改(不建议)
- 通过git stash将工作区恢复到上次提交的内容,同时备份本地所做的修改,之后就可以正常git pull了,git pull完成后,执行git stash pop将之前本地做的修改应用到当前工作区(常用)
git stash
git pull
git stash pop
- 放弃本地修改,拉取远程仓代码,原修改代码会丢失并不可恢复(与远程仓一致)
git reset --hard
git pull
更换远程仓
进入项目所在目录
- 方法一
查看所有远程仓库
git remote
查看远程仓
git remote -v
重新设置你新的远程仓库地址
git remote set-url origin http.xxx.git
GIT实现本地和远程仓已经建立关联,但本地修改不再关联并不删除远程仓内容
从远程仓库拉取下来到本地的文件A,本地修改了,但修改不想再被跟踪提交,远程仓库A文件因为多人共用,所以不能删除:
进入项目文件夹,右键Git Bush Here
输入指令:git update-index --assume-unchanged
如果要忽略的是文件,则后面直接写文件名,如a.txt :
git update-index --assume-unchanged a.txt
如果要忽略的是文件夹,则后面写文件夹名加/,如文件夹A :
git update-index --assume-unchanged A/
一旦使用assume-unchanged,文件将不再从远程仓库pull更新,也不再push推送远程仓库了。
如果要恢复跟踪,可使用指令:git update-index --no-assume-unchanged
如果即想要远程仓库对应文件的更新,又不想要将自己本地的修改提交(即关闭GIT跟踪本地文件修改):
进入项目文件夹,右键Git Bush Here
输入指令:git update-index --skip-worktree
git update-index --skip-worktree a.txt
skip-worktree:不会关闭本地文件对远程仓库的跟踪,只是告诉Git不要跟踪对本地文件的更改,pull时会拉取最新的更新。
但要更新则需要no-skip-worktree再pull拉取合并最新更新(即打开GIT跟踪本地文件修改):
git update-index --no-skip-worktree a.txt
某文件夹内文件大批量变动(增删改)后拉取线上后冲突,合并解决后又想放弃本地修改
1.进入项目,右键git bush here ,输入git status 查看状态,出现三个状态列表:
①Untracked files 即未跟踪的状态,这是文件的初始状态,也就是在工作区中的状态,就是新建的文件/文件夹,也没有操作过git add,git压根不知道你这个文件的信息,没有生成快照
Untracked files:
(use "git add <file>..." to include in what will be committed)
这个状态下排列的是新建的文件和文件夹
②Changes to be committed 即文件在暂存区中生成了快照等待被提交(commit)
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
这个状态下排列的是大量A文件夹目录下的删除和修改
③Changes not staged for commit 即文件生成过快照,但是又有了新的修改,并且没有生成新的快照
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
这个状态下排列的是大量A文件夹目录下的修改
**三种状态的变换:**①-(git add)-》②-(未commit提交到线上,本地再次修改)-》③
正常git status后只会有状态①或者没有任何更新,如果存在状态①的文件,需要提交,则可以使用指令:git add 文件名 或者 git add . 即将工作区的某个文件、某些文件、或者是所有文件,所作出的修改(新建、删除也算的),添加至暂存区,此时文件就可以进行下一步的git commit了,再使用git status可以看到这些文件的状态变成了②
如果有存在③状态的文件,意思是这些文件有修改的部分没有生成快照,不能进行commit提交
git区域分为工作区(本地所有文件)暂存区(git add 的文件,即提交的文件),使用git commit或点击推送到远程仓会把暂存区的文件更新到远程仓,③状态即还未推送又修改了暂存区的内容
要清理git status下的三种状态文件,使本地与线上关联的文件保持一致:
线上指引:
1清除③状态文件,使用指令:git reset HEAD 文件名或文件夹名
git reset既可以用在版本回退,也可以用在撤销暂存区的修改,将文件重新放回工作区,HEAD代表此前的最新版本;
2清除②状态文件,使用指令:git checkout 文件名或文件夹名
git checkout将该文件在工作区中的修改,全部撤销,返回到最近一次git commit或者git add时的状态;
3再次使用git status可以看到只剩下状态①的文件了
本地测试结果:
1指令操作完之后,git status查看,原来存在①②③三种状态的文件,只剩下①③状态,并且③状态的所有文件前面都带上了modified:
接着操作2指令后,git status查看,只剩下①状态,完成。但从状态的转变看并不是理论上的把③变成②后撤销工作区修改,而是把②变成了③后取消了该文件夹的所有修改同步了线上
补充:
已经使用git commit 提交到本地分支上的修改 回退:可以采用版本回退,回到之前的版本
方案一:
git reset --hard HEAD^
注:HEAD为当前版本、HEAD^为上一个版本、HEAD^^为上上个版本,以此类推
方案二:
先使用 git log --pretty=online 查看版本号记录,再使用git reset --hard 版本号回到之前版本
git log --pretty=online
git reset --hard 版本号
远程已经删除的分支,本地仍有缓存
1使用命令: git branch -a
可以查看所有本地分支和远程分支,发现很多在远程仓库已经删除的分支在本地依然可以看到
2使用命令: git remote show origin
查看remote地址,远程分支,还有本地分支与之相对应关系等信息,那些已经被删除的分支会有stale字眼,如下
3使用命令: git remote prune origin
这样就可以全部删除本地那些远程仓库不存在的分支