创建当前更改的Git分支

问题描述:

我开始在我的主分支上工作,认为我的任务很简单。过了一段时间,我意识到这需要更多的工作,我想在新的分支中完成所有这些工作。我如何创建一个新的分支并在不污染主人的情况下与我一起进行所有这些更改?创建当前更改的Git分支

+8

[将现有的,未完成的工作移动到Git中的新分支](http://stackoverflow.com/questions/1394797/move-existing-uncommited-work-to-a-new-branch-in -git) – Marijn 2013-06-19 09:29:54

+0

dup http://stackoverflow.com/questions/2569459/git-create-a-branch-from-unstaged-uncommited-changes-on-master – andrej 2014-01-28 12:51:59

+1

谢谢!我也是! – Jonah 2014-09-05 15:27:55

如果你还没有提交任何提交,只有(1:分支)和(3:结帐)就足够了。
或者,在一个命令:git checkout -b newBranch

正如git reset man page提到:

$ git branch topic/wip  # (1) 
$ git reset --hard HEAD~3 # (2) NOTE: use $git reset --soft HEAD~3 (explanation bellow) 
$ git checkout topic/wip # (3) 
  1. 你已经取得了一定的提交,但意识到他们是不成熟是在 “master” 分支。您想要继续在主题分支中对其进行打磨,因此请创建“topic/wip”分支,使其脱离当前的HEAD
  2. 快退master分支以摆脱这三个提交。
  3. 切换到“topic/wip”分支并继续工作。

注:由于git reset --hard命令(它重置索引和工作树因为<commit>在工作树的任何更改跟踪文件被丢弃)的“破坏性”的影响,我宁愿去一个:

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

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

+5

也可能值得注意的是,如果您已将主题材料提交到其他人从其存储库中的主分支中,这不是一个好主意。或者至少,如果你确实需要重新设置,你需要告诉人们你正在做的是什么,所以他们下一次拉的警告不会太过震撼。 – 2010-10-10 09:54:35

+0

我其实还没做任何提交。所以非常简单,谢谢队友 – willcodejavaforfood 2010-10-10 11:05:05

+19

给未来读者的提示:从下往上阅读(或者一定要阅读全文)。 'git reset --hard'会破坏你的改变,如果它们还没有被提交,它们是不可恢复的!你可能只需要'git checkout -b ...' – 2012-05-30 18:58:40

既然你还没有做出任何承诺的是,你可以保存所有的更改,以藏匿,创建并切换到一个新的分支,然后在弹出这些更改回你的工作树:

git stash # save local modifications to new stash 
git checkout -b topic/newbranch 
git stash pop # apply stash and remove it from the stash list 
+7

或VonC指出'git checkout -b newbranch'并跳过存储 – willcodejavaforfood 2010-10-10 15:46:52

+0

@will:我在想,创建一个新分支会覆盖您所有未提交的更改,但如果情况并非如此,那么您可以跳过藏。 – Ether 2010-10-10 15:58:09

+1

我试了一下,它工作正常,git非常周到,并且不会覆盖任何本地更改 – willcodejavaforfood 2010-10-10 16:35:57

像在这个问题中说:Git: Create a branch from unstagged/uncommited changes on master:藏匿处是没有必要的。

只需使用:

git checkout -b topic/newbranch

所有提交的工作将沿着新的分支服用。

如果您尝试推你会收到以下消息

致命的:当前的分支功能/ NEWBRANCH没有上游分支。为了 推动当前分支和设置远程上游,使用

git push --set-upstream origin feature/feature/NEWBRANCH 

只要做的建议,以创建远程分支:

git push --set-upstream origin feature/feature/NEWBRANCH

+5

我已经做了两次了。很棒! – simgineer 2014-01-16 03:59:58

+1

只有当您推送新分支时,才会得到'无上游分支'错误,而不是在您提交新工作时。 – sam 2017-11-15 23:59:07

+1

@sam我已经修改了相应的答案 – 2018-01-11 22:51:06

遵循以下步骤:

  1. 创建新分支:

    git branch newfeature 
    
  2. 结帐新的分支:(这不会重置你的工作。)

    git checkout newfeature 
    
  3. 现在提交这一新的分支工作:使用上述步骤

    git commit -s 
    

将保持你的原始分支清洁,你不必做任何'混帐重置 - 硬'。通常

git branch branch/name 
git checkout branch/name 
git push origin branch/name 

次我忘了添加起始部分,推动并感到困惑,为什么我没有看到新的分支/犯:

+1

'-s'在步骤3中做了什么? – 2015-12-11 16:54:58

+7

@ScottBiggs这是没有必要的,但一些人遵循的做法。它是[[--signoff]](https://git-scm.com/docs/git-commit)的缩写,并将您的用户名添加到提交给未来查看日志的用户,以知道您已经放弃了此提交。 – 2016-02-03 15:46:13

+2

很好的答案,但在步骤3中不需要'-s'。 – 2016-07-18 16:37:56

新的变化添加到一个新的分支,并推送到远程bitbucket