我开始在我的主分支上工作,认为我的任务会很容易。过了一会儿,我意识到这需要更多的工作,我想在一个新的分支中完成所有这些工作。
如何在不弄脏master的情况下创建一个新分支并随身携带所有这些更改?
我开始在我的主分支上工作,认为我的任务会很容易。过了一会儿,我意识到这需要更多的工作,我想在一个新的分支中完成所有这些工作。
如何在不弄脏master的情况下创建一个新分支并随身携带所有这些更改?
如果您还没有进行任何提交,那么只有 (1: branch) 和 (3: checkout) 就足够了。
或者,在一个命令中:git checkout -b newBranch
使用Git 2.23+(2019 年第三季度),新命令git switch
将在一行中创建分支(使用相同类型的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)
master
”分支中还为时过早。您想在主题分支中继续完善它们,因此topic/wip
从当前的HEAD
.master
分支以摆脱这三个提交。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>
,就像所有模式一样)。
就像这个问题中所述:Git: Create a branch from unstagged/uncommited changes on master : stash is not necessary。
只需使用:
git checkout -b topic/newbranch
任何未提交的工作将被带到新的分支。
如果您尝试推送,您将收到以下消息
致命:当前分支功能/NEWBRANCH 没有上游分支。要推送当前分支并将远程设置为上游,请使用
git push --set-upstream origin feature/feature/NEWBRANCH
只需按照建议远程创建分支:
git push --set-upstream origin feature/feature/NEWBRANCH
跟着这些步骤:
创建一个新分支:
git branch newfeature
结帐新分支:(这不会重置您的工作。)
git checkout newfeature
现在在这个新分支上提交你的工作:
git commit -s
使用上述步骤将使您的原始分支保持清洁
,您不必执行任何“git reset --hard”。
提交的PS-s
参数是--signoff
由于您还没有进行任何提交,您可以将所有更改保存到 stash,创建并切换到新分支,然后将这些更改弹出回您的工作树:
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
要将新更改添加到新分支并推送到远程:
git branch branch/name
git checkout branch/name
git push origin branch/name
很多时候我忘记添加原始部分来推送并感到困惑为什么我在 bitbucket 中看不到新的分支/提交