2014-02-10 72 views
1

爲了知道我什麼時候需要運行git pull --all我運行git rev-parse origin/<branch name>git ls-remote | grep <branch name>如果我從rev-parse得到的分支的SHA不同於我從ls-remote得到的SHA我知道我需要運行git pull --all我什麼時候需要運行「git pull --all」?

今天,我看到一個問題,這個想法後,我添加了一個新的分支到git倉庫並運行git rev-parse origin/<new branch name>我得到了unknown revision or path not in the working tree。任何想法如何知道何時需要運行git pull --all並支持添加新分支的情況?總之,如何知道一個新的分支是否被添加到git倉庫?

回答

2

通常,您根本不需要運行git pull --all。使用Git,你總是在一個分支上工作,所以在任何時候,當前分支將是你唯一需要關心的分支。通常,甚至會鼓勵您保持本地分支過時,這樣您就可以繼續工作,而無需擔心可能引入更改功能的上游更改(這會影響您當前的工作),甚至會導致合併衝突。

所以通常情況下,如果你真的想更新你當前的分支,你只能運行當前分支的git pull

另一件事是提取。提取使用git fetch將更新所有遠程分支,從遠程存儲庫接收所有更改並將其存儲在origin/branch分支(由於它們屬於遠程,因此稱爲遠程分支)。這樣,您就可以更新遠程存儲庫的本地表示形式,並且可以爲您提供所有更改。然而,這將而不是將這些更改合併到您的本地分支機構,因此您仍然可以完全控制合併時間和內容。

因此,如果您想了解遠程存儲庫上發生了什麼的一些信息,您可以定期致電git fetch更新您的遠程分支機構。這將永遠工作和更新遙控器所提供的任何東西 - 最糟糕的是,它只會告訴你沒有什麼新東西。它還會告訴你哪些遠程分支已更新,何時添加新分支,這也是活動的一個很好的指標。當您決定真的想將遠程更改引入您的本地分支時,您可以運行git pull(內部爲當前分支再次獲取,然後執行合併),或者僅執行git merge origin/branchname將以前提取的更改手動合併到您的本地分支。

+0

我不知道我的理解,我怎麼知道一個新的分支是否被添加到git倉庫?我們正在討論的系統是編譯來自多個存儲庫的代碼所必需的,這些文件沒有進行任何開發。但是如果有人想從一個新分支編譯代碼,他只是創建了系統需要正確處理 – e271p314

+0

查看'origin'上是否有新分支的唯一方法是調用'git fetch'。這將更新列表。 git的分佈式特性允許你在本地開發代碼,而不必關心遠程分支正在做什麼。只有當你問git時,它纔會檢查看看遙控器上發生了什麼。 – Schleis

+0

@ e271p314你知道通過請求遙控器給你提供信息,用'git fetch'。如果你只需要編譯這個資源庫(既不需要本地代碼也不需要合併),那麼你可以做一些像git checkout origin/master一樣的工作,只需要使用遠程分支和分離的頭部,而不必擔心本地分支。所以你可以運行'git fetch'來更新所有的遠程分支,使用'git branch -r'獲得一個遠程分支的列表,然後通過檢查它們來完成你的東西。 – poke

相關問題