Git interactive rebase,无需使用编辑器即可编辑特定提交?

标签 git rebase

目前我需要做的: 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^,只要在两个步骤中引用相同的提交即可。

以上解释:

  1. 直接 checkout 要编辑的提交(注意:您将处于“分离的 HEAD”状态,这意味着此处的任何更改都不会影响您在此步骤之前 checkout 的分支,直到您做到这一点在第 5 步中)
  2. 编辑您需要编辑的内容
  3. 用新的更改修改提交
  4. 查看之前 checkout 的内容,即分支机构(如果有的话)
  5. 将分支重新定位到 (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-replaceman git-filter-branch .

关于Git interactive rebase,无需使用编辑器即可编辑特定提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49465229/

相关文章:

git - 删除 .git 文件夹中的空目录是否安全?

git - 使用上游分支重新设置本地分支

git - 如何知道我是否正在使用 Mercurial 进行 histedit?

git - 为什么在我的 rebase 操作中只有一次提交而不是两次发生冲突?

git - 在 Git 中保持线性历史有什么好处?

用户的 Gitlab 工作流程和配置

git - git rm 是否删除文件的所有历史记录?

Git:用 'post-receive'命令发送参数到 'git push' hook

git rebase : copy instead of moving

无需打开编辑器的 Git 交互式 rebase