我想创建新分支“B”。目前,我有一个主分支(本地和远程)和功能分支“A”(本地)。
功能分支(A)已在远程删除。另外,我的本地功能分支中有一些已提交的文件和未暂存的文件。我想在不丢失任何更改的情况下转到 master 并创建另一个分支,首先提交该分支,然后提交我的新更改。我该怎么办?
在某些地方您写道您有未跟踪的更改,而在某些地方您则写道您有未暂存的更改。这是两件不同的事情,应该以不同的方式处理。如果您已跟踪但未暂存的更改,则应在签出新分支之前
git stash
更改您的更改,并在将 git stash pop
合并到新分支后 A
更改它们。
对于未跟踪的更改,确保它们也被隐藏然后将它们应用到新分支的另一种方法是使用
git stash
和标志 -u
,它也隐藏未跟踪的更改。这种情况下的流程是:
git branch newBranch master
git stash -u
git checkout newBranch
git merge A
git stash pop
git add && git commit
我相信你想要达到的状态是:
master
分支保持不变A
保持不变B
从 master 分支出来,其中包含分支 A
首先,请注意:当您使用
git checkout
签出不同的分支或提交时,或者当您执行操作其他分支的命令时,您之前签出的分支/提交上提交的任何内容都不会丢失,您可以继续随时再次使用 git checkout
返回到它。此外,未跟踪的文件不会被修改,除非它们在您正在签出的提交/分支中被跟踪。
现在,我将使用以下命令:
git branch newBranch master
在 master
分支上创建一个新分支。git checkout newBranch
签出新创建的分支。请记住,除非在新分支上跟踪未跟踪的文件,否则不会修改它们,从您的描述中我了解到它们不是。另请记住,在分支 A
上提交的任何内容都将保留在那里,并且不会因切换到另一个分支而丢失。git merge A
将已提交的更改从分支 A
合并到新分支。git add
和 git commit
添加未跟踪的更改并将其提交到新分支。最后,您可以继续在新分支上工作,或者如果您想返回分支
A
,您可以执行git checkout A
返回。请注意,由于分支 A
上未跟踪的更改现在在分支 B
上跟踪,如果您再次更改它们并签出 B
,您将获得来自 A
的新更改之前的版本。
git stash
git checkout master
git checkout -b <newbranchname>
此时我对您想要将当前分支提交到哪里感到有点困惑。我假设您正在尝试将其提交到您在 #3 中创建的新分支。
git merge <initialbranch>
git stash pop
简单的答案是使用以下命令从 master 创建一个新分支,而无需切换。
git branch newBranch master
git 分支 接受源分支的第二个参数。
或者,您可以使用
git stash
或更彻底的 git stash save "name description"
将代码保存在伪提交中。这不处理未跟踪的文件。
对于较新版本的 Git,即版本 2.23 及以上,您可以使用 switch 命令
隐藏当前更改
git stash
转到您的主要或大师
git checkout main
创建新分支并切换到它
git switch -c new-branch-name
替代 3。只需创建一个新分支而不切换:
git branch --new-branch-name