【问题标题】:Rebase without removing old branch在不删除旧分支的情况下重新设置基准
【发布时间】:2019-03-25 11:05:46
【问题描述】:

我在Git中有以下情况:

A--B--C--D--E--F--G
       \--H--I

我想重新设置分支,但保留原来的分支。所以我想要这个:

A--B--C--D--E--F--G
       \--H--I     \--H'--I'

原因是我的 rebased 分支可能会破坏事情。如果它做得太多,而且我不能轻易修复它,我想继续使用旧分支。

这是在主分支实际上基于另一个存储库并且比原始存储库落后很远的情况下。我正在尝试将我们的 (H-I) 分支恢复到原始 master 分支的最新版本。

【问题讨论】:

  • 如果你想在 git 中复制提交,这就是所谓的樱桃采摘。在不删除旧提交的情况下重新定位是挑选樱桃,而不是重新定位,这就像订购一个没有奶酪的芝士汉堡:) 我知道这在技术上是可以做到的,因为其他人在这里留下了答案,但这个过程仍然是挑选樱桃的过程。
  • 您似乎误解了分支在 Git 中的工作方式。分支只不过是指向提交的指针。
  • @LasseVågsætherKarlsen 这不是毛骨悚然吗?无论如何都不是脚本化的樱桃选择(afaik)吗?

标签: git rebase git-rebase


【解决方案1】:

只需创建一个新分支并在上面工作。

git checkout your-old-branch
git checkout -b to-be-rebased
git rebase master

并在 to-be-rebased 上工作,直到你有一些可行的东西。

所以your-old-branch 仍然指向相同的提交,不受影响。


...两个第一个结帐步骤可以合并为一个(如Johnathon 所指出的那样)以避免不必要的结帐步骤:

git checkout -b to-be-rebased your-old-branch

最后,为了公平起见 Lasse's comment,我们确实可以继续使用 cherry-pick 达到同样的效果:

git checkout -b new-branch master
git cherry-pick master..your-old-branch

【讨论】:

  • 那我不是只有一个空的待rebase分支吗?我需要来自您的旧分支分支的提交。最好不要全部挑选。
  • @Peter No. 由于新分支是从旧分支的尖端创建的,因此它具有相同的确切历史记录(因此:提交)
  • 是的。啊,就是这么简单。 :)
  • 建议:将前两步合并到git checkout -b to-be-rebased your-old-branch,避免二次签出。
  • @JonathonReinhart 你是对的。我试图保持原子性,但你的方式确实更快。
猜你喜欢
  • 1970-01-01
  • 2021-08-31
  • 2022-01-21
  • 2012-12-05
  • 1970-01-01
  • 2021-09-15
  • 2023-02-10
  • 1970-01-01
  • 2011-10-09
相关资源
最近更新 更多