【Git版本控制】为什么要先commit,然后pull,最后再push?而不是commit然后直接push?...
情況是這樣的,現(xiàn)在遠(yuǎn)程有一個倉庫,分支就一個,是master。然后我本地的倉庫是從遠(yuǎn)程的master上clone下來的。大家都是clone下來,再在自己本地改好,再commit然后pull然后push,大家都是這么做的。那么現(xiàn)在問題來了:
1,那我本地這個也算是個分支?還是就是一個本地倉庫?
答:本地和遠(yuǎn)程的關(guān)系相當(dāng)于兩個分支,你感覺一樣是因?yàn)槟鉭it pull?的時候已經(jīng)自動給綁定好對應(yīng)關(guān)系了, set-upstream..balbala
2,如果我在遠(yuǎn)程新建了個分支,然后我pull了下來,那我本地到底有分支這個說法嗎?我本地的分支是不是就是那個遠(yuǎn)程新建的分支?
答:你遠(yuǎn)程新建了一個分支拉到本地的道理是一樣的,屬于復(fù)制了一份,但是本地分支和遠(yuǎn)程分支已經(jīng)是兩個東西了
3,本地倉庫和本地分支有什么區(qū)別?
答:本地分支屬于本地倉庫里,是包含關(guān)系,一個倉庫里可以有很多分支
4,commit是提交到本地倉庫,然后push,這個push是把所有代碼推到遠(yuǎn)程倉庫,還是只是把commit的地方推到遠(yuǎn)程倉庫?
答:肯定不會全量推送到遠(yuǎn)程的,是通過對比 commit 的記錄,如果本地高于遠(yuǎn)程就直接把多出來的commit?給懟上去,如果本地分支的最新版本和遠(yuǎn)程的?commit?有沖突,就需要解決沖突。
5,那為什么要先commit,然后pull,然后再push,我pull了,豈不是把自己改的代碼都給覆蓋掉了嘛,因?yàn)檫h(yuǎn)程沒有我改的代碼,我pull,豈不是覆蓋了我本地的改動好的地方了?那我還怎么push?
答:這個先 commit 再 pull 最后再push 的情況就是為了應(yīng)對多人合并開發(fā)的情況,
commit?是為了告訴 git 我這次提交改了哪些東西,不然你只是改了但是 git 不知道你改了,也就無從判斷比較;
pull是為了本地 commit 和遠(yuǎn)程commit 的對比記錄,git 是按照文件的行數(shù)操作進(jìn)行對比的,如果同時操作了某文件的同一行那么就會產(chǎn)生沖突,git 也會把這個沖突給標(biāo)記出來,這個時候就需要先把和你沖突的那個人拉過來問問保留誰的代碼,然后在?git add && git commit && git pull?這三連,再次 pull 一次是為了防止再你們協(xié)商的時候另一個人給又提交了一版東西,如果真發(fā)生了那流程重復(fù)一遍,通常沒有沖突的時候就直接給你合并了,不會把你的代碼給覆蓋掉
出現(xiàn)代碼覆蓋或者丟失的情況:比如A B兩人的代碼pull 時候的版本都是1,A在本地提交了2,3并且推送到遠(yuǎn)程了,B 進(jìn)行修改的時候沒有commit?操作,他先自己寫了東西,然后?git pull?這個時候 B 本地版本已經(jīng)到3了,B 在本地版本3的時候改了 A 寫過的代碼,再進(jìn)行了git commit && git push?那么在遠(yuǎn)程版本中就是4,而且 A 的代碼被覆蓋了,所以說所有人都要先 commit 再 pull,不然真的會覆蓋代碼的
6,兩個分支A和B,A合并B和B合并A,有區(qū)別嗎?
答:兩個互相合并的唯一區(qū)別就是 A->B 的時候 B 分支上會產(chǎn)生一個 merge_commit ,被改變的分支是 B ;如果現(xiàn)在沒有發(fā)生任何改動執(zhí)行 B->A ,則A和B兩分支才會完全相同。
轉(zhuǎn)載于:https://www.cnblogs.com/leiblog/p/11138497.html
總結(jié)
以上是生活随笔為你收集整理的【Git版本控制】为什么要先commit,然后pull,最后再push?而不是commit然后直接push?...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: springmvc静态资源;mvc:de
- 下一篇: 计算机组成原理学习1习题1