如果您尚未提交更改
如果您的更改与其他分支兼容
这个问题就是这种情况,因为OP希望提交到新分支,并且如果您的更改与目标分支兼容而不触发覆盖,则OP也适用。
就像约翰·布罗迪(John Brodie)接受的答案一样,您只需签出新分支并提交工作即可:
git checkout -b branch_name
git add <files>
git commit -m "message"
如果您的更改与另一个分支不兼容
如果出现错误:
error: Your local changes to the following files would be overwritten by checkout:
...
Please commit your changes or stash them before you switch branches
然后,您可以存储您的工作,创建一个新的分支,然后弹出您的存储更改,并解决冲突:
git stash
git checkout -b branch_name
git stash pop
就像您在创建新分支之后进行了这些更改一样。然后您可以照常提交:
git add <files>
git commit -m "message"
如果您已进行更改
如果要将提交保留在原始分支中
请参阅Carl Norum的樱桃采摘答案,在这种情况下,这是正确的工具:
git checkout <target name>
git cherry-pick <original branch>
如果您不想将提交保留在原始分支中
请参阅joeytwiddle关于这个潜在重复项的答案。根据需要执行上述任何步骤,然后回滚原始分支:
git branch -f <original branch> <earlier commit id>
如果您已将更改推送到GitHub之类的共享远程目录,则除非您知道自己在做什么,否则不应尝试进行此回滚。