Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“为什么?”;git pull origin master“;命令删除最近的合并提交?_Git - Fatal编程技术网

“为什么?”;git pull origin master“;命令删除最近的合并提交?

“为什么?”;git pull origin master“;命令删除最近的合并提交?,git,Git,我发现,当我尝试“git pull origin master”命令时,有时会删除最近的提交。它发生在我将本地分支合并到主分支,然后从远程原点拉入时 首先,我使用first commit创建了一个git存储库。当前本地负责人和原点/主点到第一次提交(最新) 然后我创建了一个分支(分支名称“test”),进行了简单的更改和提交,并合并到主节点。 然后,提交历史记录如下 $ git log --oneline --all --graph --decorate * ea13eb8 (HEAD -&

我发现,当我尝试“git pull origin master”命令时,有时会删除最近的提交。它发生在我将本地分支合并到主分支,然后从远程原点拉入时

首先,我使用first commit创建了一个git存储库。当前本地负责人和原点/主点到第一次提交(最新)

然后我创建了一个分支(分支名称“test”),进行了简单的更改和提交,并合并到主节点。 然后,提交历史记录如下

$ 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
不好。请参阅@matt
git 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