Git學習筆記05--tortoisegit的add、commit、pull、push操作順序
1.commit、pull、push操作順序
操作步驟需要嚴格執行如下順序:commit->pull->push
commit:將程式碼提交到本地倉庫。
pull:將遠端倉庫程式碼同步到本地倉庫。如遇衝突,解決衝突,重複commit->pull,直到沒有衝突。
push:將本地倉庫程式碼提交到遠端倉庫。
2.常見問題解析
(1) commit是提交到本地倉庫,然後push,這個push是把所有程式碼推到遠端倉庫,還是隻是把commit的地方推到遠端倉庫?
答:肯定不會全量推送到遠端的,是通過對比 commit 的記錄,如果本地高於遠端就直接把多出來的commit 給懟上去,如果本地分支的最新版本和遠端的 commit 有衝突,就需要解決衝突。
(2)那為什麼要先commit,然後pull,然後再push,我pull了,豈不是把自己改的程式碼都給覆蓋掉了嘛,因為遠端沒有我改的程式碼,我pull,豈不是覆蓋了我本地的改動好的地方了?那我還怎麼push?
答:這個先 commit 再 pull 最後再push 的情況就是為了應對多人合併開發的情況,
commit 是為了告訴 git 我這次提交改了哪些東西,不然你只是改了但是 git 不知道你改了,也就無從判斷比較;
pull是為了本地 commit 和遠端commit 的對比記錄,git 是按照檔案的行數操作進行對比的,如果同時操作了某檔案的同一行那麼就會產生衝突,git 也會把這個衝突給標記出來,這個時候就需要先把和你衝突的那個人拉過來問問保留誰的程式碼,然後在 git add && git commit && git pull 這三連,再次 pull 一次是為了防止再你們協商的時候另一個人給又提交了一版東西,如果真發生了那流程重複一遍,通常沒有衝突的時候就直接給你合併了,不會把你的程式碼給覆蓋掉
(3)出現程式碼覆蓋或者丟失的情況
比如A、B兩人的程式碼pull 時候的版本都是1, A在本地提交了2,3;並且推送到遠端了。B 進行修改的時候沒有commit 操作,他先自己寫了東西,然後 git pull 這個時候 B 本地版本已經到3了,B 在本地版本3的時候改了 A 寫過的程式碼,再進行了git commit && git push 那麼在遠端版本中就是4,而且 A 的程式碼被覆蓋了,所以說所有人都要先 commit 再 pull,不然真的會覆蓋程式碼的。
3. git add 與git commit區別
git add 把它新增到倉庫/暫存區。
git commit -m 把它提交到倉庫, -m 是為了說明,可以填寫任意內容,這個是為了記錄你對這個檔案做了什麼操作,方便以後的管理。而 commit -m 是一個很重要的操作,因為它每次提交,都是提交於當前分支(從暫存區提交到當前分支),畫個圖理解一下: