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

发布于 2024-10-17 06:59:55 字数 140 浏览 1 评论 0原文

哪些非交互式 git 命令实现了从之前到之后的更改?

之前:

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

之后:

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

What non-interactive git command(s) achieve the change from Before to After?

Before:

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

After:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

情深已缘浅 2024-10-24 06:59:55

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

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

In your case, you can rebase interactive: git rebase -i HEAD~4 Then you can just reorder your picks

For example lets add three more files to our branch:

git add A
git commit -m "A"

git add B
git commit -m "B"

git add C
git commit -m "C"

Your shortlog will be:

$ git shortlog
 (3):
      A
      B
      C

If you want to reorder B with C:

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

You just re-order them to be:

pick 33f41be C
pick 1f9133d B

After you're done writing, see the shortlog:

$ git shortlog
 (3):
      A
      C
      B

You can do the same thing with all the commits by re-ordering. It is like what you see is what you get, which is pretty cool :)

疯到世界奔溃 2024-10-24 06:59:55

试试这个:

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

可能有一种使用 git rebase 的方法,但我不太明白。

Try this:

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

There may be a way with git rebase, but I didn't really understand it.

忆离笙 2024-10-24 06:59:55

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

然后,如果您有重新排序提交的正式标准,则可以编写脚本,请参阅例如 真正展平 a git merge 按原始提交日期重新排序提交。

See How do I run git rebase --interactive in non-interactive manner? for using git rebase --interactive in non-interactive manner.

Then, if you have formal criteria for reordering commits, you can script that, see for example Really flatten a git merge to reorder commits by the original commit date.

瀟灑尐姊 2024-10-24 06:59:55

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

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

我假设运行此命令序列两次a row 会将提交树恢复到之前的状态,除了更改已更改的提交哈希值。

If you want to reorder commits in a script and don't want to deal with the commit hashes, then this seems to work as a general solution (based on Paŭlo Ebermann 's answer):

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

I assume that running this sequence of commands twice in a row will restore the commit tree to what it was before, except for changing the changed commit hashes.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文