Answers:
由于您的文件尚未提交branch1
:
git stash
git checkout branch2
git stash pop
要么
git stash
git checkout branch2
git stash list # to check the various stash made in different branch
git stash apply x # to select the right one
要还存储当前未跟踪(新添加)的文件,请添加参数
-u
,因此:
git stash -u
-u
,因此:git stash -u
。
隐匿,临时提交和变基可能都是过大的。如果尚未将更改的文件添加到索引,则可以只签出另一个分支。
git checkout branch2
只要branch1和branch2之间没有要编辑的文件相同,此方法就起作用。它将保留在branch2上,并保留您所做的工作更改。如果它们不同,则可以指定要将本地更改与通过切换带有-m
checkout选项的分支引入的更改合并。
git checkout -m branch2
如果您已将更改添加到索引,则需要先通过重置来撤消这些更改。(这将保留您的工作副本,只会删除暂存的更改。)
git reset
checkout -m
在某些情况下不是“安全的”(可能会导致合并冲突),则存储是否可以提供任何优势(例如,您可以取消弹出存储的弹出窗口)?
.orig
吗?
警告:不适用于git新手。
这在我的工作流中已经足够了,我几乎已经尝试为其编写新的git命令。通常的git stash
流程是要走的路,但是有点尴尬。通常,我通常会先提交新的提交,因为如果我一直在查看更改,那么所有信息都是新鲜的,最好开始- git commit
找到我发现的内容(通常是我在工作时发现的属于master的错误修正)功能分支)。
所以我如何做到这一点是这样的:
git commit
立即进行更改,并带有良好的提交消息。git reset HEAD~1
撤消当前分支中的提交。有时稍后(异步),或立即在另一个终端窗口中:
cd my-project-master
这是另一个共享相同的WD .git
git reflog
找到我刚刚做的错误修正。git cherry-pick SHA1
提交。您可以选择(仍然异步),然后重新设置(或合并)功能分支以获取错误修正,通常是在您要提交PR并已经清理了功能分支和WD时:
cd my-project
这是我正在研究的主要WD。git rebase master
获得错误修正。这样我可以保持工作的特点不间断,而不必操心git stash
-ing任何东西,或有前清理我WD git checkout
(然后再有检查的特性分支退出。),而且还有我所有的错误修正去master
代替隐藏在我的功能分支中。
IMO git stash
和git checkout
是一个真正的PIA,当你在一些大的功能工作的中间。
my-project-master
共享相同.git
听起来像是它使。为什么不git checkout -b bugfixABC; git commit -a; git reset HEAD^ --hard
打开master
,然后稍后(异步)打开git cherry-pick <SHA1 of the commit(s) in bugfixABC
?(或者,甚至避免避免git rebase --onto master feature bugfixABC
从您当前所在的任何分支中找到SHA1,这意味着您可以在git reset
上面的位置之后直接在SHA1 上这样做feature
。)
checkout -m
更好。
如果是关于已提交的更改,则应查看git-rebase,但正如VonC的评论所指出的那样,当您谈论本地更改时,git-stash无疑是实现此目的的好方法。
到目前为止给出的答案并不理想,因为它们需要大量不必要的工作来解决合并冲突,或者它们做出了很多错误的假设。这是完美的方法。链接是到我自己的网站。
您尚未提交my_branch
要提交的更改master
,而没有提交来自的所有更改my_branch
。
git merge master
git stash -u
git checkout master
git stash apply
git reset
git add example.js
git commit
git checkout .
git clean -f -d
git checkout my_branch
git merge master
git stash pop
从合并master
到分支开始,因为无论如何最终还是要这样做,现在是解决任何冲突的最佳时机。
该-u
选项(又名--include-untracked
中),git stash -u
防止你丢失未跟踪文件,当您以后做git clean -f -d
内master
。
之后git checkout master
,你不很重要git stash pop
,因为稍后您将需要此存储。如果先弹出在其中创建的存储my_branch
,然后再git stash
放入master
,则以后再在其中应用该存储时,将导致不必要的合并冲突my_branch
。
git reset
使产生的一切失去舞台git stash apply
。例如,在存储中已修改但不存在的文件master
会因“由我们删除”冲突而上演。
git checkout .
并git clean -f -d
丢弃所有未提交的内容:对跟踪文件的所有更改以及所有未跟踪的文件和目录。它们已经保存在存储库中,如果留在存储区中,则master
切换回时会引起不必要的合并冲突my_branch
。
最后一个git stash pop
将基于原始my_branch
,因此不会引起任何合并冲突。但是,如果您的隐藏文件包含您已承诺掌握的未跟踪文件,则git会抱怨它“无法从隐藏文件恢复未跟踪的文件”。为了解决这个矛盾,从你的工作树,然后删除这些文件git stash pop
,git add .
和git reset
。