2017-11-10 21:20:08

git使用

安装

配置信息

必须配置

// 配置用户名
git config --global user.name "zxysilent"
//配置用户邮箱
git config --global user.email "zxysilent@outlook.com"

--global 表示你这台机器上所有的Git仓库都会使用这个配置

其他配置

$ git config --list

比如

  • git config --global core.ignorecase false 设置大小写敏感
  • git config --global core.autocrlf false 禁用字段换行
  • git config --global credential.helper store 保存信息
  • git config --system --unset credential.helper 清除记录(密码修改后,当前仓库保存信息清除)
    以下未测试
  • git config --global credential.helper cache 默认记住15分钟
  • git config --credential.helper 'cache –timeout=3600' 记住1小时

关系图

alt

Workspace:工作区
Index/Stage:暂存区
Repository:本地仓库
Remote:远程仓库

基本Git使用

版本跟踪

  1. 选择一个文件夹
    alt
  2. 使用git init命令把这个目录变成Git可以管理的仓库
git init  
Initialized empty Git repository in D:/App/Github/zxyslt/.git/ 

当前目录下会自动创建一个隐藏的.git的目录,这个目录是Git来跟踪管理版本库的,不要自己修改这个目录里面的文件,因为修改了文件可能产生不可预知的问题! 比如把Git仓库给破坏了。

  1. vscode or notepad++ 不是Windows自带的notepad 添加测试文件a.txt写上一点数据aaaaaa

    • git add a.txt把文件a.txt添加到暂存区(Index/Stage)
    $ git add a.txt
    

    命令行中执行命令后没有提示信息一般代表成功

    • git commit -m "备注信息"把暂存区的内容添加到本地仓库(Repository)
     $ git commit -m "write aaaaaa"
    [master (root-commit) caac3d8] write aaaaaa
     1 file changed, 1 insertion(+)
     create mode 100644 a.txt
    

    注释为中文可能发生意外(Please refer to Baidu!)

    • git status查看工作区的状态(Workspace)
    $ git status
    On branch master
    nothing to commit, working tree clean
    
    • 修改文件a.txt添加一行bbbbbb 保存
      git status查看工作区的状态
      $ git status
      On branch master
      Changes not staged for commit:
         (use "git add <file>..." to update what will be committed)
         (use "git checkout -- <file>..." to discard changes in working directory)
          modified:   a.txt
      no changes added to commit (use "git add" and/or "git commit -a")
      
    用 `git diff` or `git diff a.txt `查看文件变化
    

    $ git diff a.txt
    diff --git a/a.txt b/a.txt
    index 90b4516…85553e8 100644
    — a/a.txt
    +++ b/a.txt
    @@ -1 +1,2 @@
    aaaaaa
    +bbbbbb

    - 用`git add a.txt`把文件a.txt添加到暂存区然后用`git status`查看工作区的状态
    

    $ git status
    On branch master
    Changes to be committed:
    (use “git reset HEAD …” to unstage)
    modified: a.txt

    - 用`git commit -m "备注信息"`把暂存区的内容添加到本地仓库 
    

    $ git commit -m “append bbbbbb”
    [master 1baf46d] append bbbbbb
    1 file changed, 1 insertion(+)

    - 用`git log`查看提交记录  
    

    $ git log
    commit 1baf46dea014d993843137d3bf0aa56fe448699a (HEAD -> master)
    Author: zxysilent zxysilent@foxmail.com
    Date: Fri Nov 10 21:18:13 2017 +0800
    append bbbbbb
    commit caac3d8a845500c95f70499b40710826fcd644af
    Author: zxysilent zxysilent@foxmail.com
    Date: Fri Nov 10 21:00:34 2017 +0800
    write aaaaaa

    
    
  • git log --pretty=oneline查看简要提交记录
    $ git log --pretty=oneline
    1baf46dea014d993843137d3bf0aa56fe448699a (HEAD -> master) append bbbbbb
    caac3d8a845500c95f70499b40710826fcd644af write aaaaaa
    

    每一次提交就是一个版本 commit_id

小结

  • git init 初始化一个仓库
  • git add file 添加文件到暂存区
  • git commit -m "注释信息" 把暂存区文件添加到仓库(一次提交为一个版本)
  • git status 查看工作区状态信息
  • git diff or git diff <file> 查看文件变化信息
  • git log查看提交记录
  • git log --pretty=oneline查看简要提交记录

后悔药

  1. 修改文件a.txt添加一行cccccc保存
    • git add a.txt添加到暂存区
    • git commit -m "append cccccc"提交到版本库
  2. git log 查看版本记录
    $ git log
    commit cccb318a93f00cd0dd092c8385354e0d34f3d226 (HEAD -> master)
    Author: zxysilent <zxysilent@foxmail.com>
    Date:   Fri Nov 10 21:50:35 2017 +0800
        append cccccc
    commit 1baf46dea014d993843137d3bf0aa56fe448699a
    Author: zxysilent <zxysilent@foxmail.com>
    Date:   Fri Nov 10 21:18:13 2017 +0800
        append bbbbbb
    commit caac3d8a845500c95f70499b40710826fcd644af
    Author: zxysilent <zxysilent@foxmail.com>
    Date:   Fri Nov 10 21:00:34 2017 +0800
        write aaaaaa
    
  3. git reset --hard HEAD^ 把当前的版本回退到上一个版本(with two dashes)
    $ git reset --hard HEAD^
    HEAD is now at 1baf46d append bbbbbb
    

要回退到上上个版本只需把HEAD^改成HEAD^^以此类推。
如果要回退到前100个版本的话,可以使用git reset –hard HEAD~100即可
更多信息Please refer to Baidu!

  1. git reset --hard commit_id 把当前的版本切换到指定版本

    $ git reset --hard caac3d8
    HEAD is now at caac3d8 write aaaaaa
    

    一般输入前7个就可以了

  2. git log 查看版本记录

    $ git log
    commit caac3d8a845500c95f70499b40710826fcd644af
    Author: zxysilent <zxysilent@foxmail.com>
    Date:   Fri Nov 10 21:00:34 2017 +0800
        write aaaaaa
    

其他提交信息不见了,不见了
5. 用git reflog 查看每次操作版本的记录

    $ git reflog
    caac3d8 (HEAD -> master) HEAD@{0}: reset: moving to caac3d8
    1baf46d HEAD@{1}: reset: moving to HEAD^
    cccb318 HEAD@{2}: commit: append cccccc
    1baf46d HEAD@{3}: commit: append bbbbbb
    caac3d8 (HEAD -> master) HEAD@{4}: commit (initial): write aaaaaa

看到了熟悉的版本号又可以用git reset --hard commit_id切换到指定版本

小结

  • git log 查看提交记录
  • git reset --hard HEAD^ 把当前的版本回退到上一个版本
  • git reflog 查看每次操作版本的记录
  • git reset --hard commit_id 把当前的版本切换到指定版本

撤销修改

情形A(工作区)

  1. 修改文件a.txt添加一行dddeee保存并用git status查看工作区信息
    $ git status
    On branch master
    Changes not staged for commit:
      (use "git add <file>..." to update what will be committed)
      (use "git checkout -- <file>..." to discard changes in working directory)
            modified:   a.txt
    no changes added to commit (use "git add" and/or "git commit -a")
    

突然意识到 天啦不是应该dddddd
此处有重点** (use “git checkout – …” to discard changes in working directory)**
2. 用git checkout -- a.txt 丢弃工作区

    $ git checkout -- a.txt

查看文件发现dddeee消失了
注意这里有两种情况:

一种是a.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是a.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,git checkout -- <file>就是让这个文件回到最近一次git commitgit add时的状态。

情形B(暂存区)

  1. 修改文件a.txt添加一行fffggg保存然后用git add a.txt添加到暂存区再用git status查看工作区信息
    $ git status
    On branch master
    Changes to be committed:
      (use "git reset HEAD <file>..." to unstage)
            modified:   a.txt
    

此处又有重点** (use “git reset HEAD …” to unstage)**

Index/Stage:暂存区
要多看提示信息

  1. git reset HEAD a.txt 暂存区的修改撤销掉
    $ git reset head a.txt
    Unstaged changes after reset:
    M       a.txt
    
  2. git status查看工作区信息
    $ git status
    On branch master
    Changes not staged for commit:
      (use "git add <file>..." to update what will be committed)
      (use "git checkout -- <file>..." to discard changes in working directory)
            modified:   a.txt
    no changes added to commit (use "git add" and/or "git commit -a")
    

现在暂存区是干净的,工作区有修改
git checkout -- <file> 丢弃工作区

情形C

版本库?
git reset --hard commit_id为所欲为

小结

  • 工作区修改提交 git checkout -- <file> 工作区撤销到版本库一样
  • 工作区修改已经提交 git checkout -- <file> 工作区撤销到暂存区一样
  • 工作区修改已经提交 ``git reset HEAD a.txt` 暂存区的修改撤销掉
  • git reset --hard commit_id 把当前的版本切换到指定版本

删除文件

  1. 添加t.txt文件写上一点数据tttttt添加到暂存区(git add t.txt)并且提交到版本库(git commit -m "备注信息")
    git add t.txt
    $ git commit -m "add t.txt"
    [master 2d0d9fa] add t.txt
     1 file changed, 1 insertion(+)
     create mode 100644 t.txt
    
  2. 删除t.txt并用git status查看工作区信息
    $ git status
    On branch master
    Changes not staged for commit:
      (use "git add/rm <file>..." to update what will be committed)
      (use "git checkout -- <file>..." to discard changes in working directory)
            deleted:    t.txt
    no changes added to commit (use "git add" and/or "git commit -a")
    

此处有重点

(use “git add/rm …” to update what will be committed)
(use “git checkout – …” to discard changes in working directory)

  • git checkout -- <file> 撤销删除
    $ git checkout -- t.txt
    
  • git add/rm <file> 并用 git commit -m "备注信息" 从版本库中删除
    $ git rm t.txt
    rm 't.txt'
    $ git commit -m "delete t.txt"
    [master 3b3b9f2] delete t.txt
     1 file changed, 1 deletion(-)
     delete mode 100644 t.txt
    

小结

  • git rm <file> and git commit -m "备注信息"从版本库删除
  • 误删除 git checkout -- <file> 撤销删除

本文链接:https://blog.zxysilent.com/post/git.html

-- EOF --

Comments