“为什么?”;git pull origin master“;命令删除最近的合并提交?
我发现,当我尝试“git pull origin master”命令时,有时会删除最近的提交。它发生在我将本地分支合并到主分支,然后从远程原点拉入时 首先,我使用first commit创建了一个git存储库。当前本地负责人和原点/主点到第一次提交(最新) 然后我创建了一个分支(分支名称“test”),进行了简单的更改和提交,并合并到主节点。 然后,提交历史记录如下“为什么?”;git pull origin master“;命令删除最近的合并提交?,git,Git,我发现,当我尝试“git pull origin master”命令时,有时会删除最近的提交。它发生在我将本地分支合并到主分支,然后从远程原点拉入时 首先,我使用first commit创建了一个git存储库。当前本地负责人和原点/主点到第一次提交(最新) 然后我创建了一个分支(分支名称“test”),进行了简单的更改和提交,并合并到主节点。 然后,提交历史记录如下 $ git log --oneline --all --graph --decorate * ea13eb8 (HEAD -&
$ git log --oneline --all --graph --decorate
* ea13eb8 (HEAD -> master) Merge branch 'test'
|\
| * 9d3969f (test) test
|/
* d42ad4e (origin/master) First commit
如您所见,9d3969f是我在测试分支上进行的提交,ea13eb8是通过“git merge test”命令创建的
然后如果我使用“git pull origin master”命令
按照我的要求应用了更改,但现在已删除提交ea13eb8。我只是好奇,当我从远程来源提取时,最近的提交会发生什么情况。您从Git获得的反馈可能会部分揭示这里发生的情况: 已成功重新设置基准并更新了基准/基准/主基准 看起来您的拉策略使用的是重基,而不是简单的合并。因此,当您
git pull
时,会发生一个重基,它可以重写历史记录,也可以在提交时移动。检查.gitconfig
文件中是否有类似以下内容的条目:
[branch]
autosetuprebase = always
您还可以运行以下程序来检查Git配置:
git config --list
如果你不想要当前的行为,那么也许是时候改变你的设置了。或者,您可以使用以下方式通过合并策略显式拉取:
# from master
git fetch origin
git merge origin/master
您似乎使用了
git pull
和rebase
请参阅
默认情况下,git具有添加合并提交的
git merge
行为。再举一个例子说明为什么git pull
不好。请参阅@mattgit pull
的True merge
部分,最终使用git merge
。它只需从远程获取更改,并在同一分支上应用git merge
命令。这还不错,这只是获得本地分支更改的正常方式。@Akshay我不同意。@matt yes以最佳方式重新设置基础。GitMerge创建了新的提交,可以理解图形。但这并不意味着git pull是一种糟糕的方式。
[branch]
autosetuprebase = always
git config --list
# from master
git fetch origin
git merge origin/master