git flow 流程
先来看一张图吧:
大致流程是这样的:我们在本地(工作区)编写好代码,然后执行git命令git add
添加到暂存区,然后使用git commit
提交到本地分支,然后使用git push
推送到远程分支。
git fetch 与 git pull 区别
那么本地如果需要同步远程仓库的代码,一般是两种做法,一种是使用git fetch
先将远程代码拿下来,然后再合并到本地分支;第二种就是直接使用git pull
将远程代码直接与本地代码进行合并,包括本地分支和远程分支。
看下图,git fetch
命令更新代码,本地的库中master
的commitID
不变,但是与git上面关联的那个orign/master
的commit ID
变成了和远程代码库相同了。这时候我们本地相当于存储了两个代码的版本号,我们还要通过merge
去合并这两个不同的代码版本,如果这两个版本都修改了同一处的代码,这时候merge
就会出现冲突,然后我们解决冲突之后就生成了一个新的代码版本。
而下面的git pull
命令会将本地的代码更新至远程仓库里面最新的代码版本,包含本地的分支,如果出现冲突,也需要手动解决。
虽然git pull
看起来像git fetch
+get merge
,但是根据commit ID
来看的话,他们实际的实现原理是不一样的。
这里建议是分两步做,在merge前可以看修改了什么内容,是否有冲突的代码,可以提前解决,防止冲突。
git fetch 工作流程
首先,先得到远程库上master
分支的东西:
git fetch origin master
origin
是远程仓库默认名,如果在 remote add
的时候自己重新取了远程仓库名,那就用自己取的名字;master
则是远程分支名。
这时候只是相当于从远程库拷了代码到本地,还没有和本地的merge
,这就是为什么不直接pull
,因为先fetch
再merge
我们就可以先看一下拉取下来的东西,再决定是否merge。
如果要在本地分支查看和刚刚拷下来的东西有什么区别,就用:
git diff yourlocalbranch oringin/master
下来就是在当前分支上,合并origin/master
,就要用merge
了:
git merge oringin/master
还可以用:
git rebase origin/master
如果有冲突,那就解决冲突,再commit
。若实在解决不了弄得乱七八糟想恢复可以:
git reset merge
还有就是如果明明添加了远程分支,但是用 git branch -a
又看不到,怎么办呢?运行:
git remote update