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

sol*_*erg 606 git branch

我怎么能在git中这样做:

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

Von*_*onC 877

由于您的文件尚未提交branch1:

git stash
git checkout branch2
git stash pop
Run Code Online (Sandbox Code Playgroud)

要么

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
Run Code Online (Sandbox Code Playgroud)

benjohn 评论(参见git stash手册页):

要隐藏当前未跟踪(新添加)的文件,请添加参数-u,以便:

git stash -u
Run Code Online (Sandbox Code Playgroud)

  • **还要存储当前未跟踪(新添加的)文件**,添加参数`-u`,所以:`git stash -u`. (19认同)
  • 别客气.有关隐藏使用的更多示例,请访问http://unethicalblogger.com/posts/2008/11/git_protip_stash_goods_yo_git_stash. (2认同)
  • 如果您正在寻找相同问题但使用TFS的解决方案,则等效的解决方案是搁置您的更改,然后使用TFS Power Tools使用/ migrate开关取消搁置到正确的分支. (2认同)
  • @Benjohn 好点。我已将您的评论包含在答案中以提高知名度。 (2认同)

CB *_*ley 84

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

git checkout branch2
Run Code Online (Sandbox Code Playgroud)

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

git checkout -m branch2
Run Code Online (Sandbox Code Playgroud)

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

git reset
Run Code Online (Sandbox Code Playgroud)

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

rbe*_*nto 13

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

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

  1. git stash

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

  1. git stash branch new_branch_name

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


cha*_*rit 8

警告:不适用于git新手.

这在我的工作流程中已经足够了,我几乎试图为它编写一个新的git命令.通常的git stash流程是要走的路,有点尴尬.我通常先做一个新的提交,因为如果我一直在查看这些更改,所有信息都在我的脑海中清新,最好只是启动git commit我发现的东西(通常是我在工作时发现的一个属于master的bugfix)功能分支)马上.

它也很有帮助 - 如果遇到这样的情况很多 - 在你当前的工作目录旁边有一个总是master检查分支的工作目录.

所以我如何实现这一点是这样的:

  1. git commit 通过良好的提交消息立即进行更改.
  2. git reset HEAD~1 撤消当前分支的提交.
  3. (可选)继续处理该功能.

有时候稍后(异步),或者立即在另一个终端窗口中:

  1. cd my-project-master 这是另一个WD共享相同的 .git
  2. git reflog 找到我刚刚制作的bugfix.
  3. git cherry-pick SHA1 提交.

(可选)(仍然是异步的)您可以重新绑定(或合并)您的功能分支以获取错误修正,通常在您即将提交PR并已清理您的功能分支和WD时:

  1. cd my-project 这是我正在研究的主要WD.
  2. git rebase master 得到错误修正.

通过这种方式,我可以不间断地继续处理该功能,而不必担心git stash任何事情或者必须在我之前清理我的WD git checkout(然后再检查功能分支退出.)并且仍然将我的所有错误修正都转到master而不是隐藏在我的功能分支中.

IMO git stash,git checkout当你处理一些重要功能时,它是一个真正的PIA.


归档时间:

查看次数:

124312 次

最近记录:

6 年,8 月 前