git初步使用

git安装后进行一些设置

git config --global user.name [你的英文名]
git config --global user.email [你的邮箱]
git config --global push.default [参数] //参数值为matching、simple。

  1. ‘matching’ 参数是 Git 1.x 的默认行为,其意是如果你执行 git push 但没有指定分支,它将 push 所有你本地的分支到远程仓库中对应匹配的分支。
  2. 而 Git 2.x 默认的是 simple,意味着执行 git push 没有指定分支时,只有当前分支会被 push 到你使用 git pull 获取的代码。
  3. 例:比如当前你在一个新需求分支feature-1正在开发新的需求,但是还没有完成,突然发现线上代码有个bug,需要切过去修复bug,修复完了推送到服务器,这时候只推送bug修复分支,之前的feature-1分支还没完成,是不允许推到服务器的,这就是优势。simple的优势

git config --global core.quotepath false //防止文件名是中文的文件出现乱码。
git config --global core.editor "vim" //设置git的编辑器为vim

创建一个仓库

  • 新建一个目录 【imitation-git】
  • 目录下打开git bash。
  • 执行git init、生成一个隐藏文件夹,.git。

将文件放入仓库

  • 你得有个文件。在imitation-git目录下创建一个文件。【readme.txt】。
    • readme.txt文件中写入一些东西。

      Git is a version control system.
      Git is free software.

  • 用命令git add告诉Git,把文件添加到仓库。

    $ git add readme.txt

  • 用命令git commit告诉Git,把文件提交到仓库

    $ git commit -m “wrote a readme file”,-m后面输入的是本次提交的说明

    微信图片_20180929114334.png

查看状态和修改

  • 我们已经成功地添加并提交了一个readme.txt文件,现在,我们继续修改readme.txt文件

    Git is a distributed version control system.

    Git is free software.
    
  • 运行git status,查看状态
    2.png
    git status命令可以让我们时刻掌握仓库当前的状态

  • Git还能让我们知道做了什么更改,使用git diff命令,用git diff HEAD -- readme.txt命令可以查看工作区和版本库里面最新版本的区别
    3.png

  • 知道修改了什么就可以放心的提交了,重复【将文件放入仓库】的操作。即可将修改提交到仓库

  • git log可以查看我们提交的版本。
    4.png

版本回退

  • 再次修改readme.txt文件,然后提交,git commit -m "append GPL"

    Git is a distributed version control system.
    Git is free software distributed under the GPL.

  • 此时有三个版本,现在版本是最后一次提交的append GPL。回退到 add distributed。

    使用 git reset --hard HEAD^回退上一版本。HEAD^^表示上上版本、HEAD~100表示上一百个版本。
    运行后工作区中的代码已经回到add distributed版本。

  • 再次git log发现append GPL版本不见了。
    5.png

  • 能否再次回去append GPL版本呢?是可以的

    我们只需要知道commit id即可。使用git reflog可以查看。下图中红色部分就是commit id

6.png

执行git reset --hard commit_id。上图可看出我的append GPL的id为ee4cbc2。所以执行 git reset --hard ee4cbc2就可以回退。

git reset –mixed / –soft / –hard之间的区别

git reset –mixed:此为默认方式,不带任何参数的git reset,即时这种方式,它回退到某个版本,只保留源码,回退commit和add信息

git reset –soft:回退到某个版本,git status查看,可发现暂存区是有东西在里面的。此时使用git commit -m "提交说明",即可回到回退版本的上一版本。
例如:现在处在append GPL版本,添加一个lisen.txt文件(内容随便写),使用git add lisen.txt添加到暂存区。然后使用git reset --soft HEAD^,回退到add distributed版本。git status查看状态,发现lisen.txt并没有被回退。如果使用git reset --hard HEAD^,再git status,发现On branch master nothing to commit, working tree clean。

git reset –hard:彻底回退到某个版本,工作区和暂存区的内容都会被回退,慎用!

分别用git reset --soft HEAD^git reset --hard HEAD^,然后使用git status命令即可知道两者的差别

工作区和暂存区

  • 工作区

    就是你在电脑里能看到的目录,比如我的imitation-git文件夹就是一个工作区。

  • 版本库

    工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD

把文件往Git版本库里添加的时候,是分两步执行的.

第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支
因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。
你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。

撤销修改

  • 撤销工作区中的修改。还没有加入到暂存区。
    你写了很多代码,最后又不想要了,还没有加入到暂存区。
    git checkout -- file可以丢弃工作区的修改.
    例:你修改了readme.txt文件。使用git checkout -- readme.txt。有两种情况:
    一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
    一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
    总之,就是让这个文件回到最近一次git commit或git add时的状态。

  • 撤销暂存区中的修改
    你写了一些东西,并且git add到了暂存区。现在想撤销。
    用命令git reset HEAD <file>可以把暂存区的修改撤销掉(unstage),重新放回工作区
    git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。

删除文件

  1. 先添加一个新文件test.txt到Git并且提交。
  2. 直接手动删除工作区中的内容。这时git status将告诉你,你的文件被删除。然后是下面两种选择
    2.1. 确定要删除版本库中的文件,那就用命令git rm <file>删掉,并且git commit
    2.2. 如果是误删了,git checkout可以撤销操作。

远程仓库GitHub

  1. 创建SSH Key,打开git bash, 输入ssh-keygen -t rsa -b 4096 -C "your_email@example.com"`your_email@example.com`改成你的邮箱地址。如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。
  2. 登录GitHub,打开“Settings”——SSH and GPG keys。点击New SSH Key,title随便写,将id_rsa.pub里的内容复制到key里。
  3. 跟着GitHub提示走,就可以创建远程仓库了。
  4. 使用git clone可以将远程仓库clone到本地。

分支管理

1.创建分支

1
2
git branch [分支名称]  //创建分支  git checkout [分支名称]  //切换到某分支
git checkout -b [分支名称] //创建并切换 git branch //显示分支 *为当前分支

  1. 合并分支

    切换到master分支。git checkout mastergit merge [需合并的分支名]git branch -d [需删除的分支名]

  2. 解决冲突

    在master分支的4.txt中内容为 1234。切换到dev分支,在dev分支中添加一行 5678,然后提交。再切换回master分支,也增加一行8906,然后提交,在合并。此时会显示conflict。
    10.png
    修改冲突的文件,再次提交到仓库。