我开始在我的大师分支工作,以为我的任务会很容易。一段时间后,我意识到这需要更多的工作,我想在一个新的分支中完成所有这些工作。
我如何创建一个新的分支,并把所有这些变化与我没有弄脏大师?
如果你还没有做出任何提交,只有(1:分支)和(3:签出)就足够了。或者,在一个命令中:#0
对于git 2.23+(2019年第三季度),新命令#0将在一行中创建分支(与reset --hard相同,因此小心它的影响):
reset --hard
# First, save your work in progress!git stash # Then, one command to create *and* switch to a new branchgit switch -f -c topic/wip HEAD~3
或者,正如Alia的回答所建议的,使用#0,没有git stash:
git stash
git switch -c topic/wip -m
--merge如果您对当前分支和要切换到的分支之间不同的一个或多个文件进行了本地修改,则命令拒绝切换分支,以便在上下文中保留您的修改。但是,有了这个选项,当前分支、您的工作树内容和新分支之间的三方合并完成,您将在新分支上。当发生合并冲突时,冲突路径的索引条目未合并,您需要解决冲突并将已解决的路径标记为git add(如果合并应导致删除路径,则标记为git rm)。
--merge
如果您对当前分支和要切换到的分支之间不同的一个或多个文件进行了本地修改,则命令拒绝切换分支,以便在上下文中保留您的修改。
但是,有了这个选项,当前分支、您的工作树内容和新分支之间的三方合并完成,您将在新分支上。
当发生合并冲突时,冲突路径的索引条目未合并,您需要解决冲突并将已解决的路径标记为git add(如果合并应导致删除路径,则标记为git rm)。
git add
git rm
如#0手册页所述:
$ 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
HEAD
topic/wip
再次:新的方式(自2019年和Git2.23以来)在一个命令中完成所有这些:
git switch -f -c topic/wip HEAD~3
注意:由于git reset --hard命令的“破坏性”效果(它确实重置索引和工作树。自<commit>以来对工作树中跟踪文件的任何更改都将被丢弃),我宁愿使用:
git reset --hard
<commit>
$ git reset --soft HEAD~3 # (2)
这将确保我不会丢失任何私有文件(未添加到索引中)。--soft选项根本不会触及索引文件或工作树(但会将头部重置为<commit>,就像所有模式一样)。
--soft
由于您还没有进行任何提交,您可以将所有更改保存到存储,创建并切换到新分支,然后将这些更改弹出到您的工作树中:
git stash # save local modifications to new stashgit checkout -b topic/newbranchgit stash pop # apply stash and remove it from the stash list
就像这个问题所说的:Git:从master上未标记/未提交的更改创建分支:stash是不必要的。
只需使用:
git checkout -b feature/newbranch
任何未提交的工作将被带到新分支。
如果您尝试推送,您将收到以下消息
致命:当前分支功能/new分支没有上游分支。到推送当前分支并将远程设置为上游,使用git push --set-upstream origin feature/newbranch
致命:当前分支功能/new分支没有上游分支。到推送当前分支并将远程设置为上游,使用
git push --set-upstream origin feature/newbranch
只需按照建议远程创建分支:
遵循这些步骤:
创建一个新分支:
git branch newfeature
签出新分支:(这不会重置您的工作。)
git checkout newfeature
现在提交你在这个新分支上的工作:
git commit -s
使用上述步骤将保持原始分支干净你不需要做任何'git重置-硬'。
P. S.-s参数用于提交#1
-s
要将新更改添加到新分支并推送到远程:
git branch branch/namegit checkout branch/namegit push origin branch/name
很多时候我忘记添加原始部分推送和困惑为什么我没有看到新的分支/提交在比特桶
我看到这里的大多数答案都已经过时了。没有必要使用新的开关命令进行藏匿和弹出。
git switch -c new_branch -m
将创建一个名为“new_branch”的新分支,切换到它并将所有未提交的更改作为修改文件带来。然后您可以继续处理更改或将它们提交到新分支等。