用于记录阅读 Git 原理详解及实用指南 之后的笔记备忘。
git merge some_branch
的意思是将some_branch
这一分支与HEAD
指向的某一分支合并,HEAD
指向的可以是master
,也可以是其他branch
当只需要合并某一分支的特定部分的
commits
到另一分支时,就可以参考 Git合并特定commits 到另一个分支 这篇文章。根据这篇文章,可以知道,以下图为例,可以只把5
合并到master
上,这时master
上就会出现一个新的commit
点,使用git cherry-pick params
( params 可以是多个参数,中间用空格隔开就行,记得要先切换到目标分支)
合并之后,如下图,出现一个新的commit
点,但是原来branch1
上的5
还是会存在。
而如果需要合并branch1
上的6
到7
的到master
的话(即合并一连串到 commits),就需要先以branch1
为基础,新建一条分支(假设为tmp_branch
,且要注意先切换到branch1
分支),使用的命令为
git checkout -b tmp_branch 7的引用或者SHA-1码
(这里的命令在新建了分支之后会直接切换到该分支)
然后使用命令
git rebase --onto master 6的引用或者SHA-1码^
(这里要注意别落下了 ^ 符号,如果少了就会只把7
合并到master
,即目标commit
之后的)
然后又要切回到master
,执行
git merge tmp_branch
这样就可以了,之后再把tmp_branch
分支删除即可。(其实这里的操作本质上是涉及到了git rebase
)git reset --soft HEAD^
中除了 HEAD 和它所指向的 branch1 被移动到 HEAD^ 之外,原先 HEAD 处 commit 的改动也会被放进暂存区,注意到这里是会被存放到暂存区(就相当于执行了add
但未执行commit
的状态),然后如果再次commit
到话就又会恢复reset
之前到样子,除了 commit 时填写的提交信息与 commit 提价后对应的 SHA-1 码会不同。
而--mixed
是相当于执行add
之前的状态,但是工作区的变化还是在(比如新增了一个文件,commit
之后执行git reset --mixed HEAD^
,文件还是在,但是需要重新add
)。
而--hard
会把工作区的改动也清空(比如新增了一个文件,commit
之后执行git reset --hard HEAD^
, 新增的文件也会被删除)。使用
stash
临时存放工作目录的改动,这里需要注意,是临时存放被add
但是未被commit
的。