目前我需要这样做:
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
如果我想edit
特定提交(在这种情况下为447a1cb
)是否有一个命令我可以用来直接调用该状态?而不是必须通过上述程序?
答案 0 :(得分:3)
我想不出一个快速的方法来做到这一点。这是一种方式。无论提交的时间有多远,它都可以正常工作,但请注意rebase
将在此过程中使用任何合并。*
git checkout 447a1cb
<edit stuff>
git commit --amend
git checkout -
git rebase --onto @{-1} 447a1cb
请注意,我在第一步和最后一步中明确使用了提交哈希447a1cb
;只要在两个步骤中引用相同的提交,这当然可以替换为相对引用,例如HEAD^
。
以上解释:
HEAD^
(最后一次提交的第一个父级,即一次提交)及之前的提交。使用--onto
将避免应用旧提交,这可能导致冲突或额外提交。man git-rebase的更多信息。
虽然上述方法有效,但我可能更喜欢交互式变基数。
*
如果在您编辑的提交后有合并,请考虑--preserve-merges
标记为git rebase
(但请阅读 BUGS 部分man git-rebase),或改为使用{ {1}}与git replace --edit
结合使用。有关man git-replace和man git-filter-branch的更多信息。
答案 1 :(得分:1)
IIUC,您可以创建一个临时分支,然后将其与rebase
合并:
$ git checkout -b temp-branch <SHA1>
$ git commit --amend -m 'new commit message'
$ git checkout -
$ git rebase @{-1}
$ git branch -d @{-1}
答案 2 :(得分:0)
您可以使用sed或任何其他命令作为git rebase的临时编辑器:
EDITOR='sed -i 1s/pick 447a1cb/edit 447a1cb/' git rebase -i f47adfa0
将其变为可重复使用的命令:
git config alias.edit-commit \
'!f(){ EDITOR="sed -i 1s/pick/edit/" git rebase -i "$1"^; }; f'
然后:
git edit-commit 447a1cb
# make changes
git commit --amend
git rebase --continue