撤消 Git Stash Pop 冲突
您可以使用本文中的解决方案撤消 git stash pop with merge conflicts
。 我们向您展示了如何中止错误的 stash pop 操作并返回到干净状态。
但我们也演示了一种解决冲突和撤消 git stash pop
新的好合并的方法。
Git Stash Pop 合并冲突——问题所在
在快节奏的开发人员的工作流程中,隐藏当前状态并在新想法出现时跳转到其他功能是很常见的。
当我们完成新功能的工作时,我们使用 git stash pop
命令应用隐藏的更改。 但有时,这种来回的工作流程会导致合并冲突。
在这种情况下,您可能想做以下两件事之一。
- 中止错误的合并并返回到以前的干净状态。
- 您可能希望在本地编辑文件/目录或从远程存储库中拉取以解决合并冲突。 然后您可以将正确的更改与新的提交合并。
让我们看看这两种解决方案。
Undo Git Stash Pop With Conflicts - 中止不良合并以返回干净状态
如果要删除错误的 stash pop 操作中的更改,您应该使用以下任何命令。 这些方法将中止所有导致合并冲突的更改并返回到以前的健康状态。
git reset --merge
首先,让我们看一下设置。 我们有一个包含一些文件的主分支,如下所示:
然后我们从中 fork 一个 new_branch 本地分支。 我们修改了这个分支中的一些文件并提交了这些更改。
我们现在对 file1.txt 和 file2.txt 进行一些更改。 然后我们存储这些更改。
$ git stash -u -m "Modify file1 and file2 in new_branch"
git stash
在这里有几个选项。 -u 标志让我们隐藏未跟踪的更改。
-m 标志具有相同的含义 - 它允许我们向我们的存储添加语义消息。
现在,我们在 master 分支中对相同的 file1.txt 和 file2.txt 进行一些更改。 这些文件在我们的 master 和 new_branch 中有不同的版本。
如果我们要在master分支中应用stash,file1和file2这些不同的版本就会产生冲突。
如果我们现在检查我们的存储库,由于错误的合并尝试,我们会在其中发现奇怪的文件。
我们可以使用带有一些选项的 reset 命令来撤销失败的 stash pop。
$ git reset --merge
git reset
最近学会了 --merge 选项。 --merge 选项类似于默认的 --mixed 选项,但它仅适用于受合并操作影响的文件。
在我们的例子中,我们看到这个命令的结果是 git undo bad stash pop
。
git checkout -f
我们可以通过传递 -f 标志使用 git checkout
命令看到与上面相同的结果。
$ git checkout -f
没有任何参数,git checkout
命令采用默认的 HEAD 参数。 我们的最后一次提交很好,没有糟糕的 stash pop 合并冲突,所以这个命令擦干净了石板。
-f 标志用于 --force 选项。 它通过忽略未合并的提交和未跟踪的文件来帮助确保健康的存储库状态。
以上两种方法如果只是想擦干净的话,最好是undo git stash pop 有冲突。
但是如果你想用新鲜的好合并来解决提交,你需要使用下面的方法。
通过解决不良冲突撤消 Git Stash Pop
您需要在所有分支中同步地很好地编辑文件和目录以解决冲突。
您可以使用一些命令在本地执行此操作,也可以从远程存储库中将其拉入。 我们将研究这两种解决方案。
解决 Git Undo Failed Stash Pop 的冲突 - 对于本地分支
我们有与上面相同的设置。 但是这一次,我们将解决 main 和 new_branch 之间的冲突并重新应用我们的存储以获得所需的结果。
我们首先删除导致 stash pop 冲突的文件更改。 我们在 fork 之后对 master 中的 file1 和 file2 所做的更改导致了问题。
我们将 master 重置为提交之前的提交,并对我们的 file1 和 file2 进行了错误的更改。
git reset <good_commit_hash>
git checkout HEAD .
我们还使用 checkout 命令回滚我们的工作区域。 请注意尾随点 .
,它会选择所有文件以确保所有冲突都得到解决。
您还可以使用:
$ git reset HEAD file1.txt file2.txt
因为在我们的例子中,我们知道两个相关文件是 file1.txt 和 file2.txt。
在这种形式下,git checkout
命令将工作区设置为与 HEAD 对齐,这是最后一次没有冲突的良好提交。
我们现在看到提交已经从我们的 master 分支中消失了。
我们现在成功应用了隐藏的更改。
$ git stash pop
Git Undo Bad Stash Pop - 通过从远程存储库中拉取来解决冲突
如果您的工作流程设置为远程存储库处于最不健康状态,您可以通过从远程拉入来解决不良存储冲突。
让我们首先为这个解决方案设置一个具体的用例。
我们看到我们的本地遥控器落后于我们的远程主机 1 次提交。 假设我们现在创建一个新的本地分支来跟踪远程主机并存储一些更改。
$ git fetch --all
$ git switch -c new_branch_tracking_remote_master origin/master
我们在此分支上存储了一些更改。
git stash -m "Change file5.txt in local branch"
现在我们意识到我们希望在一个新的本地分支上进行这些更改。 我们从本地 master 分叉出一个新的本地分支。
git checkout master
git branch local_branch_2
我们看到这个分支落后了 1 个提交,并且它没有 file5.txt 文件。 如果我们现在弹出我们的存储,它会导致糟糕的合并冲突。
为了解决冲突,在这种情况下,我们将远程主机拉入本地主机。 我们首先需要获取远程存储库。
$ git fetch --all
然后我们将本地主控与远程主控合并。
$ git merge origin/master
我们现在看到我们的本地主机通过拉取最新的更改与远程主机同步。 您还可以看到其中包含关键的 file5.txt。
我们现在将在更新的本地主服务器上重新设置您的本地分支,本地分支 2。
首先,检查当地分支机构。
$ git checkout local_branch_2
现在,在本地master分支上变基。
$ git rebase master
这使我们的 local_branch_2 健康并准备好接收隐藏的更改。
我们现在应用我们隐藏的更改。
$ git stash pop
这次我们看到隐藏的更改已成功应用。
我们已经解决了冲突并成功合并了隐藏的更改。
相关文章
如何在 Windows 系统中卸载 git
发布时间:2023/04/09 浏览次数:223 分类:Git
-
在这篇简短的文章中,我们将学习如何卸载 Git,以及如何在从个人计算机的目录中卸载 Git 后删除这些文件。
Git 如何重命名本地分支
发布时间:2023/04/09 浏览次数:64 分类:Git
-
大多数情况下,重命名分支机构是由于上述情况。 因此,在本教程中,我们将学习使用下面提到的技术更改本地 Git 分支的名称。
重命名 Git 存储库中的文件和目录
发布时间:2023/04/09 浏览次数:102 分类:Git
-
在本文中,我们将讨论 git 中的重命名过程。 我们使用 Git Rename 来更改工作目录中文件和文件夹的名称。
在 Git 中取消初始化存储库
发布时间:2023/04/09 浏览次数:187 分类:Git
-
本本文介绍如何通过 Git 命令行取消初始化 Git 存储库。git init 命令开发一个新的空置 Git 存储库。 它还用于重新初始化已经存在的 Git 存储库。
Git 仓库名称该如何命名
发布时间:2023/04/09 浏览次数:208 分类:Git
-
使用 Git 时,选择一个简洁且最新的存储库名称是一项艰巨的任务。本教程介绍了如何以独特的方式命名 Git 存储库。
配置 Git 以忽略文件模式更改
发布时间:2023/04/09 浏览次数:67 分类:Git
-
本文讨论配置 Git 以忽略文件更改 chmod 所需的步骤。 如果您更改 Git 正在跟踪的文件的权限,系统将在该文件中注册更改。
在 Git 中暂存已删除的文件
发布时间:2023/04/09 浏览次数:93 分类:Git
-
本文讨论了在 Git 中暂存已删除文件的必要步骤。我们知道 rm 命令可以删除一个文件,而无需将其从工作目录中移除。 那么,我们如何暂存已删除的文件以进行提交呢?
在 Git 中显示冲突文件
发布时间:2023/04/09 浏览次数:139 分类:Git
-
本文讨论在 Git 中列出冲突文件的最简单和最干净的方法。 我们可以使用 git status 命令,但这很麻烦,尤其是当我们有大量不冲突的文件时。