我是Git的新手,并不确定发生了什么。我的伙伴和我正在一起开展一个项目。
我从远程服务器git fetch
获取了所有文件,因此我现在拥有一大堆文件。
我编辑其中一些,他编辑了其中一些,等等。
我每天都在抓取,他开始告诉我他已经修改了一些文件并对其进行了更新,但这些更改并没有出现在我的最后。
我在Windows中打开Git GUI,在左侧有两个面板。
有人说Unstaged Changes
- 我认为这意味着这些
我更改的内容将不会更新到本地存储库
除非我add
他们。
另一个人说Staged Changes (Will Commit)
。在里面
窗口,当我点击一些文件时,我确实看到了更新
朋友们已经制作了哪些没有出现在我正在编辑的文件中,
而且我想我也看到了我所做的改变。
我在目录
git add .
的所有文件
我按下Git GUI中的commit
按钮,现在两个侧面板中没有任何文件,没有Unstaged Changes
和Staged Changes (Will Commit)
。
我检查了所有文件,似乎我和我朋友的结尾的变化都合并到了一个文件中。
我仍然不能100%确定发生了什么。
问题1:我做对了吗?
问题2:merge
究竟做了什么?
因为我一直与git merge origin/master
合并,合并似乎并不是一件可恶的事。我认为commit
只是将当前版本的记录写入一些哈希码,但似乎commit
实际上正在做我认为merge
做的事情 - 它正在合并更改。
抱歉这个冗长的问题,只是很困惑。
答案 0 :(得分:6)
我相信你误解了git fetch
。
它仅提取对远程存储库所做的更改,在您的情况下是master
repo中的origin
分支,但不将它们应用于您的树(它只将它们存储在.git
目录中。另一方面,git merge
将远程更改应用到您的存储库。
您必须使用git pull origin master
来提取您朋友的更改并将其合并到您的工作树中。基本上,git pull
与git 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是一个非常复杂的野兽,我相信从长远来看,良好的基础会得到回报。
我的两分钱。