如何解决关于在 Git 中与本地修改合并的问题
以下是我们尝试在本地拉取一个git仓库时遇到的一个非常常见的错误信息,其中本地仓库中有一些现有的本地更改。
Please commit your changes or stash them before you merge. Aborting
我有一个关于 stdcall's 中的 answer this post 的问题。
他在那边提到了以下 3 个选项。
问题:
如果我只是使用命令 git commit -m "Saving my local changes"
提交我的本地更改,git pull
是否不会抛出我上面提到的相同错误?我的意思是我不需要在推送到 gitlab 时进行合并(使用 git merge
)或任何东西?
在正常工作流程中,当我没有看到任何错误时,我会按照以下步骤提交和推送我的更改:
- git 添加。
- git commit -m "我的消息"
- git push
由于我遇到上述错误,以下步骤是否正确:
我过去使用过 git stash
,这导致我的本地更改被抹去,所以我很害怕使用它。不过,我没有使用 git stash pop,可能这就是它表现得如此的原因。
解决方法
git pull
获取最新更改并通过单个命令执行合并。从它的docs:
将远程存储库中的更改合并到当前分支中。在默认模式下,git pull
是 git fetch
后跟 git merge FETCH_HEAD
的简写。
所以你描述的会起作用。首先,您的 git commit
将创建您的更改的本地提交。然后,git pull
将从远程获取新更新并将其与本地更改合并,如有必要,创建新的合并提交。然后 git push
会将所有内容推送回遥控器。
git pull
抛出该错误,因为工作目录不干净,无法执行 merge
。因为,我在这里过于简单化了,git pull
基本上是一个 fetch + 合并,git 需要一种合并文件的方法。如果有未保存/丢弃/隐藏的更改,则无法合并。
这不会使您免于冲突 - 获取远程更改可能导致本地冲突 - 远程更改涉及您已触及的文件,从而导致冲突。因此,需要标准的冲突解决方案。有关详情,请参阅 this answer。
推送时不合并
您不会,但并非每次推动都成功。有时,您没有的遥控器会发生变化。然后 git 会告诉你 “嘿!遥控器中有你没有的东西,我不能像那样覆盖。拉动它们以便你可以解决任何你需要解决的问题,这样你就可以推动干净”。看,现在 git 告诉你拉 - 因此合并 - 这样你就可以推送(当然,除非你 push --force
...)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。