当前位置:  开发笔记 > 编程语言 > 正文

如何将我的本地未提交的更改合并到另一个Git分支?

如何解决《如何将我的本地未提交的更改合并到另一个Git分支?》经验,为你挑选了4个好方法。

我怎么能在git中这样做:

我当前的分支是branch1,我做了一些本地更改.但是我现在意识到我实际上是要将这些更改应用于branch2.有没有办法应用/合并这些更改,以便它们成为branch2上的本地更改而不在branch1上提交它们?



1> VonC..:

由于您的文件尚未提交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


**还要存储当前未跟踪(新添加的)文件**,添加参数`-u`,所以:`git stash -u`.
别客气.有关隐藏使用的更多示例,请访问http://unethicalblogger.com/posts/2008/11/git_protip_stash_goods_yo_git_stash.
如果您正在寻找相同问题但使用TFS的解决方案,则等效的解决方案是搁置您的更改,然后使用TFS Power Tools使用/ migrate开关取消搁置到正确的分支.

2> CB Bailey..:

存储,临时提交和变基都可能过度.如果您还没有将更改的文件添加到索引中,那么您可以只签出另一个分支.

git checkout branch2

只要您编辑的文件在branch1和branch2之间不同,这将起作用.它会让你在branch2上保留工作变更.如果它们不同,那么您可以指定要将本地更改与通过使用-mcheckout选项切换分支所引入的更改进行合并.

git checkout -m branch2

如果您已添加对索引的更改,那么您将首先通过重置撤消这些更改.(这将保留您的工作副本,它只会删除分阶段的更改.)

git reset


简单的传统结账似乎更适合手头的问题.checkout重量较轻,它只是更新需要更改的文件.也许它更容易理解存储方法,或者可能只是在这个用例中结账是"安全的"并不明显.
我认为存储"更简单"以某种方式理解,但是你的方法更好地考虑了不同分支的工作目录.+1

3> rbento..:

前面提到的藏匿方法的一个较短的替代方案是:

暂时将更改移动到存储区.

    git stash

创建并切换到新分支,然后只需一步即可将存储区弹出.

    git stash branch new_branch_name

然后只是addcommit这个新分支的更改.



4> chakrit..:

警告:不适用于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.

推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有