我发现当我尝试;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
行为,它会添加合并提交。