2010-02-19 50 views
4

我想從FeatureBranch合併到主站,而不需要先結賬主''。 我試過(在FeatureBranch是)git ,,從功能分支到主站的本地推送'',不帶結帳

git push . master 

但我得到了(在一定程度上驚訝):

Everything up-to-date 

儘管FeatureBranch其提交它們(還)沒有出現在主。

爲什麼我希望能夠做,,一步本地推'的原因,主要有:

  1. 我想給誰留在掌握了變化,我的同事
  2. 沒有,,結帳大師'的額外步驟
  3. 從而能夠還停留在FeatureBranch
  4. 並避免其迷惑許多文件/警報其中有一些是與目錄/文件很多工具快速變化在回購

我知道我可以用不同的方法在更多步驟中做到這一點。但我想知道是否有一個一步解決方案(我認爲應該有)。

我想/認識到,如果發生衝突,我將不得不切換到主人。但在大多數情況下,我沒有衝突,因此會受益於一步式解決方案。

我的Git版本:

git --version 
git version 1.6.5.1.1367.gcd48 

(Windows)中

TIA
karolrvn

+0

有趣的問題是:什麼,git推。主''做,爲什麼它報告,一切都是最新''? – KarolDepka 2010-02-19 20:32:35

+0

我可能會除了它報告一個錯誤,如本地推不支持 - 你必須先結帳目標分支,然後從你當前的分支合併'' - 但不,它只是運行,很好''和報告,一切最新「,在這種情況下,我的意思不清楚。 – KarolDepka 2010-02-19 20:34:28

回答

0

問題「Merging Branches Without Checkout」爲解釋爲什麼需要結賬提供了很好的答案。
保持一個單獨的回購(與目標分支簽出)是另一種方式。

但主要問題仍然是:push/pull約爲遠程回購。
結帳是關於本地回購。

Git Data Transport Commands

如果你心裏有該模式,你意識到你不推到master

1

你不能承諾比目前其它分支;或者換句話說,由git commit創建的新節點始終是當前HEAD的子節點。

我偶爾會使用一個單獨的「分期」回購,以避免在我住的開發環境切換分支的開銷:

# Currently working on branch 'foo' in $SOME_DIR/main-repo 
# main-repo is a local clone of shared-repo 

# Create the staging repo alongside the existing main-repo 
cd $SOME_DIR 
git clone shared-repo staging-repo 
cd staging-repo 
git remote add local ../main-repo 

# Switch back to main-repo and continue working 
cd main-repo 
# (Make changes and commit to branch foo ...) 

# Switch to the staging repo 
cd $SOME_DIR/staging-repo 

# Make sure we are up to date with shared repo (*) 
git pull 

# Merge changes from main-repo 
git fetch local 
git merge local/foo 

# Push changes up to the shared repo 
git push 

這種方法的一個潛在問題是,它不允許你測試分支'foo'所做的更改與共享/ repo/master (*)中所做的任何更改的合併結果。根據更改的性質,這可能是正常的,但在大多數情況下,您希望在推送到共享存儲庫之前至少快速進行完整性檢查(例如,檢查代碼是否仍然編譯,可能運行冒煙測試)。

爲了做到這一點,你要麼需要:

  1. 構建分期回購 - 但在這種情況下,合併可能只是一直做直接在主回購
  2. 有staging-在主回購的獨立構建環境中回購,即$SOME_OTHER_DIR/staging-repo。這樣可以在不污染main-repo環境的情況下構建和/或測​​試staging-repo。
+0

感謝您的回覆。請注意,我並不是在討論如何進行新的提交:只是將現有提交添加到分支。或者,也許你總結了這個想法? – KarolDepka 2010-02-19 20:23:58

+0

請注意我的問題(在評論中)關於什麼,git push。主'',上面。 – KarolDepka 2010-02-19 20:35:16

+0

按照我的說法,這樣的操作有一天會在git中執行,這不是很好/很可能嗎?它是不是'實現',或者'不可能' - 通過設計''或者可能,但不是'git的方式''''或者可能沒人關心;或者其他一些場景? – KarolDepka 2010-02-19 20:37:36

0

看來你真正想要做的是合併而不是推動?不幸的是,我不認爲這是可能的,但是不具備這是合併的目標分支,因此命令序列是:

git checkout master 
git merge FeatureBranch 
git checkout FeatureBranch 

這整個操作只需要不到一秒鐘,所以我不知道爲什麼我們強烈反對改變master分支此...

+0

Thx迴應。我不是,強烈反對'''我只想從用戶的角度省略一個不必要的步驟(但從技術原因來看git的觀點可能是必要的)「。您是否曾經在結賬後遇到過這樣的情況:許多工具(例如文本編輯器)開始詢問您是否有丟失的文件,打開的文件被其他進程「更改/刪除」?爲什麼我需要/需要去一個不再需要的狀態(「留下」主分支的狀態),以及與哪個狀態不同的狀態我不想再做任何事情。 – KarolDepka 2010-02-19 20:29:22

+0

當合並衝突發生時,可能有例外。但就我而言,這在大多數情況下是不太可能的(我們很少有衝突,因爲我們通常在不同的部分工作)。 – KarolDepka 2010-02-19 20:31:36

+1

我明白你的意思了,而編輯不喜歡的時候,文件在它們下面改變的時候非常有用。在git的情況下,「技術原因」可能是它希望你在要修改的分支上,在這種情況下是'master'。這樣你就不會修改你看不到的狀態。 – 2010-02-19 21:02:58

3

關於你提到的關於爲什麼push命令的行爲像它...

推用於從一個存儲庫傳播提交問題到另一個,不在分支內的分支機構RY。在你的情況下,你從一個存儲庫推送到同一個存儲庫,所以答案是「一切都是最新的」,就像它應該那樣。在這種情況下,您命名兩個不同分支的事實是無關緊要的。

0

我有同樣的問題,並根據您的想法,我找到了解決辦法很簡單:

git push . HEAD:master 

這個工作,只要主人可以快進到當前的頭,也就是你開始你當前在master上的分支,並且在master上沒有新的提交。

相關問題