Git中合并和提交之间的混淆

时间:2011-09-17 02:16:26

标签: git git-merge git-commit

我是Git的新手,并不确定发生了什么。我的伙伴和我正在一起开展一个项目。

我从远程服务器git fetch获取了所有文件,因此我现在拥有一大堆文件。

  • 我编辑其中一些,他编辑了其中一些,等等。

  • 我每天都在抓取,他开始告诉我他已经修改了一些文件并对其进行了更新,但这些更改并没有出现在我的最后。

  • 我在Windows中打开Git GUI,在左侧有两个面板。

    有人说Unstaged Changes - 我认为这意味着这些   我更改的内容将不会更新到本地存储库   除非我add他们。

    另一个人说Staged Changes (Will Commit)。在里面   窗口,当我点击一些文件时,我确实看到了更新   朋友们已经制作了哪些没有出现在我正在编辑的文件中,   而且我想我也看到了我所做的改变。

  • 我在目录

  • 中添加git add .的所有文件
  • 我按下Git GUI中的commit按钮,现在两个侧面板中没有任何文件,没有Unstaged ChangesStaged Changes (Will Commit)

  • 我检查了所有文件,似乎我和我朋友的结尾的变化都合并到了一个文件中。

我仍然不能100%确定发生了什么。

  • 问题1:我做对了吗?

  • 问题2:merge究竟做了什么?

因为我一直与git merge origin/master合并,合并似乎并不是一件可恶的事。我认为commit只是将当前版本的记录写入一些哈希码,但似乎commit实际上正在做我认为merge做的事情 - 它正在合并更改。

抱歉这个冗长的问题,只是很困惑。

3 个答案:

答案 0 :(得分:6)

我相信你误解了git fetch

它仅提取对远程存储库所做的更改,在您的情况下是master repo中的origin分支,但将它们应用于您的树(它只将它们存储在.git目录中。另一方面,git merge将远程更改应用到您的存储库。

您必须使用git pull origin master来提取您朋友的更改并将其合并到您的工作树中。基本上,git pullgit fetch相同,后跟git merge

检查出来:Git Fetch vs Pull


<强>替代地

您的朋友/您不是push到原始存储库。你的朋友在他提交后正在做git push origin master吗?提交是本地的,要与世界其他地方“分享”,你必须git push

唯一的例外是当直接在origin存储库上工作时。然后他不需要推动,因为他的所有提交已经在他的分支origin

答案 1 :(得分:1)

这需要很长时间来解释,我已经在series of blog articles中完成了。看看他们。他们从初学者的角度引导您完成这样的基本内容。

答案 2 :(得分:0)

如果你重视阅读,我会建议你使用Version Control with Git这本书来巩固你对Git的了解。文章肯定更直接,更便宜,但Git是一个非常复杂的野兽,我相信从长远来看,良好的基础会得到回报。

我的两分钱。