什么非交互式 git 命令可以实现从 Before 到 After 的改变?
Before:
Before:
A---B---C---D
之后:
A---C'---B'---D'
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
如果您想重新排列B和C:
$ 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
重新应用它们(可能以不同的顺序)。然而,这是一个基本上交互式的过程,因为以错误的顺序重新应用补丁可能会失败并需要用户干预。 - Ben Jacksongit reset --hard @~3
git cherry-pick ORIG_HEAD~1
git cherry-pick ORIG_HEAD~2
git cherry-pick ORIG_HEAD
我假设连续运行这个命令序列两次将会将提交树恢复到之前的状态,除了更改已更改的提交哈希值。
B
和C
之间有一千个提交(或者如果你认为在代码编辑器中一千行不算多的话,就是一百万个)。如何通过交互式变基以可管理的方式完成这个任务? - Olsgaard