创建一个新分支

问题描述 投票:0回答:4

我想创建新分支“B”。目前,我有一个主分支(本地和远程)和功能分支“A”(本地)。

功能分支(A)已在远程删除。另外,我的本地功能分支中有一些已提交的文件和未暂存的文件。我想在不丢失任何更改的情况下转到 master 并创建另一个分支,首先提交该分支,然后提交我的新更改。我该怎么办?

git github
4个回答
6
投票

在某些地方您写道您有未跟踪的更改,而在某些地方您则写道您有未暂存的更改。这是两件不同的事情,应该以不同的方式处理。如果您已跟踪但未暂存的更改,则应在签出新分支之前

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

我相信你想要达到的状态是:

  1. master
    分支保持不变
  2. 功能分支
    A
    保持不变
  3. 有一个新分支
    B
    从 master 分支出来,其中包含分支
    A
  4. 中已提交和未跟踪的更改

首先,请注意:当您使用

git checkout
签出不同的分支或提交时,或者当您执行操作其他分支的命令时,您之前签出的分支/提交上提交的任何内容都不会丢失,您可以继续随时再次使用
git checkout
返回到它。此外,未跟踪的文件不会被修改,除非它们在您正在签出的提交/分支中被跟踪。

现在,我将使用以下命令:

  1. git branch newBranch master
    master
    分支上创建一个新分支。
  2. git checkout newBranch
    签出新创建的分支。请记住,除非在新分支上跟踪未跟踪的文件,否则不会修改它们,从您的描述中我了解到它们不是。另请记住,在分支
    A
    上提交的任何内容都将保留在那里,并且不会因切换到另一个分支而丢失。
  3. git merge A
    将已提交的更改从分支
    A
    合并到新分支。
  4. git add
    git commit
    添加未跟踪的更改并将其提交到新分支。

最后,您可以继续在新分支上工作,或者如果您想返回分支

A
,您可以执行
git checkout A
返回。请注意,由于分支
A
上未跟踪的更改现在在分支
B
上跟踪,如果您再次更改它们并签出
B
,您将获得来自
A
的新更改之前的版本。


5
投票
  1. 隐藏当前更改
    git stash
  2. 收银大师
    git checkout master
  3. 创建新分支
    git checkout -b <newbranchname>

此时我对您想要将当前分支提交到哪里感到有点困惑。我假设您正在尝试将其提交到您在 #3 中创建的新分支。

  1. 将初始分支的更改合并到新分支
    git merge <initialbranch>
  2. 从存储中检索存储的更改
    git stash pop
  3. 添加本地更改并提交

1
投票

简单的答案是使用以下命令从 master 创建一个新分支,而无需切换。

git branch newBranch master

git 分支 接受源分支的第二个参数。

或者,您可以使用

git stash
或更彻底的
git stash save "name description"
将代码保存在伪提交中。这不处理未跟踪的文件。


0
投票

对于较新版本的 Git,即版本 2.23 及以上,您可以使用 switch 命令

  1. 隐藏当前更改

    git stash

  2. 转到您的主要或大师

    git checkout main

  3. 创建新分支并切换到它

    git switch -c new-branch-name

替代 3。只需创建一个新分支而不切换:

git branch --new-branch-name

© www.soinside.com 2019 - 2024. All rights reserved.