我想创建新的分支'B'。目前,我有一个主分支(本地和远程)和功能分支-'A'(本地)。远程删除功能分支(A)。另外,我的本地功能分支中有一些已提交和未暂存的文件。我想在不丢失任何更改的情况下成为高手,并创建另一个分支,首先提交该分支,然后提交我的新更改。我能怎么做?请提出建议。
答案 0 :(得分:1)
git stash
git checkout master
git checkout -b <newbranchname>
在这一点上,我对要在哪里提交当前分支感到有些困惑。我假设您正在尝试将其提交到您在#3中创建的新分支。
git merge <initialbranch>
git stash pop
答案 1 :(得分:1)
edit:现在,我看到您在某些地方写到您有未跟踪的变更,而在某些地方写了未上演的变更。这是两个不同的事物,应该以不同的方式处理。如果您已跟踪但未暂存更改,则应git stash
进行更改,然后签出新分支,并在将git stash pop
合并到新分支后A
。
edit 2:对于未跟踪的更改,另一种确保未隐藏的更改也可以仅将其应用于新分支的方法是使用带有标志git stash
的{{1}},这也会存储未跟踪的更改。在这种情况下的流量将是
-u
根据您在评论中提供的其他信息,我认为您要达到的状态如下:
git branch newBranch master
git stash -u
git checkout newBranch
git merge A
git stash pop
git add && git commit
分支保持不变master
保持不变A
从master分支出来,其中包含来自分支B
的已提交和未跟踪的更改首先,我想根据您可能没有意识到的后续问题来澄清一些我认为的事情:使用A
签出其他分支或提交,或执行命令时操纵其他分支,您先前签出的分支/提交上的任何提交都不会丢失,您可以随时再次使用git checkout
返回到分支。此外,除非在您检出的提交/分支中对未跟踪的文件进行跟踪,否则将不会对其进行修改。
现在,要解决您的问题,我将使用以下命令:
1. git checkout
从git branch newBranch master
分支创建一个新分支。
2. master
签出新创建的分支。请记住,除非在新分支上对未跟踪的文件进行跟踪,否则将不会对其进行修改,根据您的描述,我知道它们不会被修改。另外请记住,在分支git checkout newBranch
上提交的任何内容都将保留在那里,并且不会因切换到另一个分支而丢失。
3. A
将合并的更改从分支git merge A
合并到新分支。
4. A
和git add
添加未跟踪的更改,并将其提交到新分支。
最后,您可以继续在新分支上工作,或者如果您想返回分支git commit
,则可以执行A
返回。请注意,由于现在在分支git checkout A
上跟踪了分支A
上未跟踪的更改,因此,如果再次更改它们并检出B
,您将在{{ 1}}。
答案 2 :(得分:0)
简单的答案是使用以下内容从master创建新分支,而无需切换。
Hello World! My name is fred
git分支接受源分支的第二个参数。
或者,您可以使用git branch newBranch master
或更彻底地使用git stash
将代码保存为伪提交。这不会处理未跟踪的文件。