如何在Git中执行以下操作?
我当前的分支是branch1,我已经做了一些本地更改。然而,我现在意识到我实际上是想将这些更改应用到branch2。是否有一种方法可以应用/合并这些更改,使它们成为branch2上的本地更改,而无需在branch1上提交它们?
如何在Git中执行以下操作?
我当前的分支是branch1,我已经做了一些本地更改。然而,我现在意识到我实际上是想将这些更改应用到branch2。是否有一种方法可以应用/合并这些更改,使它们成为branch2上的本地更改,而无需在branch1上提交它们?
当前回答
因为你的文件还没有在branch1中提交:
git stash
git checkout branch2
git stash pop
or
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
上面是rbento回答的更长的更明确的版本:
git stash
git stash branch branch2
它使用:
git stash branch <branchname> [<stash>] Creates and checks out a new branch named <branchname> starting from the commit at which the <stash> was originally created, applies the changes recorded in <stash> to the new working tree and index. If that succeeds, and <stash> is a reference of the form stash@{<revision>}, it then drops the <stash>. This is useful if the branch on which you ran git stash push has changed enough that git stash apply fails due to conflicts. Since the stash entry is applied on top of the commit that was HEAD at the time git stash was run, it restores the originally stashed state with no conflicts.
正如benjohn所评论的(见git stash手册页):
要保存当前未跟踪的(新添加的)文件,添加参数-u,这样:
git stash -u
其他回答
相对于公认的答案,一个简短的替代方案是:
临时将更改移动到存储区。
git 存储
创建和切换到一个新的分支,然后弹出隐藏到它在仅仅一个步骤。
Git存储分支new_branch_name
然后只需将更改添加并提交到这个新分支。
如果它是关于提交的更改,你应该看看git-rebase,但正如VonC在评论中指出的,当你谈论本地更改时,git-stash肯定是做到这一点的好方法。
我发现这个答案很有用。
然而,由于该线程已关闭,无法作出评论,我有一个问题的答案。
当我应用git checkout other_branch时,我得到了以下错误
error: pathspec 'other_branch' did not match any file(s) known to git
因此,我没有应用这个命令,而是使用它来解决我的问题
git branch other_branch
git checkout other_branch
以下是我遵循的步骤:
Git克隆{link} CD(回收文件夹)
你可以检查状态和你正在使用的分支:
git状态 git分支 Git分支-a
注意:在这里,如果您在迁移到新分支之前对本地回购进行了更改,那么以下步骤仍然有效。
如果“git branch”显示master,你想创建+移动到另一个分支:
Git checkout -b{分支名称}
使用“git branch”再次检查分支 它现在应该显示您在新的分支中。
现在添加、提交和推送:
Git添加。 Git commit -m "添加新分支" Git推送源{分支名称}
上述步骤适用于我在移动到新的本地分支之前进行更改或移动到新分支之后进行更改的情况。 我希望它能帮助遇到类似情况的人。
警告:不适合git新手。
这在我的工作流程中出现得足够多,我几乎试图为它写一个新的git命令。通常的git隐藏流是要走的路,但有点尴尬。我通常先做一个新的提交,因为如果我一直在看变化,所有的信息都在我的脑海中是新鲜的,最好马上开始git提交我发现的东西(通常是我在一个功能分支工作时发现的属于master的错误修复)。
如果您经常遇到这样的情况,在当前目录旁边设置另一个工作目录总是签出主分支,这也是很有帮助的。
我是这样实现的:
Git立即提交更改,并提供一个好的提交消息。 git重置HEAD~1来撤销当前分支的提交。 (可选的)继续致力于该特性。
有时稍后(异步),或立即在另一个终端窗口:
cd my-project-master,这是另一个共享。git的WD git reflog找到我刚刚做的bug修复。 git选择提交的SHA1。
可选的(仍然是异步的),你可以重新建立(或合并)你的特征分支来获得错误修复,通常当你准备提交PR并且已经清理了你的特征分支和WD时:
cd我的项目,这是我正在工作的主要WD。 Git重基master以获得错误修复。
这样我就可以不受干扰地继续工作,而不必担心git会存储任何东西,或者在git签出之前必须清理我的WD(然后再次检查功能分支),并且仍然有我所有的错误修复到master,而不是隐藏在我的功能分支中。
在我看来,git隐藏和git签出是一个真正的PIA,当你正在开发一些大功能时。