我有一个 Git 分支。它被 GitLab 合并并删除了。现在,发现一个错误,并且我想继续在这个分支上工作。我将其重命名,但它仍然跟踪着已删除的分支(它不知道 GitLab 已删除该分支)。 现在,我很好奇,在这种情况下我该怎么做:
- 如果我按照现在的方式推送,会发生什么?
- 如何将分支从 origin 上分离?
- 也许更简单的方法是创建一个新的分支?
我有一个 Git 分支。它被 GitLab 合并并删除了。现在,发现一个错误,并且我想继续在这个分支上工作。我将其重命名,但它仍然跟踪着已删除的分支(它不知道 GitLab 已删除该分支)。 现在,我很好奇,在这种情况下我该怎么做:
# 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
这样的名称。如果你如果我按原样推送会发生什么?
git push
,它会简单地在远程重新创建旧的分支名称。如果您没有重命名分支,假设您打算重新使用相同的分支名称,那么这可能是可以的,但由于您重命名了分支,这是不可取的。将上游设置为新名称会减少混淆。
如何将该分支与远程分离?
git branch --unset-upstream
请注意,在上面的示例命令中,当从也许创建一个新分支更简单?
switch
命令创建新分支时,我使用了--no-track
选项,以防止其跟踪origin/main
。我不会说创建一个新分支更“简单”,但它可以使您删除旧分支,这很好,因为远程跟踪信息也会消失。在我每天使用的repo中,我通常随时有5-50个本地分支,因此我喜欢以这样的方式命名我的分支,以便通过读取分支名称就可以相当确定哪些未合并的提交位于它们上面。最终,重新使用相同的分支或否取决于个人喜好。在我经常使用Git Flow的常规repo中,我总是创建一个名为user/ttt/merge-master-into-develop
的分支,并每次重复使用相同的名称。但对于正常工作,我的分支名称通常是独特和描述性的,与我正在处理的任务相关。 git pull origin master
以拉取最新更改并将其合并到您的分支中。
4. 执行 git push -u <branch-name>
将此分支推送到GitLab。(有关此语法的详细信息,请参见 https://dev59.com/W3E85IYBdhLWcg3wdDSz#6232535)
- 这一步非常重要,因为您将无法再将此分支推送到GitLab。由于它已被删除,它实际上是一个新分支,您必须将其推送到GitLab上游。