【问题标题】:Does git have a shortcut command to fix up HEAD into HEAD~1git 是否有快捷命令将 HEAD 修复为 HEAD~1
【发布时间】:2018-12-27 23:14:16
【问题描述】:

我发现自己有时会这样做:

git rebase -i HEAD~2

这显示了两个提交,HEAD~1HEAD。我将pick 更改为f 以将HEAD 修复为HEAD~1。现在,我将我最近的两个提交合并为一个提交,其中仅包含来自旧提交的提交消息。

是否有快速执行此操作的命令/快捷方式/选项?

如果我想将最近的三个提交修复为第四个最近的提交怎么办?

我能找到的唯一解决方案是编写一个为您执行此操作的脚本。但我正在寻找 git 中已经内置的东西。

【问题讨论】:

  • 我也有类似的想法。似乎我们正在做很多事情。但不幸的是,您可能需要一个脚本来执行此操作。否则使用交互式变基
  • 我最好的猜测是 git 拒绝发出这样的命令是因为存在风险。初学者可能会不小心用 up 来搞乱他们的提交。我会继续使用 rebase -i

标签: git rebase interactive git-rebase fixup


【解决方案1】:

一种解决方案是使用git reset HEAD~1。这将删除最后一次提交并将其更改放在您的暂存区域。然后,您可以使用 git commit --amend -a --no-edit 将这些更改修改到之前的提交中。 --no-edit 标志使它使用相同的提交消息。

注意只有在您拥有干净的工作目录时才能执行此操作。否则,您会将所有未提交的更改压缩到同一个提交中。

它最终得到了这个单行,您可以输入一个别名以便于使用:

git reset HEAD~1 && git commit --amend -a --no-edit

作为 git 别名:

git config --global alias.squashLast2 '!git reset HEAD~1 && git commit --amend -a --no-edit'

【讨论】:

  • 如果工作目录不干净,这很容易提交一堆无意的更改。像rebase 这样的内置命令足够聪明,可以阻止你这样做,编写一个不能以同样方式帮助你的自定义命令有点危险。
  • 我必须同意。 --amend -a --noedit 组合只是在要求一团糟
  • 是的,这是真的@meagar 好点。所以我建议谨慎使用。尽管我要补充一点,即使您确实不小心做出了您不打算做的事情,但如果您没有意识到,这只是一种风险。如果你这样做了,你可以重置提交并修复它。你真的应该检查你的差异 - 所以你应该注意到。
  • @Max 我多年来一直在使用--amend -a --noedit。从来没有任何问题 - 你期待什么混乱?
  • -a 添加所有内容(包括不需要的更改),--no-edit 不会提示您输入消息(这是再次检查更改的最后机会),--amend 表示它可能会打乱你之前的(好的)提交,如果你犯了错误,清理起来会更加烦人。
猜你喜欢
  • 1970-01-01
  • 2014-08-25
  • 2011-12-19
  • 2019-09-05
  • 2015-10-20
  • 2010-12-30
  • 2022-01-22
  • 1970-01-01
相关资源
最近更新 更多