git:将当前分支中未提交的工作保存到新分支中。

8

有时我会遇到以下情况: 我正在工作分支(比如主分支),并且在编辑一些文件,但当我需要提交更改时,我意识到我更愿意将其提交到一个新的分支(例如实验性分支)。换句话说,旧分支(主分支)必须保持不变,并且需要创建一个新的分支,它应该看起来像:

.. -- master -- new commit

最简单的方法是什么?

目前,我将代码提交到旧分支,然后创建新分支,最后重置旧分支。但这样做真的很丑陋。


2
可能是重复的问题:Git:如何将现有工作移动到新分支? - brendan
3个回答

7
git checkout -b branch       # create new branch out of current head
git add <files>              # the changes you had done in your working directory will be carried over
git commit -m "message"      # commit!

但是,当要提交时,我意识到我更喜欢提交到一个新分支。 - COD3BOY
@user1004474 - 试一下吧。当你切换分支时,未暂存和已暂存的更改都会在那里。 - manojlds
1
是的,你说得对,我以为checkout会丢弃所有更改。有时候,相同的git命令会执行不同的操作,这很令人困惑。如果能做到像这样就好了:git commit -b new_branch ....... - tros443
1
嗯,我是初学者,我认为在进行一些更改之前应该创建一个新分支! 在这种情况下,user1004474已经进行了更改! 所以我很困惑。 - COD3BOY
看,我和用户1004474一样有同样的疑问!:D - COD3BOY
@user1004474 - 这不会是问题,因为提交并不与分支关联,而是与父级关联。有一些管道命令可以让您创建具有所需父级的提交。 - manojlds

1

如果您先创建新分支,这样会稍微容易一些:

$ git checkout -b new_branch
$ git commit

重点是我之前没有计划,所以更改是先进行的(可能有一些添加到了git add索引中),然后我才决定分支。 - tros443
@user1004474:它仍然有效。无论您是否有更改以及它们是否已添加到索引中,您都可以运行git checkout -b new_branch - hammar

0

另一种可能性是您可以继续将它们提交到master分支,然后从新的HEAD(例如feature)中切出另一个分支。完成此操作后,您可以使用git reset将master重置为提交之前的位置。


好的,那你没有读到“目前,我提交到旧分支,然后创建新分支,最后重置旧分支。但这真的很丑陋。”这段话。 - manojlds
是的,我错过了那个。不过我认为它并不那么丑陋。 - Noufal Ibrahim
获取操作使得任务变得简单,但在我看来很丑陋。 - manojlds

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接