关于在 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
)或任何操作
在我没有看到任何错误的正常工作流程中,我按照以下步骤提交并推送我的更改:
- git 添加 .
- git commit -m "我的消息"
- git推
由于出现上述错误,以下步骤是否正确:
- git commit -m "保存我的本地更改'
- git pull // 这将拉取分支上的任何内容,包括我的本地更改
- 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
...)
以下是我们尝试在本地拉取 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
)或任何操作
在我没有看到任何错误的正常工作流程中,我按照以下步骤提交并推送我的更改:
- git 添加 .
- git commit -m "我的消息"
- git推
由于出现上述错误,以下步骤是否正确:
- git commit -m "保存我的本地更改'
- git pull // 这将拉取分支上的任何内容,包括我的本地更改
- 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 forgit fetch
followed bygit 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
...)