34

什么非交互式 git 命令实现了从之前到之后的变化?

前:

A---B---C---D

后:

A---C'---B'---D'
4

4 回答 4

33

在您的情况下,您可以重新设置交互式: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"

您的短日志将是:

$ git shortlog
 (3):
      A
      B
      C

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

$ git rebase -i HEAD~2
pick 1f9133d B
pick 33f41be C

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

pick 33f41be C
pick 1f9133d B

写完之后,看看短日志:

$ git shortlog
 (3):
      A
      C
      B

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

于 2011-02-13T02:19:49.927 回答
25

尝试这个:

git reset --hard A
git cherry-pick C
git cherry-pick B
git cherry-pick D

可能有一种方法git rebase,但我并没有真正理解它。

于 2011-02-12T22:59:16.540 回答
6

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

然后,如果您有重新排序提交的正式标准,您可以编写脚本,例如,查看真正扁平化 git 合并以按原始提交日期重新排序提交。

于 2012-09-12T19:55:14.710 回答
0

如果您想在脚本中重新排序提交并且不想处理提交哈希,那么这似乎可以作为一般解决方案(基于 Paŭlo Ebermann 的回答):

git reset --hard @~3
git cherry-pick ORIG_HEAD~1
git cherry-pick ORIG_HEAD~2
git cherry-pick ORIG_HEAD

我假设连续两次运行这个命令序列会将提交树恢复到以前的状态,除了更改更改的提交哈希。

于 2020-02-04T11:13:55.837 回答