2016-02-04 83 views
1

所以我的一個分支「somebranch,」我回去主機通過git checkout master。我得到消息「On Branch Master您的分支與'origin/master'是最新的。沒有提交,工作目錄乾淨。」這是我做git狀態時出現的相同信息。git的結帳和git狀態都說我上最新的,但隨後的git拉取不同的

但後來我做git pull,它拉兩個變化掌握。我檢查了git log,似乎在3分鐘前掌握了一項新的承諾。 git status有滯後嗎?我只是做了一個git status,它再次說我是最新的。我嘗試了另一個拉之後,它拉了一個新的分支,但沒有改變主 - 我可以理解,因爲git status可能只檢查我的當前分支是否是最新的。但有人可以解釋git status如何工作,爲什麼看起來有滯後?

問題2:此刻我的git的工作流程是這樣的:

  1. git checkout master
  2. git pull(讓我上的最新版本)
    • 現在我想對一些問題的工作一個新分支
  3. git checkout -b newIssue
    • 方面的工作,解決它
  4. git add .
  5. git commit -m "some msg"

在這一點上我會推,代碼審查和合並。因爲'起源/主人'已經超越了我,我必須做一次重組。我如何保持我的分支newIssuemaster保持同步,這樣我就可以合併?我如何git pullorigin/masternewIssue

回答

1

關於你的第一個問題,git status只着眼於自己的倉庫,沒有任何遠程存儲庫。

一般來說,看一個遠程倉庫,你必須在任何新的它第一次複製到自己的倉庫。這樣做的命令是git fetch(或者您可以使用git remote update來做同樣的事情)。

還有git remote show origin,它諮詢了遙控器,並比較了你當地的「他們的分支在哪裏」和他們告訴你的想法。這可能是你以爲你用git status得到的結果。但它並不是非常有用,因爲你會得到兩個答案中的一個:

  • 您目前處於最新狀態。沒有別的事可做。使用git fetch也無濟於事,你就會完成。
  • 您不是最新的。您必須獲得最新信息才能重新綁定或合併。要做到這一點,你必須運行git fetch,這會帶給你最新的信息,然後你就可以繼續。

比較這對只運行git fetch,這要麼什麼也不做(你現在正在做)或更新你(你現在就可以變基或合併)。

1

你讓你的方式newIssue分支上的最新相對於上游主是通過衍合它的主人,因爲你已經做的。您可以:

git checkout master 
git pull 
git checkout newIssue 
git rebase master 
...continue working... 

或者,你可以:

git remote update 
git rebase origin/master 
...continue working... 

都將讓你在同一個地方(而在第二種情況下,當地master分行仍然會落後origin/master,直到你做一個git pull在那個分支上)。

有可能顯然是衝突,底墊的一部分,如果有人正在修改你的工作在同一個文件,但定期重訂有助於減少這些變化的大小。

+0

很酷,感謝您的提示! –

1

git status比較你的本地分支與git在最後一次讀取/提取時間時知道的遠程分支。像大多數git命令一樣,它不會去到服務器或任何其他地方,所以如果有人最近推送了一些更改,它不知道它們。如果要使git status保持最新,請先執行git fetch