内容纲要
分支操作
在前一章git操作,Git的提交会形成一条时间线,回退版本时,会使用HEAD指向的commit id
来进行操作。实际上HEAD指向的不是commit id
而是指向了master分支也就是主分支,由master分支指向了提交版本。
每次提交master的时间线就越长,当我们由于项目进度需要不影响他人的工作进度时,就需要重新创建一个分支,此刻的时间线就像多个个支流和主干河流一样,在各自完成时进行提交合并就可以了。
创建分支
使用如下命令进行创建分支
git branch <分支名>
或者使用如下命令进行创建并切换到分支
git checkout -b <分支名>
或者如下命令进行创建并切换到分支
git switch -c <分支名>
查看分支
使用如下命令进行查看分支,并且当前分支前面会有*****来标识
git branch
切换分支
git switch <分支名>
或者如下命令,效果同上
git checkout <分支名>
合并分支
就是将master分支直接指向指定分支
git merge <分支名>
这样默认使用Fast forward
模式,合并分支后会丢掉分支的信息,可以通过如下命令禁用生成一个新的提交并保留分支的信息。
git merge --no-ff -m "描述信息" dev
删除分支
git branch -d <分支名>
丢弃一个没有被合并过的分支,可以通过如下命令强行删除
git branch -D <分支名>
解决冲突
我们先查看原本demo.txt
中的文本
Qsky8@Nebula MINGW64 /d/Users/Qsky8/Desktop/git (master)
$ tail demo.txt
nihao
此时我们使用master分支进行修改添加master add
,并且提交。切换到dev_zhao分支查看发现文本与原始文本相同,并且添加dev_zhao add
,进行提交。此时进行合并,提示发生了冲突如下所示:
Qsky8@Nebula MINGW64 /d/Users/Qsky8/Desktop/git (master)
$ git merge dev_zhao
Auto-merging demo.txt
CONFLICT (content): Merge conflict in demo.txt
Automatic merge failed; fix conflicts and then commit the result.
Qsky8@Nebula MINGW64 /d/Users/Qsky8/Desktop/git (master|MERGING)
$ tail demo.txt
nihao
<<<<<<< HEAD
master add
=======
dev_zhao add
>>>>>>> dev_zhao
此时,发生冲突需要手动解决冲突,并且重新进行提交,如下图所示:
查看分支合并图示
git log --graph --pretty=oneline --abbrev-commit
结果如下:
Qsky8@Nebula MINGW64 /d/Users/Qsky8/Desktop/git (master)
$ git log --graph --pretty=oneline --abbrev-commit
* 1fa1caf (HEAD -> master) solve the problem
|\
| * 55ddef9 (dev_zhao) dev_zhao add
* | 34b398b master add
|/
* b172824 (gitee/master) dev modif something
* 7fa195b add .gitignore
* 501ed7f (github/master) Create README.md
* e28612d add demo.txt
* 2aff731 first modif
* 163d96d third modif
* c1f49da second modif
保护现场
使用如下命令保护工作区进度
git stash
查看保存的工作区记录
git stash list
恢复工作区
恢复后,stash内容并不删除,需要删除工作区记录
git stash apply
恢复后,stash内容删删除
git stash pop
删除工作区记录
git stash drop
复制分支的修改到当前分支
不会全部复制,只会复制分支的改动
git cherry-pick <commit id>
留言