为什么"git pull origin master"命令会删除最近的合并提交?



我发现当我尝试;git pull-origin master";命令,有时会删除最近的提交。当我将本地分支合并到主分支,然后从远程源提取时,就会发生这种情况。

首先,我用第一次提交创建了一个git存储库。当前本地HEAD和原点/主机指向第一个提交(最新(。

$ git log --oneline --all --graph --decorate
* d42ad4e (HEAD -> master, origin/master) First commit

然后我创建了一个分支(分支名称"test"(,进行了简单的更改和提交,并合并到master。然后,提交历史如下所示。

$ git log --oneline --all --graph --decorate
*   ea13eb8 (HEAD -> master) Merge branch 'test'
|
| * 9d3969f (test) test
|/
* d42ad4e (origin/master) First commit

如您所见,9d3969f是我在测试分支上进行的提交,ea13eb8是通过";git合并测试";命令

那么如果我使用";git pull-origin master";命令,

$ git pull origin master
From https://github.com/????/????
* branch            master     -> FETCH_HEAD
Successfully rebased and updated refs/heads/master.
$ git log --oneline --all --graph --decorate
* 9d3969f (HEAD -> master, test) test
* d42ad4e (origin/master) First commit

更改按我的意愿应用,但现在已删除提交ea13eb8。我只是想知道,当我从远程原点提取时,最近的提交会发生什么。

您从Git获得的反馈可能会部分揭示这里发生的事情:

成功重新设定基准并更新refs/heads/master。

您的拉取策略似乎使用了rebase,而不是简单的合并。因此,当您git pull时,会发生一个重新基准,它可以重写历史记录,也可以绕过提交。检查.gitconfig文件中的条目,如下所示:

[branch]
autosetuprebase = always

您也可以运行以下程序来检查您的Git配置:

git config --list

如果您不想要当前的行为,那么也许是时候更改您的设置了。或者,您可以使用通过合并策略显式提取

# from master
git fetch origin
git merge origin/master

使用git pull时似乎使用了rebase

请参考git rebase有空的提交行为

默认情况下,git具有git merge行为,它会添加合并提交。

相关内容

  • 没有找到相关文章

最新更新