1.1比较文件的差异
- git diff [文件名]
作用:将工作区中的文件与暂存区中的进行比较 - git diff [本地库中的历史版本] ·[文件名]
作用:将工作区的文件和本地库中的文件记录比较 - 不带文件名比较多个文件
2.1分支概念
分支branch,一开始对git初始化的时候,存在一个主干分支master,这是项目的主干分支,往后所有分支都要围绕着master主干分支,对master主干分支进行升级、完善。主分支可以建立多个(feature_[项目名])小分支,在线修复BUG-hot_fix分支。
好处:
- 同时并行推进多个功能的开发,提高开发效率,也就是说各个分支项目无需相互等待无顺序。
- 各个分支之间是相互独立的,如果一个分支开发失败则不影响其他分支的进程,失败的重新开始即可。
master主干分支:Wechat
2.2分支的操作
- 查看所有分支:$git branch -v
- 新建分支:$git branch [分支名]
星号代表当前所在分支! - 切换分支:$git checkout [已有分支名]
当前星号在hot_fix分支上
- 合并分支:$git merge [已修改的分支名]
注意是要切换到需要接受修改的分支上,再执行merge命令。 - 分支冲突
当两个分支的内容都发生改变提交,git就不能确定使用哪一个
此时要通过人工来解决冲突,选取最优方案。首先编辑文件,再删除特殊符号。
然后在add如暂存区,commit提交到本地库,注意当使用commit时,后面不能有文件名,
否则出现错误:fatal: cannot do a partial commit during a merge.
3.1. 远程库与本地库
在github中创建远程库
远程库的地址就是如图所示:https://github.com/zhangtao-g/huashan.git - 在Git上查看远程库:git remote -v
- 在Git上创建远程库的别名:git remote add [别名] [地址]
- 将本地路master中的文件push到远程库的master中
git push [地址别名] [分支名]
3.2克隆
非本地库管理者的开发者开发此项目,要先创建一个工作空间,再从管理者的远程库中克隆项目到此处
$git clone https://github.com/zhangtao-g/huashan.git
然后在新建的工作区中就有在Github中的项目文件夹了
克隆后效果:将完整的远程库下载到本地,创建远程地址别名,初始化本地库。
3.3pull=fetch&merge - 克隆后新的开发人员就能协同开发此项目,此开发人员在自己的工作区中打开此项目,进行开发。开发完毕后add/commit进行添加提交,如果此时此开发人员push到项目管理员远程库不会成功,因为项目管理员还没有邀请你共同协作此项目,邀请后,开发人员登陆GitHub账号,后进行 git push origin master。 此时项目管理员远程库的项目中就会有此开发人员的修改。
- 再进入项目管理员的本地库中,项目还是管理员自己写内容,开发人员修改的内容并没有。
- 通过命令:$git fetch [项目别名] [分支名] 从远程库中抓取下来。可以发现没有开发人做的修改,fetch只是将远程库中的文件下载到本地,并没有更改本地工作区的文件的内容。
- 查看下载的文件的内容,首先切换远程master分支,$git checkout [远程库地址别名]/[远程库分支名],后可以查看。
- 查看没有问题后再merge,返回本地的master分支,
g
i
t
c
h
e
c
k
o
u
t
m
a
s
t
e
r
,
合
并
git checkout master,合并
gitcheckoutmaster,合并git merge [远程库地址别名]/[远程库分支名],就能再本地工作区中查看开发人push的内容了!
总而言之:pull可以完成上述fetch与merge的所有操作。
$git pull [远程库地址别名] [分支]
3.4. 协同开发时冲突的解决
当两个人协同开发时,先后修改项目的同一个地方时,会发生push冲突,后修改提交的开发人员,通过push不能推送到远程库中,推送时会发生以下错误。
解决方案: - 后提交的开发者先从远程库中下载到本地, $git pull [远程库地址别名] [分支名]
- 然后再打开文件,将特殊标记行删除,然后通过协商,确定文件的最终修改方案,再添加/提交/push就OK了。
- 注意提交的时候,后面不用再加文件名!!!!
总结:- 如果不是基于GitHub远程库的最新版所做的修改,不能推送,必须先拉取。
- 拉取下来如果进入冲突区,按照解决“分支冲突”的办法解决即可。
这个问题是因为远程库与本地库不一致造成的,那么我们把远程库同步到本地库就可以了。
使用指令
git pull --rebase origin master
这条指令的意思是把远程库中的更新合并到本地库中,–rebase的作用是取消掉本地库中刚刚的commit,并把他们接到更新后的版本库之中。