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

Question on merging with local modifications in Git

以下是我们尝试在本地拉取 git 存储库并在本地存储库中进行一些现有本地更改时遇到的非常常见的错误消息。

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

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

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

问题: 如果我只是使用命令 git commit -m "Saving my local changes" 提交我的本地更改 git pull 不会抛出我上面提到的相同错误吗?我的意思是在推送到 gitlab?

时我不需要进行合并(使用 git merge)或任何操作

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

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

由于出现上述错误,以下步骤是否正确:

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

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

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

Incorporates changes from a remote repository into the current branch. In its default mode, git pull is shorthand for git fetch followed by git merge FETCH_HEAD.

那么您所描述的将起作用。首先,您的 git commit 将创建您的更改的本地提交。然后,git pull 将从远程获取新更新并将其与本地更改合并,必要时创建新的合并提交。然后 git push 将把它全部推送回远程。

git pull 抛出该错误,因为工作目录不干净,无法执行 merge。因为,我在这里过分简化了,git pull 基本上是一个获取 + 合并,git 需要一种合并文件的方法。如果有不是 saved/discarded/stashed.

的更改,则无法合并

这并不能使您免于冲突 - 获取远程更改可能 导致本地冲突 - 远程更改涉及您已触摸的文件从而引起冲突。因此,需要标准的冲突解决方案。有关详细信息,请参阅


I don't merge when I push

你没有,但并不是你所做的每一次推送都是成功的。有时,您没有的遥控器会发生变化。然后 git 会告诉你 “嘿!遥控器里有些东西你没有,我不能就这样覆盖。拉它们,这样你就可以解决你需要的任何东西解决,以便您可以干净地推动。看,现在 git 告诉你拉 - 因此合并 - 这样你就可以推(当然除非你 push --force...)