如何强制git checkout和overwirte分支?

时间:2019-12-09 20:03:49

标签: git

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

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

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

我不想采取几个步骤来完成此操作。 aka,我不想删除/合并分支并签出分支。

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

我该怎么办?

1 个答案:

答案 0 :(得分:0)

我想你想要

git checkout -B <branch-name>

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

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

您现在可以使用以下命令将名称branch1指向提交H,并实际上检出提交H

git reset --hard branch2

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

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

但是我想您想让名称branch2指向现有的提交E,放弃提交F-G-H,并将HEAD附加到名称{{1 }}。那是什么:

branch2

会这样做,导致:

git checkout -B branch2

此操作将使您的索引和工作树不受干扰,因此,如果您更改了各种文件以使其与提交 C--D--E <-- branch1, branch2 (HEAD) / ...--A--B \ F--G--H [abandoned] 中存储的内容不匹配,它们将在您的工作树中保持更改(并且如果在索引,它们在索引中也保持不变)。