作者nakahusa (NA)
看板PHP
標題[請益] Git checkout 疑問
時間Wed Dec 17 16:56:50 2014
最近開始使用 Git,
也還算順手,真的挺方便的,
尤其是在同一個專案有兩件以上的待修改問題時,
可以自由切換,並會自動將所有檔案調整到該 branch 的狀態。
不過目前發現一個問題,
假設有 branch A 和 B,
在 B branch 時,如果 stage 裡檔案沒有進行 add 就 checkout 到 A branch,
檔案好像會發生錯亂的問題…
疑問是:在 checkout 之前,是否一定要將目前所在的 branch add 並 commit?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.169.203.53
※ 文章網址: http://webptt.com/m.aspx?n=bbs/PHP/M.1418806613.A.7AA.html
1F:→ aquarianboy: 可查一下 git stash 12/17 17:27
2F:→ nakahusa: 喔喔~ 感謝a大,這樣就可以避免不必要的 commit 了 12/17 17:46
3F:→ nakahusa: 所以如果沒有使用 stash,也沒先進行 add 和 commit 就 12/17 17:47
4F:→ nakahusa: checkout 到其他 branch 確實會有檔案錯亂的問題對嗎? 12/17 17:47
5F:→ nakahusa: 還是我使用的方法有錯呢? 12/17 17:47
6F:→ mmis1000: 預設你沒stash他根本不給你checkout阿 12/17 18:31
m大,我確實在未 commit 時可以 checkout 到其他 branch 耶…
git branch test
git checkout test
vi 1.test
git checkout master <--- 可以正常 checkout,此時 git status 會看到
Untracked files:
1.test
而且 master 檔案裡也會多出 1.test
git checkout test
git add 1.test
git checkout master <--- 還是可以正常 checkout,此時 status 會看到
Changes to be committed:
new file: 1.test
似乎沒 commit 時就 checkout 會把目前 stage 的狀態帶到 checkout 後的 branch,
也就是說 branch 可以有很多個,可是 stage 只有一個,
不知道我的理解對嗎?
※ 編輯: nakahusa (111.250.64.11), 12/17/2014 23:04:58
7F:→ nakahusa: 忽然想到 stage 透過 stash 也可以很多個… 應該是說 12/17 23:08
8F:→ nakahusa: stage 不是對應 branch 而是分開管理的,每個 branch 沒 12/17 23:08
9F:→ nakahusa: 有自己的 stage,這樣對嗎 QQ" 12/17 23:09
10F:推 LPH66: 你的問題是你的改動是新增檔案, 這跟修改檔案又不一樣了 12/17 23:13
11F:→ LPH66: 新增檔案不會對已有的檔案做更改, 所以切換 branch 時除非 12/17 23:14
12F:→ LPH66: 那個檔案在目標 branch 有才會有衝突 12/17 23:14
13F:→ LPH66: 因此這種狀況 git 就會讓你切過去 12/17 23:14
L大,我剛有再測試了一下,
master 有 1.test 這個檔,
git branch test
git checkout test
vi 1.test 並修改檔案內容,
git checkout master <--- 可以 checkout,而且 master 裡的 1.test 也會是修改過的
git status
Changes not staged for commit:
modified: 1.test
git branch test
git add 1.test
git checkout master <--- 就算有 add 還是可以 checkout 到 master,1.test 也是修
改過後的
git status
Changes to be committed:
modified: 1.test
※ 編輯: nakahusa (111.250.64.11), 12/17/2014 23:34:58
14F:→ mmis1000: 看來是,如果兩個branch中的commit過的檔案一樣 12/18 02:34
15F:→ mmis1000: 就能切過去,如過不一致,他就會要你先stash 12/18 02:35