目前我需要做的:
git rebase -i f47adfa0
显示:
pick 447a1cb Either left or right
pick ef35186 Introducing side effects
然后我将其修改为:
edit 447a1cb Either left or right
pick ef35186 Introducing side effects
如果我想编辑
一个特定的提交(在这种情况下是447a1cb
),是否有一个命令可以用来直接调用那个状态?而不是必须经过上面的程序?
最佳答案
我想不出一个快速的方法来做到这一点。这是一种方法。无论提交发生在多远,它都有效,但请注意 rebase
会吃掉沿途的任何 merge 。*
git checkout 447a1cb
<edit stuff>
git commit --amend
git checkout -
git rebase --onto @{-1} 447a1cb
请注意,我在上面的第一步和最后一步中明确使用了提交哈希 447a1cb
;这当然可以替换为相对引用,例如 HEAD^
,只要在两个步骤中引用相同的提交即可。
以上解释:
- 直接 checkout 要编辑的提交(注意:您将处于“分离的 HEAD”状态,这意味着此处的任何更改都不会影响您在此步骤之前 checkout 的分支,直到您做到这一点在第 5 步中)。
- 编辑您需要编辑的内容
- 用新的更改修改提交
- 查看之前 checkout 的内容,即分支机构(如果有的话)
- 将分支重新定位到 (4) 之前 checkout 的提交,忽略
HEAD^
处的提交(最后一次提交的第一个父级,即一次提交返回)和更早的提交。使用--onto
将避免同时应用旧的提交,这可能会导致冲突或额外的提交。
更多信息请访问 man git-rebase .
虽然上述方法有效,但大多数时候我可能更喜欢交互式 rebase 。
* 如果在您正在编辑的提交之后有 merge ,请考虑将 --preserve-merges
标志添加到 git rebase
(但请阅读 BUGS part man git-rebase )--rebase-merges
标记为 git rebase
,或者使用 git replace --edit
结合 git filter-branch
。更多信息,请访问 man git-replace和 man git-filter-branch .
关于Git interactive rebase,无需使用编辑器即可编辑特定提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49465229/