状况是这样的,如今远程有一个仓库,分支就一个,是master。而后我本地的仓库是从远程的master上clone下来的。你们都是clone下来,再在本身本地改好,再commit而后pull而后push,你们都是这么作的。那么如今问题来了:git
1,那我本地这个也算是个分支?仍是就是一个本地仓库?code
答:本地和远程的关系至关于两个分支,你感受同样是由于你git pull
的时候已经自动给绑定好对应关系了, set-upstream..balbala开发
2,若是我在远程新建了个分支,而后我pull了下来,那我本地到底有分支这个说法吗?我本地的分支是否是就是那个远程新建的分支?it
答:你远程新建了一个分支拉到本地的道理是同样的,属于复制了一份,可是本地分支和远程分支已是两个东西了ast
3,本地仓库和本地分支有什么区别?stream
答:本地分支属于本地仓库里,是包含关系,一个仓库里能够有不少分支推送
4,commit是提交到本地仓库,而后push,这个push是把全部代码推到远程仓库,仍是只是把commit的地方推到远程仓库?文件
答:确定不会全量推送到远程的,是经过对比 commit 的记录,若是本地高于远程就直接把多出来的commit
给怼上去,若是本地分支的最新版本和远程的 commit
有冲突,就须要解决冲突。co
5,那为何要先commit,而后pull,而后再push,我pull了,岂不是把本身改的代码都给覆盖掉了嘛,由于远程没有我改的代码,我pull,岂不是覆盖了我本地的改动好的地方了?那我还怎么push?远程
答:这个先 commit 再 pull 最后再push 的状况就是为了应对多人合并开发的状况,
commit
是为了告诉 git 我此次提交改了哪些东西,否则你只是改了可是 git 不知道你改了,也就无从判断比较;
pull
是为了本地 commit 和远程commit 的对比记录,git 是按照文件的行数操做进行对比的,若是同时操做了某文件的同一行那么就会产生冲突,git 也会把这个冲突给标记出来,这个时候就须要先把和你冲突的那我的拉过来问问保留谁的代码,而后在 git add && git commit && git pull
这三连,再次 pull 一次是为了防止再大家协商的时候另外一我的给又提交了一版东西,若是真发生了那流程重复一遍,一般没有冲突的时候就直接给你合并了,不会把你的代码给覆盖掉
出现代码覆盖或者丢失的状况:好比A B两人的代码pull 时候的版本都是1,A在本地提交了2,3而且推送到远程了,B 进行修改的时候没有commit
操做,他先本身写了东西,而后 git pull
这个时候 B 本地版本已经到3了,B 在本地版本3的时候改了 A 写过的代码,再进行了git commit && git push
那么在远程版本中就是4,并且 A 的代码被覆盖了,因此说全部人都要先 commit 再 pull,否则真的会覆盖代码的
6,两个分支A和B,A合并B和B合并A,有区别吗?
答:两个互相合并的惟一区别就是 A->B 的时候 B 分支上会产生一个 merge_commit ,被改变的分支是 B ;若是如今没有发生任何改动执行 B->A ,则A和B两分支才会彻底相同。