2017-09-25 147 views
2

我有一個問題。我有2個分支,分別是mastermy-destinations。我對my-destinations分支進行了一些更改,這些分支不在master上。我承諾並將更改推送到my-destinations分支的git repo上。瞭解分支與Git和Github

當切換回掌握我提交併被推到回購不存在的變化,這是我的預期。但是,當我切換回master並運行git status時,它表示master是最新的。我本來以爲它會說masterorigin後面的一個提交。

有人可以幫助我瞭解爲什麼master是最新與origin/master,但沒有提交的修改?

+1

您從未將更改合併到'master'中,爲什麼它會落後?你需要'git checkout master && git merge my-destinations'來改變'master' – CoryKramer

+0

當我嘗試git merge git響應「not something we merge」時,這個響應指的是什麼? – meddy

+0

https://stackoverflow.com/questions/16862933/how-to-resolve-gits-not-something-we-can-merge-error – CoryKramer

回答

1

有人可以幫助我理解爲什麼主人是最新的起源/主,但沒有承諾的變化?

您的local master分支與github remote master分支具有相同的文件。這就是您的(本地)主分支不在您的(遠程)主分支後面的原因。

你的(本地)主分支將是背後是否有其他人(或者你從任何其他遠程計算機)已經COMMITED新的修改(遠程)主分支(提交的任何金額)。

1

您添加提交到my-destinations,在你的本地回購,不master

a    <-- master ref is (a) 
\ 
    b - c - d <-- my-destinations ref is (d) 

當你推到origin,遠程回購,它只是把你現有的本地master分行,並提出了遠程回購master是一樣的。換句話說,遠程master更新爲參考(a),就像您的本地master一樣。如果它已經在(a),那麼對遙控器完全沒有改變。

您的遙控器命名爲origin,這是標準的命名約定。所以,如果你添加本地跟蹤分行遠程master,它會被稱爲origin/master,它會引用發生該分支推後的相同承諾:

a   <-- master (a)* <-- origin/master (a) 
\ 
    b - c - d <-- my-destinations (d) 

(*) - Indicates branch that is checked out 

需要注意的是,如果你沒有推而my-destinations被檢出,然後origin不會有新的提交b,c和d,除非使用命令行標誌或其他方法將所有分支推送到origin。如果您確實推送了my-destinations,那麼在遙控器上也會有b-c-d提交,並且還會指向(d)的本地跟蹤參考。

但最大的問題是如何讓你的新提交回master。爲了從my-destinations讓您的新提交到master,你可以git merge my-destinations與主簽出,其中,在這種情況下,將只是「快進」大師達(d)提交,因爲master被引用的my-destinations父(即他們沒有分歧 - 你可以認爲abcd是一條直線而不是一條分支)。合併之後,你會:

a   <-- origin/master (a) 
\ 
    b - c - d <-- master (d)* <-- my-destinations (d) 

然後,推到遠程之後,origin/master將更新以便它匹配master在提交(d) - 即所有三個裁判將被指向(d)。


注:如果mastermy-destinations分歧,你可以合併或重訂,使他們重新走到一起。在Google中查找「visual git教程」,你應該運行幾個很好的教程來指導你完成這些教程。

另請參見:我推薦Git Extensions作爲一個開源GUI工具,它將幫助您更準確地瞭解您的分支機構,提交本地和遠程操作的GUI。它幫助我更輕鬆地學習Git,在Visual Studio或前臺的其他工具中工作時,我總是在後臺打開它。它會基本向您展示類似於上述圖表的任何回覆,您可以隨時進行更改。