小编典典

使用当前更改创建 Git 分支

all

我开始在我的 分支上工作,认为我的任务会很容易。过了一会儿,我意识到这需要更多的工作,我想在一个新的分支中完成所有这些工作。

如何在不弄脏 master 的情况下创建一个新分支并随身携带所有这些更改?


阅读 179

收藏
2022-02-28

共1个答案

小编典典

如果您还没有进行任何提交,那么只有 (1: branch) 和 (3: checkout) 就足够了。
或者,在一个命令中: git checkout -b newBranch

使用Git 2.23+(2019 年第三季度),新命令gitswitch将在一行中创建分支(使用相同类型的reset --hard,因此 请注意其效果 ):

# First, save your work in progress!
git stash

# Then, one command to create *and* switch to a new branch
git switch -f -c topic/wip HEAD~3

git reset手册页中所述:

$ git stash                # (0) Save your work in progress
$ git branch topic/wip     # (1)
$ git reset --hard HEAD~3  # (2)  NOTE: use $git reset --soft HEAD~3 (explanation below)
$ git checkout topic/wip   # (3)
  1. 您已经进行了一些提交,但意识到它们在“ master”分支中还为时过早。您想在主题分支中继续完善它们,因此topic/wip从当前的HEAD.
  2. 倒回master分支以摆脱这三个提交。
  3. 切换到“ topic/wip”分支继续工作。

再次:在一个命令中完成所有这些的新方法(自 2019 年和 Git2.23 起):

git switch -f -c topic/wip HEAD~3

注意:由于命令的“破坏性”效果git reset --hard(它确实会重置索引和工作树。工作树中跟踪文件的任何更改<commit>都将被丢弃),我宁愿选择:

$ git reset --soft HEAD~3  # (2)

这将确保我不会丢失任何私人文件(未添加到索引中)。
--soft选项根本不会触及索引文件或工作树(但会将头部重置为<commit>,就像所有模式一样)。


2022-02-28