2011-09-17 129 views
3

我是一個Git的新手,不確定發生了什麼。我的朋友和我正在一起開展一個項目。在Git中合併和提交混淆

我拿來從遠程服務器git fetch的所有文件,所以我現在有一大堆文件。

  • 我修改其中的一些,他編輯的一些,等

  • 我繼續做取日常,他開始告訴我,他已經修改了一些文件,並更新他們,但是這些變化並沒有出現在我的結尾。

  • 我在Windows中打開Git的圖形用戶界面,左側有兩個面板。

    一說Unstaged Changes - 我採取這一意味着這些 東西我改變,除非我add他們將不會更新到本地存儲庫 。

    另一種說Staged Changes (Will Commit)。這裏面 窗口,當我點擊了一些文件,我看到我的朋友 所做的更新,其未顯示在我編輯, 文件了,我想我也看到我所做的更改。

  • 我加入所有與git add .的文件在我的目錄

  • 我按下按鈕commit Git中的GUI,現在有在任何兩個側面板,沒有Unstaged Changes並沒有Staged Changes (Will Commit)的任何檔案。

  • 我檢查所有的文件,它看起來像來自我的終點與朋友結束的變化已經合併成一個文件。

我仍然不是100%確定發生了什麼事。

  • 問題1:我做對了嗎?

  • 問題2:這到底是什麼merge嗎?

因爲我一直合併git merge origin/master合併似乎並沒有做一件該死的事情。我認爲commit只是將當前版本的記錄寫入一些哈希代碼,但似乎commit實際上在做我認爲merge所做的 - 它正在合併更改。

對不起,這個冗長的問題,只是非常困惑。

+1

你可能想混帳拉,而不是混帳取。 – tjameson

+4

不要擔心,起初Git讓所有人感到困惑。然後有一天,它會'點擊',你會想知道你是如何沒有它的生活:)我經歷了一段好奇心,然後接受,然後憎恨,然後回到接受,並愛。它只是git的方式:) – CodingWithSpike

回答

6

我相信你誤會了git fetch

只取到遠程倉​​庫所做的更改,在你的情況下,在origin回購的master分支,但它確實將它們應用到你的樹(只本地存儲他們在.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

+0

但這仍然不能解決我的問題:合併似乎沒有做任何事情。每次我合併時,都會說「已經是最新的」。但是我可以在Git GUI中看到有些變化沒有被「合併」。 – reedvoid

+0

請張貼截圖,我很好奇你的意思。 – evgeny

+0

所以你們似乎暗示「合併」實際上是否做了什麼?因爲我從來沒有見過它在我身上做任何事情。 – reedvoid

1

這將花費很長的時間來解釋,並且我已經在series of blog articles幹過。看看他們。從初學者的角度來看,他們會引導你學習這樣的基本知識。

0

如果你珍惜良好的閱讀,我建議你這本書Version Control with Git鞏固你的Git的知識。文章肯定是更直接和更便宜的,但Git是一個非常複雜的野獸,我相信從長遠來看,良好的基礎是值得的。

我的兩分錢。