1

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

但是今天我把它弄到了一个非常奇怪的状态,我似乎无法摆脱它。

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

另外,如果我git push origin pqueues在 pqueues 上进行操作,它会说Updates were rejected because the tip of your current branch is behind当我知道我是唯一提交到该远程分支的人时,并且我的本地分支在远程之前提交了一些。

我怎样才能找出实际发生的事情并将其恢复到正常工作状态?

4

2 回答 2

1

在两种情况下,拉取会导致合并。1. 你已经在你的本地分支上进行了提交,例如'master'和其他人将提交推送到'origin/master',因为你的本地'master'上次与'origin/master'同步2 . 您没有对“master”做出任何承诺,但其他人通过将“origin/master”倒回到较早的提交然后向其添加提交来“重写历史”。

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

情况 (2) 可以通过从不重写历史记录来避免:如果必须撤消提交,请使用 git revert 它将添加一个新的提交来撤消前一个提交,并且提交和还原都显示在 git 中并且可以快速转发由所有下游回购。

于 2012-09-14T02:21:20.507 回答
0

注意:无论您使用什么 git pull (并且git pull --rebase在正在拉取的内容之上更新当前分支是一个好主意),git pull都将首先执行 git fetch.

(参见“ git fetch/git pull来自 Git 参考)”

并将git fetch获取远程分支:如果它们不存在于您的本地仓库中,将创建它们。
这就是为什么你第一次 git pull看到:

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

但你只会第一次这样做git pull。所有其他的将获取并更新现有的远程跟踪。
请参阅“ Git:什么是跟踪分支? ”和“远程跟踪分支和远程分支有什么区别? ”,以更好地了解哪些git fetch更新。

于 2012-09-14T04:16:58.473 回答