【发布时间】:2011-06-26 05:56:59
【问题描述】:
什么非交互式 git 命令实现了从之前到之后的变化?
之前:
A---B---C---D
之后:
A---C'---B'---D'
【问题讨论】:
什么非交互式 git 命令实现了从之前到之后的变化?
之前:
A---B---C---D
之后:
A---C'---B'---D'
【问题讨论】:
在您的情况下,您可以重新设置交互式基础: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
您可以通过重新排序对所有提交执行相同的操作。就像你所见即所得,这很酷:)
【讨论】:
试试这个:
git reset --hard A
git cherry-pick C
git cherry-pick B
git cherry-pick D
git rebase可能有办法,但我不是很明白。
【讨论】:
git rebase 所做的只是使用git format-patch 然后git am 重新应用它们(可能以不同的顺序)。不过,这是一个基本的交互过程,因为乱序重新应用补丁可能会失败并需要用户干预。
请参阅How do I run git rebase --interactive in non-interactive manner? 以非交互方式使用 git rebase --interactive。
然后,如果您有重新排序提交的正式标准,您可以编写脚本,例如参见 Really flatten a git merge 以按原始提交日期重新排序提交。
【讨论】:
如果您想在脚本中重新排序提交并且不想处理提交哈希,那么这似乎可以作为一般解决方案(基于 Paŭlo Ebermann 的回答):
git reset --hard @~3
git cherry-pick ORIG_HEAD~1
git cherry-pick ORIG_HEAD~2
git cherry-pick ORIG_HEAD
我假设连续两次运行此命令序列会将提交树恢复到之前的状态,除了更改已更改的提交哈希。
【讨论】: