如何以非交互方式重新排序Git中的提交

Jam*_*ber 32 git git-rewrite-history

什么非交互式git命令实现从Before到After的变化?

之前:

A---B---C---D
Run Code Online (Sandbox Code Playgroud)

后:

A---C'---B'---D'
Run Code Online (Sandbox Code Playgroud)

Moh*_*our 38

在您的情况下,您可以git rebase -i HEAD~4重新定义交互式:然后您可以重新排序您的选择

例如,让我们向分支添加三个文件:

git add A
git commit -m "A"

git add B
git commit -m "B"

git add C
git commit -m "C"
Run Code Online (Sandbox Code Playgroud)

你的短信将是:

$ git shortlog
 (3):
      A
      B
      C
Run Code Online (Sandbox Code Playgroud)

如果你想用C重新排序B:

$ git rebase -i HEAD~2
pick 1f9133d B
pick 33f41be C
Run Code Online (Sandbox Code Playgroud)

您只需将它们重新排序为:

pick 33f41be C
pick 1f9133d B
Run Code Online (Sandbox Code Playgroud)

完成写作后,请参阅短信:

$ git shortlog
 (3):
      A
      C
      B
Run Code Online (Sandbox Code Playgroud)

您可以通过重新排序对所有提交执行相同的操作.这就像你所看到的就是你得到的,这很酷:)

  • 当这个答案显然没有回答这个问题时,为什么这个答案会得到投票呢?OP要求提供一种非交互式的方法,这个答案就是如何互相干预. (17认同)
  • @AndreasWederbrand可能因为这是大多数人(包括我)在寻找的时候,当他们来到这里时,尽管你是绝对正确的. (7认同)

Paŭ*_*ann 23

试试这个:

git reset --hard A
git cherry-pick C
git cherry-pick B
git cherry-pick D
Run Code Online (Sandbox Code Playgroud)

可能有办法git rebase,但我真的不明白.

  • 所有`git rebase`都使用`git format-patch`然后`git am`来重新应用它们(可能以不同的顺序).然而,这是一个基本上互动的过程,因为无序重新应用补丁可能会失败并需要用户干预. (2认同)

pfa*_*con 5

请参阅如何以非交互方式运行git rebase --interactive?以非交互方式使用git rebase --interactive.

然后,如果您有重新排序提交的正式标准,您可以编写脚本,例如参见确实压平git merge以按原始提交日期重新排序提交.