在回答您的具体问题之前,我想指出您的问题措辞方式的一个小细节:
我有一个 git 分支。被合并了并被 GitLab 删除。现在,发现一个错误,并且我想继续在这个分支工作.
从概念上讲,我认为这样说更有意义:
现在,发现一个错误,并且我想修复它.
由于该错误是已经合并了进入主代码库后,您开发该代码的分支不再相关,这就是为什么典型的操作是在合并后将其删除。假设您想修复一年前引入的错误;您不会尝试找到一年前的分支并从那里开始修复,而是从最新的分支创建一个分支main
(或者无论你的默认分支被称为什么),然后去修复错误。从概念上讲,这也是您应该针对这种情况执行的操作。话虽这么说,如果您创建的新分支碰巧与您以前使用的分支同名,通常是可以的。无论分支名称最后一次使用是在一年前还是几分钟前,情况都是如此。如果您确实重复使用相同的命名分支,您可能希望将其重置为最新版本,例如main
第一的。有多种方法可以做到这一点:
# Get the latest code before any of these
git fetch
# Delete the branch and re-create it:
git switch any-other-branch-name
git branch -d my-fav-branch-name-i-want-to-reuse # delete it
git switch -c my-fav-branch-name-i-want-to-reuse origin/main --no-track # create it again from main
# OR faster
# Just force switch to the same branch name:
git switch -C my-fav-branch-name-i-want-to-reuse origin/main --no-track
# OR faster if already checked out
# Just reset if branch is already checked out
git reset origin/main
这里的要点是分支名称并不神圣,如果您愿意,您可以重复使用分支,或使用其他名称。如果我正在修复错误,我可能更倾向于将我的分支命名为user/ttt/fix-blah-blah-blah
.
因此,根据这些信息,现在让我们回答您的问题。您的设置场景是远程分支已被合并和删除,并且您已重命名本地分支,但它仍在跟踪旧的上游分支名称。
如果我按原样推进会发生什么?
If you git push
,它只会在远程重新创建旧的分支名称。如果您没有重命名分支,假设您打算重复使用相同的分支名称,那么这可能没问题,但由于您重命名了分支,所以这是不可取的。将上游设置为新名称会更容易混淆。
我怎样才能将分支与原点分离?
git branch --unset-upstream
也许创建一个新分支更简单?
请注意,在我上面使用的示例命令中,当从switch
命令,我使用了--no-track
防止其跟踪的选项origin/main
。我不会说创建一个新分支“更简单”,但它使您能够删除旧分支,这很好,因为远程跟踪信息也消失了。在我每天工作的存储库中,我通常在任何时间都有 5-50 个本地分支,所以我喜欢以这样的方式命名我的分支,这样我只需通过阅读就可以很确定它们上面有哪些未合并的提交分支名称。最终,是否再次使用同一个分支,实际上取决于个人喜好。在我使用 Git Flow 的常规存储库之一中,我总是创建一个名为user/ttt/merge-master-into-develop
并在每次执行合并时重新使用相同的名称。但对于常规工作,我的分支名称通常是唯一的并且能够描述我正在执行的任务。