1.工作区和暂存区
在这里learngit
文件夹就是一个工作区。工作区的隐藏目录.git
不算工作区,而是Git的版本库
- 第一步是用
git add
把文件添加进去,实际上就是把文件修改添加到暂存区; - 第二步是用
git commit
提交更改,实际上就是把暂存区的所有内容提交到当前分支。
2.Git跟踪修改的方式
Git管理的是修改。每次修改,如果不用git add
到暂存区,那就不会加入到commit
中。
- 第一次修改 ->
git add
-> 第二次修改 ->git commit
。当你用git add
命令后,在工作区的第一次修改被放入暂存区,准备提交,但是,在工作区的第二次修改并没有放入暂存区,所以,git commit
只负责把暂存区的修改提交了,也就是第一次的修改被提交了,第二次的修改不会被提交。
- 第一次修改 ->
git add
-> 第二次修改 ->git add
->git commit
现在把第二次修改也提交了。
3.GitHub需要SSH Key
- 因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。
- GitHub允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。
4.error: failed to push some refs to ‘xxx(远程库)’
错误:使用git 对源代码进行push到gitHub时可能会出错
原因:出现错误的主要原因是GitHub仓库中的README.md文件不在本地代码目录中
解决:
执行语句:
git pull –rebase origin master
再执行语句:
git push -u origin master
比较
git pull origin master 其中:git pull = git fetch + git merge git pull --rebase origin master 其中:git pull --rebase = git fetch + git rebase
现在有两个分支:test和master,假设远端的master的代码已经更改了(在B基础上变动:C,E),test的代码更改了要提交代码(在B基础上变动:D,E),如下图
D---E test / A---B---C---F--- master
问题就来了,如果C,F和D,E的更改发生冲突,那么就需要我们合并冲突了,下面我们来看看git merge和git rebase怎么合并的
git merge:
D--------E / \ A---B---C---F----G--- test, master
git rebase
A---B---D---E---C---F--- test, master
比较结果
- git merge多出了一个新的节点G,会将远端master的代码和test本地的代码在这个G节点合并,之前的提交会分开去显示
- git –rebase会将两个分支融合成一个线性的提交,不会形成新的节点
解决
- merge:操作遇到冲突的时候,当前merge不能继续进行下去。手动修改冲突内容后,
add
修改,commit
就可以了 - rebase :解决冲突后,将修改
add
后执行git rebase –continue
继续操作,或者git rebase –skip
忽略冲突
- merge:操作遇到冲突的时候,当前merge不能继续进行下去。手动修改冲突内容后,