为什么git认为高手在遥控器之前,当它实际落后时?

时间:2016-05-16 11:29:40

标签: git github

我在GitHub上有一个回购,其他人已经创建了几个新分支,我点击了" merge"在GitHub上的分支上将它们合并为master。

在GitHub的提交历史记录中,我可以看到四个提交:人员在分支上的提交(hash1hash2),然后是我的合并提交({{ 1}}和hash3)。这很好。

但我对我的本地git状态感到困惑,以及如何让它与遥控器同步。我在主分公司。

如果我输入hash4,我在本地看到的最后一次提交是人在分支上的提交(git whatchangedhash1),而不是远程合并提交({ {1}}和hash2)。

如果我输入hash3,我会看到以下内容:

hash4

为什么git认为git statusOn branch master Your branch is ahead of 'origin/master' by 2 commits. (use "git push" to publish your local commits) nothing to commit, working directory clean 将它置于远程主控之前?是不是主人后面,因为它没有hash1hash2

如果我输入hash3,我会看到:

hash4

所以它似乎并不了解git pull origin masterFrom github.com:myorg/myrepo * branch master -> FETCH_HEAD Already up-to-date.

我现在害怕在本地制作一个新的提交,以防我搞砸了主人,有不必要的额外合并等等。我应该做些什么才能让所有东西都与远程主人保持同步,并开始干净石板?

更新:此处是hash3的输出:

hash4

这是git remote -v的输出:

origin  git@github.com:myorg/myrepo.git (fetch)
origin  git@github.com:myorg/myrepo.git (push)

啊,所以如果我在本地做git log --graph --decorate --pretty=oneline --abbrev-commit --all我实际上可以看到四个合并提交,而不是两个!他们只是没有出现在* 2315aed (HEAD -> master) Merge branch 'master' of github.com:myorg/myrepo |\ | * 9de7505 (origin/master) Merge pull request #12 from myorg/reposition-video | |\ * | \ 0d1d845 Merge branch 'reposition-video' of github.com:myorg/myrepo |\ \ \ | |/ / |/| / | |/ | * 1067905 (origin/reposition-video, reposition-video) Move the video below the fold. * | a5e8d96 Merge pull request #11 from myorg/update-install-docs |\ \ | |/ |/| | * 9744ffa Minor documentation fixes. |/ * 4b4d507 Update README. * 89da81b Add latest code for feature. ,这也是我感到困惑的部分原因。

现在问题:我如何撤消这些额外的本地合并,并重新与远程同步,只有两个合并提交?它们是如何首先发生的 - 我想在git log期间必定会有一些自动合并?

2 个答案:

答案 0 :(得分:2)

您可以使用

强制<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" tools:context=".MainActivity"> <ViewFlipper android:id="@+id/image_flipper" android:layout_width="fill_parent" android:layout_height="fill_parent" > </ViewFlipper> </RelativeLayout> 使用master
origin/master

这应放弃git checkout master git reset --hard origin/master 0d1d845,您的网络应该看起来像

2315aed

你不会破坏任何东西。如果这不是您想要的或意外中断,您可以回到&#34;凌乱的状态&#34;使用

* 9de7505 (origin/master, HEAD -> master) Merge pull request #12 from myorg/reposition-video
|\ 
| * 1067905 (origin/reposition-video, reposition-video) Move the video below the fold.
* |   a5e8d96 Merge pull request #11 from myorg/update-install-docs
|\ \
| |/
|/|
| * 9744ffa Minor documentation fixes.
|/
* 4b4d507 Update README.
* 89da81b Add latest code for feature.

答案 1 :(得分:1)

您需要了解Git报告本地master分支状态的任何内容都与本地跟踪分支相关,后者跟踪真正的远程master在GitHub上。当您看到以下内容时:

Your branch is ahead of 'origin/master' by 1 commit.

这意味着您的本地master位于本地跟踪分支之前一次提交。它并不一定意味着遥控器上实际发生的事情。导致这种状态的事件可能如下:

git checkout master
git pull origin master
# work work work
git commit
git status

现在这里变得多汁了。当你再次做到

git pull origin master

您合并了远程master分支上的所有新工作。所以现在你当地的Git说你已经掌握了遥控器的最新信息,而且你是。但问题是,现在遥控器已经落伍了。因此,您还应该将本地分支合并到远程master。由于您使用的是GitHub,因此发出拉取请求是一种干净而安全的方法。