2017-04-13 128 views
1

最近我們從TFS轉移到了GIT,因此我仍在學習如何使用這個令人驚歎的工具。GIT - 如何切換分支而無需執行更改並反之亦然

在我在一個非常簡單的結構,工作像下面的一個時刻:

main -------------------------------------- 01 ---------- 
\           /
dev ----------------------- 01 ---------- 02 ---------- 
    \      /   /
    feat/login ------ 01 --- 02 --- 03 --- 04 --- 05 --- 
  • 開發商feature/something工作,每TOT小時他們辦理登機手續,並觸發與測試構建
  • 當功能穩定時,它們會合並回dev,其中包含一個或多個簽入feature/something
  • 當整個功能準備就緒時,它們將dev的功能合併到main

的問題有以下幾點:

  • 如果我開始從feat/login工作,如果我做git checkout dev我不從dev獲得最新的代碼,但也是我最新的本地文件中feat/login改變。 如何結賬dev而不繼續本人以前分支未提交的本地更改?
  • 假設開發者犯了一個錯誤,我怎麼能rollback到以前的辦理入住手續01dev並推動它,以便最晚辦理入住手續02不是最後一個了嗎?
+2

您可能需要在檢出其他分支之前「藏匿」您的更改或「提交」它們。 – CoryKramer

+1

對於第一個問題,您是否在切換到開發時詢問如何刪除這些本地更改?如果你想保留它們,你必須在切換之前提交它們或隱藏它們,但是如果你只是想刪除它們,只需在切換後執行'git reset'即可。請記住,當您稍後切換回來時,它們不會神奇地再現,這就是爲什麼您必須在切換之前提交或存儲的原因。 –

+0

超級快! 夥計們寫一個答案,以便我可以標記它是正確的。 'git reset'和'stash',我不知道:-) – Raffaeu

回答

2

1)Stash您的更改,簽出到另一個分支,在那裏做一些更改並返回到您的原始分支和應用/彈出您的藏匿。

$ git stash 
$ git checkout dev 

# do something in you dev branch 

$ git checkout feat/login 
$ git stash apply 

您可以使用命令$ git stash list

2)好像你要恢復的更改查看您的藏匿名單。我建議你不要作爲初學者玩Git歷史。無論如何,如果你想嘗試一下這是一個很好的answer如何做到這一點。由於Lasse表示最好創建另一個提交,以恢復要撤消的效果。

+1

也許值得注意的是,隱藏不會與untracket文件一起工作 - 如果你有不想跟蹤的文件,那麼你必須首先提交它們,或者先登臺,然後隱藏 – Dunno

+3

快速提示:你也可以使用'git stash -u'存儲未跟蹤的文件 –

1

您可以使用的另一個功能是git worktreehttps://git-scm.com/docs/git-worktree),它允許您同時擁有多個分支的工作副本,例如,讓我們假設你是高手:

git worktree add -b dev ../dev origin/dev 
git worktree add -b feat_login ../feat_login origin/feat/login 

會給你../dev和../feat_login包含dev和feat_login分支的工作拷貝2個額外的工作拷貝。

我覺得這個功能在項目中特別有用,我必須經常在分支之間切換。

相關問題