微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

关于在 Git 中与本地修改合并的问题

如何解决关于在 Git 中与本地修改合并的问题

以下是我们尝试在本地拉取一个git仓库时遇到的一个非常常见的错误信息,其中本地仓库中有一些现有的本地更改。

Please commit your changes or stash them before you merge. Aborting

我有一个关于 stdcall's 中的 answer this post 的问题。

他在那边提到了以下 3 个选项。

enter image description here

问题: 如果我只是使用命令 git commit -m "Saving my local changes" 提交我的本地更改,git pull 是否不会抛出我上面提到的相同错误?我的意思是我不需要在推送到 gitlab 时进行合并(使用 git merge)或任何东西?

在正常工作流程中,当我没有看到任何错误时,我会按照以下步骤提交和推送我的更改:

  1. git 添加
  2. git commit -m "我的消息"
  3. git push

由于我遇到上述错误,以下步骤是否正确:

  1. git commit -m "保存我的本地更改
  2. git pull // 这将拉取分支上的任何内容包括我的本地更改
  3. git push //这会将我的本地更改推送到git

我过去使用过 git stash,这导致我的本地更改被抹去,所以我很害怕使用它。不过,我没有使用 git stash pop,可能这就是它表现得如此的原因。

解决方法

git pull 获取最新更改并通过单个命令执行合并。从它的docs

将远程存储库中的更改合并到当前分支中。在默认模式下,git pullgit 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 举报,一经查实,本站将立刻删除。