2012-11-28 82 views
9

我開始使用Git,所以我覺得這個問題可能是一天的newbiest問題,因爲這個任務是如此的簡單,但它造成嚴重的頭痛..Git的合併,推動

我有2個地方分支機構:

  • 本地/生產

和2的遙控器:

  • 生產

我需要通過本地更改生產。所以,我的工作流程是:

git checkout local/production 
git merge master 
git commit 
git push 

混帳合併: 似乎做工精細,它檢測到的所有差異。

git的承諾:

在當地的分公司/生產

你的分支是提前實現 '產地/生產' 的2個提交。

沒有提交(工作目錄乾淨)

而且混帳推:

一切了最新

所以這一切,我不能將我的更改推送到遠程存儲庫。

回答

12

根本原因:爲了簡化說明,在我看來你的local/production沒有跟蹤origin/production。您可以使用git branch -avv進行檢查。

關於git push:請注意,git push沒有參數將更新所有已在本地跟蹤分支更新(從git-push(1)手冊頁)遠程分支:

git push ... [<repository> [<refspec>...]] 

The special refspec : (or +: to allow non-fast-forward updates) directs git to 
push "matching" branches: for every branch that exists on the local side, the 
remote side is updated if a branch of the same name already exists on the remote 
side. This is the default operation mode if no explicit refspec is found (that is 
neither on the command line nor in any Push line of the corresponding remotes 
file---see below). 

因爲簡單的結果git push如果忘記了本地分支所做的更改,有時候並不是很出人意料,我個人喜歡明確指定要推送的分支。你的情況,似乎這是你想做的事:

git push origin local/production:production 

如果你想local/production跟蹤origin/production,您可以使用選項-u使local/production跟蹤分行origin/production

git push -u origin local/production:production 

(只需要一次)。然後你可以從原點拉到local/production

執行摘要:您需要了解跟蹤分支的概念和git push的特殊語義。

P.S.我在想你的分支名稱local/production的選擇。爲什麼不只是production?我懷疑你已經有production跟蹤origin/production,也許使用local/production爲你本地開發。在這種情況下,合理的工作流程是這樣的:

  1. git pull origin production:production拉更改您的production
  2. 如果production有新的提交,即local/production背後則要麼衍合local/productionproduction(或合併productionlocal/production
  3. 要更改,mergecherry-pick您提交推到productiongit push origin production:production推動改變的時刻。
+0

你說得對@FooF。我的問題是我沒有鏈接(或跟蹤?)分支本地/生產。所以'git push'(沒有參數)沒有檢測到這個分支。另一種解決方案是將此添加到git config:'git config remote.origin.push local/prodcution:refs/heads/production'。無論如何,我同意明確指定要推送哪些分支。 –