实验: 分支在合并的时候产生冲突和如何解决冲突(非常重要 )
1.模拟冲突场景 (每个分支对同一个文件的同一行有不同的实现,分支合并就会在文件中产生冲突 )
冲突的前提:
两个分支的commit 在“同一个阶段”合并的时候可能产生冲突
2.解决冲突
在master 分支上合并 dev分支
git merge dev
/*
自动合并 a.txt
冲突(内容):合并冲突于 a.txt
自动合并失败,修正冲突然后提交修正的结果。
*/
解决冲突:
vi a.txt
/*
111111
<<<<<<< HEAD (master)
hello master
=======
hello dev
>>>>>>> dev
*/
git add . // 不是将冲突的文件添加到暂存区,告知git 冲突解决
git commit -m '冲突已解决'
dev分支也指向于最新的解决完冲突的版本
git merge master //不会产生冲突因为两个分支的commit 阶段不在同一个阶段
版本穿梭 (在多个版本之间切换操作)
场景: master 分支多个版本提交
git add .
git commit -m ''
合并上面两个命令 //但是 合并命令不能适用于第一次的版本提交
git commit -am '注释'
版本后退
git reset --hard HEAD^ 后退一个版本
git reset --hard HEAD^^ 后退两个版本
git reset --hard HEAD~n 后退n个版本
版本前进
git reflog 记录所有的git操作日志 (借助良好的日志习惯)
git reset --hard sha1
版本回退
# git rm --cached <file>
# 恢复暂存区的指定文件到工作区
$ git checkout [file]
# 恢复某个commit的指定文件到暂存区和工作区
$ git checkout [commit] [file]
# 恢复暂存区的所有文件到工作区
$ git checkout .
# 重置暂存区的指定文件,与上一次commit保持一致,但工作区不变
$ git reset [file]
# 重置暂存区与工作区,与上一次commit保持一致
$ git reset --hard
# 重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变
$ git reset [commit]
# 重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致
$ git reset --hard [commit]
# 重置当前HEAD为指定commit,但保持暂存区和工作区不变
$ git reset --keep [commit]
# 新建一个commit,用来撤销指定commit
# 后者的所有变化都将被前者抵消,并且应用到当前分支
$ git revert [commit]
# 暂时将未提交的变化移除,稍后再移入
$ git stash
$ git stash pop
游离操作