首页 > 解决方案 > 如何强制 git checkout 和覆盖分支?

问题描述

我想签出分支并删除当前退出的分支。

例如git checkout -b --by-force $branch,因此分支将基于当前结帐分支;我总是得到 $branch 名称存在。

我不想合并,我只想使用现有名称进行清晰的结帐。

我不想有几个步骤来完成这个动作。aka,我不想删除/合并分支并签出分支。

签出和删除/合并应该是一个命令语句。

我该怎么办?

标签: git

解决方案


我想你想要:

git checkout -B <branch-name>

为了清楚起见,请记住git checkout永远不会进行任何新提交,但它可以 创建或重置分支名称。也就是说,假设您有:

          C--D--E   <-- branch1 (HEAD)
         /
...--A--B
         \
          F--G--H   <-- branch2

您可以将名称branch1指向 commit H,实际上检查 commit H,现在使用以下命令:

git reset --hard branch2

它通过将它们替换为提交中的内容来丢弃您当前的工作树和索引内容,H并为您提供:

          C--D--E   [abandoned]
         /
...--A--B
         \
          F--G--H   <-- branch1 (HEAD), branch2

但我认为您希望将名称branch2指向现有提交E,放弃提交F-G-H,并附HEAD加到名称branch2。就是这样:

git checkout -B branch2

会做,导致:

          C--D--E   <-- branch1, branch2 (HEAD)
         /
...--A--B
         \
          F--G--H   [abandoned]

此操作将使您的索引和工作树不受干扰,因此,如果您将各种文件更改为与 commit 中存储的内容不匹配E,它们在您的工作树中保持更改(如果在索引中更改,它们在索引)。


推荐阅读