【问题标题】:How to replace one git branch with another?如何用另一个替换一个 git 分支?
【发布时间】:2022-12-18 17:16:42
【问题描述】:

有时我会检查一个测试分支,看看 rebase 是否有效。但这让我处于这样一种情况,我有一些分支feat-234,还有一些分支test,我想用测试替换feat-234

示例工作流程:

# on branch feat-234
git checkout -b test
git rebase main 
# apply fixes required to make rebase work

此时我想使用test而不是feat-234,因为我想做的已经奏效了。

编辑 1

我在分支test 上尝试执行以下操作:

  • git branch -D feat-234,删除feat-234
  • git branch -m feat-234`

我认为这没有用,因为我认为我已经丢失了feat-234 上的所有远程信息。

【问题讨论】:

  • 您也可以git push origin test:feat-234 将本地test 分支推送到远程feat-234 分支
  • 只是 git reset --hard 功能分支到测试分支。首先确保测试分支确实具有您想要的历史记录。
  • @Useless 来检查,那个命令是什么?我不确定如何重置 --hard 一个分支到另一个分支 :S

标签: git rebase


【解决方案1】:

在您确认 test 正是您希望功能分支变成的样子之后:

git checkout feat-234
git reset --hard test

你就完成了。您可能还需要使用 --force 进行推送,因为您并不是简单地向分支添加提交。

【讨论】:

    【解决方案2】:

    我想对您的工作流程提出一个小的调整,这可能比您提出的流程稍微干净一些:

    1. 当您希望测试诸如合并或变基之类的东西时,在您决定要保留它之前根本不要费心使用分支:

      git switch --detach # 请注意,如果需要,您可以添加起始提交或分支名称

      这相当于像您一样移动到另一个 test 分支,但您只是还没有命名该分支,如果您不喜欢这个结果,您可能永远不会命名。通过这种方式,您也不必在完成后删除任何测试分支。现在做任何你要为你的测试做的事情,在你的情况下可能是git rebase main

      1. 如果您喜欢结果并希望创建当前分支feat-234,只需:

      git switch -C feat-234

      这将创建一个名为 feat-234 的新分支,就像 -c 所做的那样,但是大写字母 -C 会替换分支(如果它已经存在),在本例中它确实存在。远程跟踪信息也将被保留。

    【讨论】:

      猜你喜欢
      • 2021-12-12
      • 2011-06-13
      • 2021-08-30
      • 2011-02-21
      • 1970-01-01
      • 1970-01-01
      • 2013-04-03
      • 2018-05-17
      相关资源
      最近更新 更多