一、将提交记录提取出来,发布到其他分支中
要将分支中的某次提交提取出来并发布到其他分支中,可以使用 git cherry-pick 命令。这个命令可以将某个分支上的特定提交应用到当前分支中。以下是具体的步骤和操作说明:
1.操作步骤
(1) 定位到目标分支先切换到目标分支,也就是你希望发布提交的分支。
git checkout target-branch
(2) 查看提交历史查看需要提取的分支的提交历史,找到你想要提取的提交哈希值。
git log source-branch --oneline
这会列出 source-branch 上的提交记录,并显示每个提交的哈希值(commit-hash)和提交信息。
(3) 使用 git cherry-pick 提取提交使用git cherry-pick命令将每个提交提取并应用到当前分支。
git cherry-pick
如果你有多个提交,可以按顺序逐个提取。例如:
git cherry-pick
git cherry-pick
git cherry-pick
2.注意事项
(1) 解决冲突:如果在cherry-pick的过程中遇到冲突,Git 会停止并提示你解决冲突。解决冲突后,使用以下命令完成cherry-pick:
git add
git cherry-pick --continue
如果你想放弃当前的 cherry-pick 操作,可以使用:
git cherry-pick --abort
(2) 提交顺序:如果想要提取多个提交并按顺序应用,可以使用以下方式进行批量提取:
git cherry-pick
(3) 应用一段提交范围:如果希望提取一段连续的提交,可以使用范围选择:
git cherry-pick ^..
注意这里的 ^ 表示从 start-commit-hash 的父提交开始,这样可以包括 start-commit-hash 本身。
3.示例场景
假设有一个 bug-fixes 分支包含 5 次提交,需要将其中的 1,2,4,5 次提交发布到 release 分支:
(1) 切换到release分支:
git checkout release
(2) 按提交顺序逐个应用提交:
git cherry-pick commit1
git cherry-pick commit2
git cherry-pick commit4
git cherry-pick commit5
通过这些步骤,你可以将 bug-fixes 分支中的 1,2,4,5 次提交提取出来并发布到 release 分支中。
二、从分支中删除某一次提交
在 Git 中,如果你需要从一个分支中删除某次提交,有以下几种方法可以实现,具体选择取决于你是否需要保留提交历史或者修改历史的影响。
方法一:使用 git revert(推荐用于保留历史)
git revert 是一种非破坏性方法,用来创建一个新的提交来撤销指定的提交。这种方式可以保留提交历史,并且是团队协作中推荐使用的方法。
操作步骤:
# 在当前分支上撤销某次提交
git revert
git revert 会生成一个新的提交,它的作用是将
方法二:使用 git rebase -i(适合历史修改)
如果你想从分支中彻底移除某次提交,可以使用 git rebase -i 命令进行交互式 rebase。这种方式会重写提交历史,因此需要谨慎使用,并且只应在不影响其他开发者的情况下使用(例如本地分支或尚未推送的分支)。
操作步骤:
- 找到需要删除的提交之前的提交哈希值,例如
。 - 执行交互式 rebase:
git rebase -i
- 在弹出的编辑器中,找到你想删除的提交,并将该行的 pick 改为 drop,或者直接删除该行。
- 保存并退出编辑器。
注意:
- 如果在 rebase 过程中遇到冲突,需要手动解决冲突,然后使用:
git rebase --continue
- 如果你想中止 rebase,可以使用:
git rebase --abort
方法三:使用 git reset(危险操作)
git reset 可以重置分支到指定的提交,移除某个提交及其之后的所有提交。这种方法会改变分支历史,不建议在公共分支上使用。
操作步骤:
# 将分支重置到某个提交之前的状态
git reset --hard
风险:
- --hard 会删除所有提交后的更改和工作区的更改,需确保这些修改不需要保留。
- 使用 --soft 可以保留工作区的更改,只改变 HEAD 的位置。
小结
- git revert 是最安全、团队协作中推荐的方式,因为它不会更改提交历史。
- git rebase -i 适合于历史修订,但需要谨慎使用,尤其是在共享分支上。
- git reset 是危险的操作,适用于重置本地分支时使用。
选择合适的方法取决于你的使用场景。如果你不确定,请优先使用 git revert。
结语
以上两条使用技巧是在实际工作中遇到过的问题,在此记录下来,希望对大家也能有所帮助。需要注意的是,实操前需要找个测试分支先演练一遍,不要直接在生产分支操作!