为什么当我拉动时git合并?

时间:2012-09-14 02:04:53

标签: git merge pull

我最近才开始使用git并且非常满意它,它绝对是一个很棒的工具。

但是今天我已经处于一个非常奇怪的状态,但我似乎无法摆脱它。

我有两个远程分支,master和pqueues。我希望能够将这些分支拉到同名的locals分支中,但是当我执行git pull时,它会将master拉入并合并到我检出的任何分支中。如果我在本地pqueues上做git pull,它会自己和master进行合并。我真的不明白为什么。

此外,如果我在p git push origin pqueues上发出Updates were rejected because the tip of your current branch is behind,当我知道我是唯一一个提交到该远程分支的人时,我的本地分支是远程提前的一些提交。< / p>

如何找出实际发生的情况并将其恢复到正常工作状态?

2 个答案:

答案 0 :(得分:1)

有两种情况,拉动会导致合并。  1.您已在当地分行提交了提交,例如'master'和其他人将提交推送到'origin / master',因为当你的本地'master'最后与'origin / master'同步时  2.你没有提交'master',但是其他人通过将'origin / master'倒回到之前的提交然后向其添加提交来'重写历史'。

对于案例(1),如果您可以执行“git pull --rebase”,它将重播您对原始/主人的新HEAD的更改

案例(2)可以通过永远不会重写历史来避免:如果必须撤消提交,请使用git revert,这将添加一个新的提交,撤消前一个提交和提交并恢复所有显示在git中,可以所有下游回购都快速转发。

答案 1 :(得分:0)

注意:无论你使用什么git pull(并且git pull --rebase最好在拉动内容的基础上更新当前分支),git pull将首先执行git fetch

(参见“git fetch/git pull from Git Reference)”

git fetch将获取远程分支:如果它们在您的本地仓库中不存在,则会创建它们。
这就是您在首先 git pull上看到的原因:

* [new branch] pqueues -> pqueues/pqueues 
* [new branch] master -> pqueues/master 

但是你只会为第一个git pull。所有其他的将获取并更新现有的远程跟踪 请参阅“Git: What is a tracking branch?”和“What is the difference between a remote tracking branch, and a branch on a remote?”,以便更好地了解git fetch更新内容。