2013-10-30 32 views
0

我很努力使其發揮作用,很可能是因爲缺乏對每個命令實際負責的理解。從遠程裸回購拉動最近的更新,但不包括某些路徑

我:

  • 「A」,裸回購
  • 「B」,從 「A」 克隆(這也許應該是在一個分支 「A」 代替,但讓我們先從這個用例)。最初,它被克隆爲裸露,但合併時,我需要有一個工作副本。
  • 「B」 從來沒有推到 「A」

場景:

  1. 「A」 得到全9碼更新包括目錄 'Z'
  2. 「B」 剛一個目錄「 Z」改變

我想:

  1. 將所有從遠程「A」進行的更改,除了'Z'
  2. 從「Z」中的「B」更改爲「A」中的更改。

我已經嘗試通過執行以下操作來完成此操作。

在 「B」:

  1. git fetch -a -t origin
  2. git merge --no-commit --no-ff TAG
  3. git reset Z
  4. git commit

它不工作。

  1. git pull --rebase origin master

不過更新 'Z',所以我不知道在哪裏重置 'Z'。

回答

2

相反的git reset,你要在步驟3中使用git checkout

  1. git fetch -a -t origin
  2. git merge --no-commit --no-ff TAG
  3. git checkout HEAD -- Z/
  4. git commit

一般來說,git checkout是通向 說「使我的工作副本中的某些東西看起來像我描述的參考」,無論它是整個工作副本,文件還是子目錄。這正是你想要的:在合併過程中,你想要說「廢除合併的任何更改,而是使目錄Z看起來完全像在HEAD中一樣」。(請記住,HEAD尚未移動,因爲合併尚未提交!)

git reset通常用於操縱HEAD的某些子集,索引(您爲提交進行的更改)以及工作一起復制到某種狀態。重置可能會造成混淆,但如果您需要更多信息,請在git-scm.com上進行詳細的深入報道。

+0

合併嘿灰,在git的合併 - -no-commit --no-ff origin/maseter 我得到:merge:origin(或者我放的任何組合) - 不是我們可以合併的東西,你可以給這個建議嗎? – bua

+0

好的,我使用FETCH_HEAD而不是'origin/master',有些東西可行,但我對它實際做了什麼感到困惑(不知道現在是否正確..) – bua

+0

哦,'origin/master'是ref在我的測試沙箱中使用 - 您的存儲庫可能設置不同。您可以保留第1步和第2步與您在標記中進行合併相同。 (實際上,讓我以這種方式進行編輯 - 它會減少混淆)。 –

0

所以,如果我得到了你的問題正確,你應該在B上得到git checkout -b newbranch,以獲得他們在一個新分支和git commit所有的變化。

提交您的更改後,您現在可以切換回主並執行git fetch -a origin && git merge origin/master。上面的命令將在從A的所有修改合併到B.

以下你可以使用git rebase master newbranch從之前獲得的B上所有的變化和變基他們在改變從A