滚到之前或以后的版本
git reflog
可以查看所有的commit hash记录
git reset --hard 版本号
退回到指定版本
git commit --amend
覆盖上一次提交
git branch dev
创建分支
git checkout -b dev
创建分支并进入dev分支
git log --decorate
显示HEAD的指向 (HEAD -> master, origin/master, origin/HEAD, dev)
git remote set-head origin -d
git log --decorate
显示HEAD的指向 (HEAD -> master, origin/master, dev)
切换分支
git checkout dev
git log --decorate
显示HEAD的指向 (HEAD -> dev, origin/master, master)
指向已经发生改变
git log --decorate --graph --all --oneline
图形化查看分支流程
git branch -d <BranchName>
删除本地分支
git push origin -d <BranchName>
删除远程分支
git branch -l
:查看本地分支
git branch -r
:查看远程分支
git branch -a
:查看全部分支(远程的和本地的)
git checkout -b 本地分支la origin/远程分支a
以远程分支a为基础创建一个本地分支la并切换到本地la分支
git checkout -b 本地分支la
末尾不指定分支就以当前分支为基础创建一个本地分支la并切换到本地la分支
情景1:撤销修改【未】添加到暂存区
使用git status
查看git文件跟踪情况发现xx.js被删除回收站已被清空,通过回收站无法恢复此文件。
可以使用git checkout xx.js
恢复此文件 或者 git checkout -- xx.js
使用git status
命令,发现modified: xx/x/x.js
文件被修改。
使用git checkout xx/x/x.js
即可恢复到修改之前的状态。或者git checkout -- xx/x/x.js
使用git checkout .
可恢复所有已修改的文件。
情景2: 撤销修改【已】添加到暂存区
在README.md文件中添加了错误信息,或者是改乱了这个文件。
可以使用git checkout -- README.md
恢复到之前的版本。
但是修改之后使用了git add .
将这个文件添加到了暂存区。使用git checkout --xxx
已无法恢复。
这时候就可是使用git reset HEAD <fileName>
即可恢复到工作区。再使用git checkout -- README.md
就还原到未修改的状态。
git rm --cached {file}
删除暂存中的文件
情景3:未使用git pull更新版本
出现Your branch is ahead of 'origin/master' by 1 commit.
说明没有文件需要commit,但是本地仓库 有一个commit ahead原来的master,就是本地仓库有一个提交
比远程仓库要先进一个commit。git push origin master或git push之后,即可。
情景4:存储
现在需要切换到其他分支上,但是现在的分支上的代码已经修改了,不想commit暂存。
git stash
存储命令可以应用到此场景。这个命令会把当前的分支放在存储区。可以多次存储。
git stash save 'message...'
可以添加一些注释
git stash list
可查看存储区中所有的存储条目。
git stash apply
可恢复最近的存储条目。
git stash apply stash@{1}
可恢复指定的条目。
git stash drop
可删除最近的存储条目。
git stash clear
可删除所有存储条目。
git stash drop stash@{1}
可删除指定的存储条目。
情景5:解决冲突
甲乙两个开发者同时开发一个组件在同一个文件修改了代码。
甲修改代码后git add .
git pull
git push
素质三连。
乙修改代码后git add .
ok的 git pull
提示
Auto-merging add dev.txt (dev.txt被修改的辣个文件) 自动合并暂存区的文件
CONFLICT (content): Merge conflict in add dev.txt 合并冲突文件
Automatic merge failed; fix conflicts and then commit the result. 自动合并失败,解决冲突,然后提交结果
乙去找甲理论,乙是老板亲戚乙说了算
最后乙素质三连,代码冲突就解决了。
注意:乙修改冲突的代码后必须素质三连才可以提交到远程仓库哈。
测试:本地多次commit服务器也关联多次commit信息?
环境说明:
本地远程分支master,本地分支dev
操作:
在本地dev分支上修改两次代码,并commit两次。
git checkout master
切换到本地远程分支master
git merge dev
合并dev分支代码,未发现冲突,自动将dev的commit信息添加到master分支。
git pull
git push
服务器查看commit记录,master分支上显示的commit记录是本地分支dev上的两次commit信息。
廖雪峰老师的多人协作开发解决冲突
开发场景1
远程分支master是老项目
本地clone这个老项目。
进入mastergit checkout master
分支。
git checkout -b release1
以master分支为基础创建分支release1。一期已修改完毕,准备发布release1版本。
git push origin release1
以本地分支release1为基础,远程新建分支release1。发布此版本。
·git branch --set-upstream-to=origin/<远程分支名> 当前分支关联远程分支。就可git pull、git push了。
当前分支在release1中。
git checkout -b release2
以release1分支为基础创建分支release2。一期已修改完毕,准备发布release1版本。
git push origin release1
以本地分支release1为基础,远程新建分支release1。发布此版本。
·git branch --set-upstream-to=origin/<远程分支名> 当前分支关联远程分支。就可git pull、git push了。
一期小组开发了一个非常不错的功能,二期要用一期的功能使用 git merge
合并。
当前分支在release1中。
git merge release1
合并release1带代码,自动检测冲突。git status
git pull
git push
素质三连。
现在正在release2中高高兴兴的开发中,突然接到任务release1中有bug需要修复,但是release2还没写完,不想添加commit。
使用git stash
存储功能
git stash save 'message...'
存储以修改的代码,可以添加一些注释
git checkout release1
切到release分支修改完bug push后再切到release2中git checkout release2
git stash list
可查看刚刚存储的信息。
git stash apply
可恢复最近的存储条目,完事儿。
git fetch
当我们在本地仓库修改了代码想对比远程的代码看有没有冲突之类的。
使用git diff origin/<远程仓库名>
没反应,这是因为没有和远程更新代码。
使用git pull
会自动合并代码,不方便查看。
这时就可以先使用git fetch
全部更新或git fetch origin/<远程仓库名>
更新指定的分支
再使用git diff origin/<远程仓库名>
即可查看差异,之后使用git pull合并。或者使用git merge origin/<远程仓库名>
合并。
git add 添加错文件 撤销
git add 添加 多余文件
这样的错误是由于, 有的时候 可能
git add . (空格+ 点) 表示当前目录所有文件,不小心就会提交其他文件
git add 如果添加了错误的文件的话
撤销操作
git status 先看一下add 中的文件
git reset HEAD 如果后面什么都不跟的话 就是上一次add 里面的全部撤销了
git reset HEAD XXX/XXX/XXX.java 就是对某个文件进行撤销了
git --abort
git pull 合并远端代码,但可能会遇到冲突的情况或者不想合并。如何回到合并之前的状态呢?
git merge --abort 回到merge之前的状态。
git rebase --abort 回到rebase 下 merge之前的状态。
git pull --rebase解决冲突
featrue开发完成,本地commit后,拉取更新git pull --rebase
。芽儿冲突了。(master|REBASE 1/1)
此时进入了rebase模式。
手动解决冲突后本地暂存文件git add .
使用git rebase --continue
合并冲突即可。
git mv 文件操作
renamefile git mv oldfile.txt newfile.txt
movefile git mv *.html ./src
git blame 文件内容的操作记录
查看指定文件内容的操作记录 git blame {file}