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

ree*_*oid 3 git git-merge git-commit

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

我从远程服务器获取所有文件git fetch,所以我现在有一大堆文件.

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

  • 我每天都在做取件,他开始告诉我他已经修改了一些文件并更新了它们,但这些改变并没有出现在我的最后.

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

    一个人说Unstaged Changes- 我这意味着这些是我改变的东西,除非我add这些,否则不会更新到本地存储库.

    另一个人说Staged Changes (Will Commit).在这个窗口里面,当我点击一些文件时,我确实看到了我的朋友所做的更新,这些更新没有显示在我正在编辑的文件中,我想我也看到了我所做的更改.

  • git add .在我的目录中添加了所有文件

  • 我按下commitGit GUI中的按钮,现在两个侧面板中没有任何文件,no Unstaged Changes和no Staged Changes (Will Commit).

  • 我检查了所有文件,看起来我和我朋友的结尾的变化都已合并到一个文件中.

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

  • 问题1:我做对了吗?

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

因为我不断合并git merge origin/master并且合并似乎并不是一件可恶的事情.我认为commit只是将当前版本的记录写入一些哈希码,但似乎commit实际上正在按照我的想法merge做 - 它正在合并变化.

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

evg*_*eny 6

我相信你是误会git fetch.

它只是获取到远程仓库所做的更改,在你的情况下,master在分支origin回购,但它并没有将它们应用到你的树(只在本地存储它们的.git目录).git merge另一方面,将远程更改应用到存储库.

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

看看这个:Git Fetch vs Pull


另外

您的朋友/您没有push访问原始存储库.你的朋友git push origin master在他提交后正在做什么?提交是本地的,并且必须与世界其他地方"分享" git push.

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