git笔记

摘要:

依据廖雪峰的教程和网上其他一些博客的内容整理,涵盖了平时比较常用的指令和操作,适合于零基础的同学。可能会有表述不合适的地方,欢迎指正。

  • 创建版本仓库
    1
    2
    3
    4
    //新建一个文件夹,使用git init命令
    $ mkdir learngit
    $ cd learngit
    $ git init
  • 把一个文件放到Git仓库需要两步
    1. $ git add readme.txt
    2. $ git commit -m “wrote a readme file”
      简单解释一下git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。
      git commit命令执行成功后会告诉你,1 file changed:1个文件被改动(我们新添加的readme.txt文件);2 insertions:插入了两行内容(readme.txt有两行内容)。
  • 为什么Git添加文件需要add,commit一共两步呢?因为commit可以一次提交很多文件,所以你可以多次add不同的文件,比如:
    1
    2
    3
    $ git add file1.txt
    $ git add file2.txt file3.txt
    $ git commit -m "add 3 files."
  • git status命令可以让我们时刻掌握仓库当前的状态,下面的命令输出告诉我们,readme.txt被修改过了,但还没有准备提交的修改。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ 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: readme.txt

    no changes added to commit (use "git add" and/or "git commit -a")
  • 使用git diff可以查看对文件进行的修改
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ git diff readme.txt 
    diff --git a/readme.txt b/readme.txt
    index 46d49bf..9247db6 100644
    --- a/readme.txt
    +++ b/readme.txt
    @@ -1,2 +1,2 @@
    -Git is a version control system.
    +Git is a distributed version control system.
    Git is free software.
  • git log查看历史记录
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    $ git log
    commit 1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master)//版本号
    Author: Michael Liao <[email protected]>
    Date: Fri May 18 21:06:15 2018 +0800

    append GPL

    commit e475afc93c209a690c39c13a46716e8fa000c366
    Author: Michael Liao <[email protected]>
    Date: Fri May 18 21:03:36 2018 +0800

    add distributed

    commit eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0
    Author: Michael Liao <[email protected]>
    Date: Fri May 18 20:59:18 2018 +0800

    wrote a readme file
  • git reset命令可以回退到之前的版本,在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。
    1
    2
    $ git reset --hard HEAD^
    HEAD is now at e475afc add distributed
  • 如果从A回退到B之后后悔了,又想返回A,这时必须查看历史记录找到A的版本号,然后使用git reset. 如果这中间关掉了终端,导致历史的命令行记录看不了,可以使用 git reflog 命令查看之前的命令,然后就可以找到之前的版本号
    1
    2
    $ git reset --hard 1094a//版本号不需要写全,只写前几位就ok
    HEAD is now at 83b0afe append GPL
    1
    2
    3
    4
    5
    $ git reflog
    e475afc [email protected]{1}: reset: moving to HEAD^
    1094adb (HEAD -> master) [email protected]{2}: commit: append GPL
    e475afc [email protected]{3}: commit: add distributed
    eaadf4e [email protected]{4}: commit (initial): wrote a readme file
  • 比如人气极高的bootstrap项目,这是一个非常强大的CSS框架,你可以访问它的项目主页https://github.com/twbs/bootstrap,点“Fork”就在自己的账号下克隆了一个bootstrap仓库,然后,从自己的账号下clone.一定要从自己的账号下clone仓库,这样你才能推送修改。如果从bootstrap的作者的仓库地址[email protected]:twbs/bootstrap.git克隆,因为没有权限,你将不能推送修改。
    1
    git clone [email protected]:michaelliao/bootstrap.git
  • 如果你想修复bootstrap的一个bug,或者新增一个功能,立刻就可以开始干活,干完后,往自己的仓库推送.
    如果你希望bootstrap的官方库能接受你的修改,你就可以在GitHub上发起一个pull request。当然,对方是否接受你的pull request就不一定了。
  • 合并分支
    https://cloud.tencent.com/developer/news/242399
  • github使用流程
    1. 在本地新建一个文件夹,并且执行init add commit操作
    2. 使用 git remote add origin [email protected]:zhangyazhe/仓库名.git 命令将本地仓库与远程仓库建立连接
    3. 在push之前,先pull一下,保证本地仓库和远程仓库是一样的,否则会报错,即执行 git pull –rebase origin master
    4. 下一步,就可以把本地库的所有内容推送到远程库上:使用git push -u origin master , 这里实际上是把当前分支master推送到远程。由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。从这之后,就可以通过git push origin master来进行push
  • 进行git push时可能会出现下面的问题:
    1. git 出现 fatal: refusing to merge unrelated histories 错误。其实这个问题是因为两个根本不相干的git库,一个是本地库,一个是远端库,然后本地要去推送到远端,远端觉得这个本地库跟自己不相干,所以告知无法合并。这个错误可以忽略
    2. 有时候会出现无法push的情况,可能是因为远程仓库用有README但是本地没有,这样就出现了冲突。在git pull中添加了–rebase之后,就可以将远程仓库有但是本地仓库没有的文件下载下来,从而解决了冲突。例如,执行完带有–rebase之后,本地仓库就会出现README。命令为 git pull –rebase origin master
    3. 建议是在github上面新建repo的时候不要加上README,而是在本地仓库中加上README。这样一来远程是空的,就不会有冲突。
  • 使用删除本地仓库中的文件之后使用git add *和git commit和git push之后,发现远程仓库中的对应文件并没有被删除,这是因为使用git add *的话,并没有包含删除信息。这个时候可以使用git add –all或者git add -A,这样一来远程仓库对应为文件也会被删除