Git将Master上未提交的更改放入新分支


Answers:


151

您可以只签出到测试分支,然后提交。移到另一个分支时,您不会丢失未提交的更改。

假设您在master分支中:

git checkout test
git add .
git add deletedFile1
git add deletedFile2
...
git commit -m "My Custom Message"

我不确定删除的文件,但我猜您使用时不包括这些文件 git add .


12
有时结帐会失败,因为您的更改与该分支冲突。您可以尝试签出-m进行合并。
Jouni K.Seppänen2010年

2
我尝试了此操作,但遇到了一个错误:错误:您对以下文件的本地更改将被签出覆盖。请先提交更改或存储更改,然后再切换分支。
ishwr

尽管这将行得通,但应首选使用存储的答案,IMO。也许只是个人选择,但从逻辑上讲,这是一种更简洁的工作流程,并引入了STASH(这是一个有用的命令)。
帕特里克

缺少选项“ -b”,因为标题表明问题与“新”分支有关。
Guntram

195

您还可以通过执行以下操作来创建新分支并切换到该分支:

git checkout -b new_branch
git add .

我一直使用它,因为在开始编辑代码之前,我总是忘记启动一个新分支。


3
与@jouni在另一个答案中提到的问题相同-如果其他更改与原始更改冲突,您可能会遇到将分支合并回master的困难。IMO这个线程更好地回答了这个问题:stackoverflow.com/questions/556923/…–
jpw

简短,甜美和令人放心的……“我一直都在用这个……”
δοδεMεδιϲ

1
不要忘记在new_branch中进行提交。如果您切换回master分支并还原更改的文件,则它们也会在new_branch中丢失。
petrsyn 2014年

36

为什么不使用git stash。我认为它像复制粘贴一样更加直观。

$ git branch
  develop
* master
  feature1
  TEST
$

当前分支中有一些要移动的文件。

$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#      modified:   awesome.py
#
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#
#      modified:   linez.py
#
$
$ git stash
Saved working directory and index state \
  "WIP on master: 934beef added the index file"
HEAD is now at 934beef added the index file
(To restore them type "git stash apply")
$
$ git status
# On branch master
nothing to commit (working directory clean)
$
$
$ git stash list
stash@{0}: WIP on master: 934beef ...great changes
$

移到另一个分支。

$ git checkout TEST

并申请

$ git stash apply
# On branch master
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#
#      modified:   awesome.py
#      modified:   linez.py
#

我也喜欢,git stash因为我使用git flow,当您想要完成功能分支同时仍在工作目录中进行更改时会抱怨。

就像@Mike Bethany一样,这总是发生在我身上,因为我在处理一个新问题时却忘记了我仍然在另一个分支上。所以,你可以你的工作,git flow feature finish...以及git stash apply新的git flow feature start ...分支。


2
git stash是我处理未提交的更改的首选方式。当您将其视为剪切和粘贴时,这无疑是一种直观的方法。
马修·米切尔

这对我来说似乎是个好方法。它没有问题。
Yunus Nedim Mehel 2014年

不知道您可以做到这一点,并且效果很好。感觉比其他方法更直观。
glaucon,2014年

我认为隐藏它是更专业的方法,而不是使用git checkout然后添加。我认为您的答案应该是100票以上。
Matrosov Alexander

1
@Καrτhικ– git stash --include-untracked
54 2Toad

5
git checkout TEST
git add file1 file2
git commit
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.