Answers:
git stash
是你的朋友。
如果尚未提交,请运行git stash
。这样可以节省您的所有更改。
切换到要更改的分支并运行git stash pop
。
git stash有很多用途。这当然是更有用的原因之一。
一个例子:
# work on some code
git stash
git checkout correct-branch
git stash pop
C:\kf [develop +0 ~4 -0]> git checkout feature/customers<br/> error: Your local changes to the following files would be overwritten by checkout:<br/> AspWebApp.vNext/global.asa<br/> RestApi/Web.config<br/> Please, commit your changes or stash them before you can switch branches.<br/> Aborting
如果尚未提交更改,请使用git checkout
移至新分支,然后按常规进行提交-对文件的更改在提交之前不会绑定到特定分支。
如果您已经已经提交改变:
git log
并记住您要移动的提交的SHA。git cherry-pick SHA
从上方键入替换SHA。git reset HEAD~1
在错误分支提交之前重置。cherry-pick
接受给定的提交并将其应用于当前检出的头部,从而使您可以将提交复制到新的分支。
git reset HEAD~N --soft
然后git checkout -b
将所有现在尚未提交的代码移至新分支。
不幸的是,这也经常发生在我身上,git stash
如果我之前意识到自己的错误,我会使用它git commit
,git cherry-pick
否则使用它,在其他答案中两个命令的解释都很好
我想对以下内容进行澄清git checkout targetBranch
:如果targetBranch与当前分支具有相同的历史记录,则此命令将仅保留您的工作目录和暂存快照
如果尚未提交更改,只需使用git checkout移至新分支,然后按常规提交即可
@Amber的语句不是假的,当您移至newBranch时git checkout -b newBranch
,将创建一个新的指针,该指针指向与当前分支完全相同的提交。
实际上,如果您碰巧有另一个分支与当前分支共享历史记录(两个点都在同一提交中),则可以通过以下方式“移动更改”:git checkout targetBranch
但是,通常不同的分支意味着不同的历史记录,并且Git不允许您使用肮脏的工作目录或暂存区在这些分支之间进行切换。在这种情况下,您可以执行git checkout -f targetBranch
(清除并丢弃更改)或git stage
+ git checkout targetBranch
(清除并保存更改),仅运行即可git checkout targetBranch
产生错误:
错误:您对以下文件的本地更改将被签出覆盖:...在切换分支之前,请先提交更改或存储更改。堕胎
一个软的git reset会将提交的更改放回到索引中。接下来,签出您打算提交的分支。然后使用新的提交消息进行git commit。
git reset --soft <commit>
git checkout <branch>
git commit -m "Commit message goes here"
从git docs:
git reset [<mode>] [<commit>]
该表格会将当前分支头重置为,并可能根据来更新索引(将其重置为的树)和工作树。如果省略,则默认为--mixed。必须为以下之一:
--soft
完全不触摸索引文件或工作树(而是将头重置为,就像所有模式一样)。就像git status那样,这会将所有更改的文件保留为“要提交的更改”。