79

服务器上有一个 git 控制的文件夹,其中主分支被签出,并且一大堆文件已被修改且未提交。有没有办法让我将更改提交到单独的分支,以便我可以回到干净的版本?

即我想有效地撤消所有这些人的更改,但将它们存储在另一个机会中,这样如果那个人想要他们的更改,他们可以切换到该分支。

(是的,我知道这不是 git 的设计方式,但这是我的情况!)非常感谢任何想法。

4

3 回答 3

138

首先移动到基于当前 HEAD 的不同分支是这样执行的:

git checkout -b newbranch

提交所有更改(假设没有新添加的文件,否则git add它们):

git commit -a

回到主分支:

git checkout master

之前未提交的更改都将在 newbranch 分支上,而 master 仍将处于没有这些更改的状态。

于 2009-09-21T06:52:28.887 回答
13

您可以随时隐藏您的更改。

git stash
git checkout -b bravenewmaster
git stash apply

还要记住,如果你提交到“错误的”分支,你总是可以将该分支移回,因为分支只不过是指向提交的指针。

于 2009-09-21T06:45:13.957 回答
13

这个方法很有用:

git checkout -B <new_branch> <start point>

在哪里:

  • <new_branch>是你的新分支(例如my_branch
  • <start point>是您的起始分支(master在您的情况下)
  • -B从 开始创建新分支<start point>,如果它已经存在,则将其重置为(它不会因为-b分支已经存在而失败)
  • 有时-m在切换分支时指定很有用,这将在当前分支和工作树内容之间执行三向合并(对脚本很有用)。

请参阅:man git-checkout了解更多详情。

于 2016-01-17T14:05:30.693 回答