使用git stash
new分支上开发到一半,要去修改old分支上的bug
在new分支上的时候在命令行输入:
git stash
或者
git stash save “修改的信息"
这样以后你的代码就回到自己上一个commit了,直接git stash的话git stash的栈会直接给你一个hash值作为版本的说明,如果用git stash save “修改的信息”,git stash的栈会把你填写的“修改的信息”作为版本的说明。
接下来你回到old分支修改代码完成,你又再回到new分支,输入:
git stash pop
或者
git stash list
git stash apply stash@{0}
就可以回到保存的版本了。git stash pop的作用是将git stash栈中最后一个版本取出来,git stash apply stash@{0}的作用是可以指定栈中的一个版本,通过git stash list可以看到所有的版本信息:
stash@{0}: On order-master-bugfix: 22222
stash@{1}: On order-master-bugfix: 22222
然后你可以选择一个你需要的版本执行:
git stash apply stash@{0}
这时候你搁置的代码就回来了。
git 从a分支上提取某几次提交合并到b分支上的方法 cherry-pick
cherry-pick可以选择某一个分支中的一个或几个commit(s)来进行操作。例如,假设我们有个稳定版本的分支A,另外还有个开发版本的分支B,我们不能直接把两个分支合并,这样会导致稳定版本混乱,但是又想增加一个 A 中的功能到 B 中,就可以使用cherry-pick
查找提交的commitID
首先我们在 A 分支中找到要合并的commitId,通过git log命令查看历史提交记录并复制commitId
$ git log
commit a86fa61c13df652c0dd9c00d2135c43b575c258a
Author: injurys
Date: Thu May 7 16:27:15 2020 +0800
4
commit 98fdf8d5a0fec98acafde1ed9e3d29a11f3b145d
Author: injurys
Date: Thu May 7 16:26:29 2020 +0800
3
commit 8d01919da93393930839a64a86033440b3e648b4
Author: injurys
Date: Thu May 7 16:26:10 2020 +0800
2
切换分支并合并
切换到B分支上,使用git cherry-pick命令合并
$ git checkout b
Switched to branch 'b'
$ git cherry-pick 8d01919da9339393
[q1 8d33915] 2
Date: Thu May 7 16:26:10 2020 +0800
1 file changed, 1 insertion(+)
这样就把 A 分支的提交记录合并到了 B 分支上
总结
git cherry-pick id>:单独合并一个提交
git cherry-pick -x id>:同上,不同点:保留原提交者信息。
通过 git cherry-pick 命令来合并某次提交是不是很简单
另外,不单单可以合并一次记录,可以通过commitId的范围记录进行范围合并。
git cherry-pick id>..<end-commit-id>
git cherry-pick id>^..<end-commit-id>
前者表示把到之间(左开右闭,不包含start-commit-id)的提交cherry-pick到当前分支; 后者有”^”标志的表示把到之间(闭区间,包含start-commit-id)的提交cherry-pick到当前分支。