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文件不在本地代码目录中

  • 解决:

    1. 执行语句:

      git pull –rebase origin master
    2. 再执行语句:

      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忽略冲突