2015-04-23 55 views
0

Git是一個強大的工具,有助於提高生產力。但正如他們所說,擁有巨大的權力會帶來巨大的責任,我不想在使用Git提高生產力的同時搞亂任何東西。 我需要一些策略,同時使用Git作爲我的版本控制。 以下是使用本地分支時的一些情況。 有人請解釋我該如何處理這些問題: A和B是本地分支機構X是遠程分支機構Git - 切換本地分支的各種場景

1.A從X中拉出來,做了一些更改。沒有上演,沒有承諾,沒有推動。 如何切換到分支B而不丟棄A的更改但不包含它們在B中

2.A從X中拉出,做了一些更改。很少非分頁(是/否),分步更改,未提交,未推送。 如何切換到分支B而不丟棄A的更改但不包括它們在B中

3.A從X中拉出,做了一些更改。幾乎不分配(是/否),分階段更改,已提交更改,未推送。 如何切換到分支B而不丟棄A的變化但不包括B中的變化

4.A從X中拉出來,做了一些更改。想要保留這些更改的副本,並希望在A 的變化之上同時處理其他兩個功能(我之所以同時處理多個功能的原因是因爲我可能在等待某人的進一步處理方法,功能和不想浪費時間)

5.A從X拉,做了一些改變。 A被推送到遠程。希望沒有這些更改的舊版本可以採用另一種方法來實現相同的功能。這裏有兩個子場景: a)在從A拉出A並將A推回遠程之前,沒有人推動任何更改。 b)在A從X中拉出之後,我將A推回到遠程之前,有人推新代碼。

很少有案例可能有相同的解決方案,很少有案例可能是無效/無效的,但爲了理解它們爲什麼它們是無效的和爲了完整起見而發佈它們。 在高層次上,我試圖理解隱藏的行爲,提交一個提交,並有一些方便的參考,而不是花費我的開發小時與git混雜在一起,以便我可以在任何時間點處理不同的功能。 我不想創建新的工作空間(eclipse)/工作目錄(Git)作爲解決方案的一部分。

+0

你應該做你的功課或至少提供你已經嘗試過的例子。 Git有一些非常棒的文檔.. http://www.git-tower.com/blog/git-cheat-sheet/ http://git-scm.com/book/en/v2/Git-Branching-Branches-簡而言之 – chrismillah

回答

0

這裏是你的答案:

  1. 有用於在您的工作目錄是不乾淨切換到另一個分支兩個通用的策略。第一個(在概念上最簡單)選項是在分支A上執行git stash。這會將所有更改(分段非暫存)自上次提交到一個存儲對象以來可以稍後應用。第二種選擇是做一個git commit。儘管看起來第二個選項違反了你的問題,但是暫時與我分享。當您稍後返回分支A時,您可以繼續工作,然後使用git commit --amend提交這些新更改。 A的歷史將會變得清晰,因爲它不會爲早期的更改單獨提交。

    1. and 4.請參閱上述1的答案。
  2. 如果您想從早期提交工作到A,您可以檢出較早的提交。通常你會想在這種情況下創建一個新的分支,所以命令git checkout <SHA-1> -b newA,其中SHA-1是早期提交的哈希,將會有所斬獲。 關於你的2個子情況,其他人是否推動新的變化到遠程的A的HEAD並不重要。原因在於你的新分支newA(基於A的早期提交)將是對歷史的重寫。唯一能夠通過執行git push --force將這個新分支推送到遠程的唯一方法是A.

作爲@ cjm628提到,你真的應該花一些時間閱讀Git文檔,但希望這個答案會給你一個很好的起點。