第六篇 git相关(3)-分支与合并

git分支

git分支是git的一大特性,git 的分支本质上仅仅是指向提交对象的可变指针,是包含所指对象校验和(长度为 40 的 SHA-1 值字符串)的文件,这也是为什么git分支的创建和销毁都异常高效的原因,创建新分支时,就是在当前所在的提交对象上创建一个指针,而git是通过一个名为HEAD的特殊指针来记录自己的当前位置的。

与git分支相关的命令有:

1
2
3
4
5
6
7
git branch -- 查看本地分支
git branch -v -- 查看本地分支每个分支的最后一次提交
git branch -vv -- 查看本地分支每个分支跟踪的远程分支
git checkout -b dev -- 新建dev分支,并切换到dev分支(此后HEAD会指向dev分支,工作目录也会变为dev分支指向的快照内容)
git checkout master -- 切换到master分支(此后HEAD会指向master分支,工作目录也会变为master分支指向的快照内容)
git merge dev -- 合并dev分支到当前分支
git branch -d dev -- 删除dev分支

分支切换

注意在切换分支时,git会重置工作目录,自动添加、删除、修改文件以确保此时你的工作目录和这个分支最后一次提交时的样子一模一样,因此在切换分支前,要注意暂存当前的工作进度,可以使用git stash命令暂存当前工作。

分支合并

在合并时,可能会看到fast-forward这个词,这是指当前分支是合并分支的直接上游,两者合并不会产生冲突,而只是指针向前移动了,所以叫做fast-forward。

如果两个分支已经分叉开来,进行合并时,git会根据两个分支的共同祖先来做一个三方合并,此时的合并就不是简单的指针向前移动了,而是将三方合并的结果生成一个新的快照并创建一个新的提交指向它。

有时候合并会发生冲突,靠git自动合并已经无法解决,就需要人工去解决冲突,git会在有冲突的文件中加入标记,使用<<<<<<<>>>>>>>=======标识了冲突的位置,=======将两个分支的冲突位置内容分隔开来,为了解决冲突,只能选择其中一个,手动地将标识的片段改为你选择的内容即可,修改完冲突之后,还要使用git add来表示冲突已经解决,git commit来完成合并提交。

远程分支

远程分支以 (remote)/(branch) 形式命名,本地分支与远程分支交互相关的命令如下:

1
2
3
4
git push (remote) (branch):(remote branch) --推从到远程分支
git fetch (remote) --拉取远程仓库的内容,不会修改工作目录
git pull (remote) --拉取并合并远程仓库的内容到本地
git push (remote) --delete (branch) --删除远程分支

第六篇 git相关(3)-分支与合并

http://yoursite.com/2021/07/03/git-2/

Author

s-serenity

Posted on

2021-07-03

Updated on

2021-08-29

Licensed under

You need to set install_url to use ShareThis. Please set it in _config.yml.
You forgot to set the business or currency_code for Paypal. Please set it in _config.yml.

Comments

You forgot to set the shortname for Disqus. Please set it in _config.yml.