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 是一個很重要的操作,因為它每次提交,都是提交於當前分支(從暫存區提交到當前分支),畫個圖理解一下: