我怎么能在git中这样做:
我当前的分支是branch1,我做了一些本地更改.但是我现在意识到我实际上是要将这些更改应用于branch2.有没有办法应用/合并这些更改,以便它们成为branch2上的本地更改而不在branch1上提交它们?
由于您的文件尚未提交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
由benjohn 评论(参见git stash
手册页):
要隐藏当前未跟踪(新添加)的文件,请添加参数
-u
,以便:
git stash -u
存储,临时提交和变基都可能过度.如果您还没有将更改的文件添加到索引中,那么您可以只签出另一个分支.
git checkout branch2
只要您编辑的文件在branch1和branch2之间不同,这将起作用.它会让你在branch2上保留工作变更.如果它们不同,那么您可以指定要将本地更改与通过使用-m
checkout选项切换分支所引入的更改进行合并.
git checkout -m branch2
如果您已添加对索引的更改,那么您将首先通过重置撤消这些更改.(这将保留您的工作副本,它只会删除分阶段的更改.)
git reset
前面提到的藏匿方法的一个较短的替代方案是:
暂时将更改移动到存储区.
git stash
创建并切换到新分支,然后只需一步即可将存储区弹出.
git stash branch new_branch_name
然后只是add
和commit
这个新分支的更改.
警告:不适用于git新手.
这在我的工作流程中已经足够了,我几乎试图为它编写一个新的git命令.通常的git stash
流程是要走的路,但有点尴尬.我通常先做一个新的提交,因为如果我一直在查看这些更改,所有信息都在我的脑海中清新,最好只是启动git commit
我发现的东西(通常是我在工作时发现的一个属于master的bugfix)功能分支)马上.
它也很有帮助 - 如果遇到这样的情况很多 - 在你当前的工作目录旁边有一个总是
master
检查分支的工作目录.
所以我如何实现这一点是这样的:
git commit
通过良好的提交消息立即进行更改.
git reset HEAD~1
撤消当前分支的提交.
(可选)继续处理该功能.
有时候稍后(异步),或者立即在另一个终端窗口中:
cd my-project-master
这是另一个WD共享相同的 .git
git reflog
找到我刚刚制作的bugfix.
git cherry-pick SHA1
提交.
(可选)(仍然是异步的)您可以重新绑定(或合并)您的功能分支以获取错误修正,通常在您即将提交PR并已清理您的功能分支和WD时:
cd my-project
这是我正在研究的主要WD.
git rebase master
得到错误修正.
通过这种方式,我可以不间断地继续处理该功能,而不必担心git stash
任何事情或者必须在我之前清理我的WD git checkout
(然后再检查功能分支退出.)并且仍然将我的所有错误修正都转到master
而不是隐藏在我的功能分支中.
IMO git stash
,git checkout
当你处理一些重要功能时,它是一个真正的PIA.