美文网首页
廖雪峰Git教程笔记

廖雪峰Git教程笔记

作者: PatrickGao | 来源:发表于2018-02-08 16:55 被阅读32次

    [TOC]

    本文是总结廖雪峰Git教程的笔记。

    git 账号配置

    $ git config --global user.name "Your Name" #设置用户名
    $ git config --global user.email "email@example.com" # 设置邮箱
    $ git config --global color.ui true #设置彩色UI
    

    git初始化仓库

    $ git init
    

    git 添加文件

    用git add把文件添加进去,实际上就是把文件修改添加到暂存区;

    $ git add readme.txt
    

    git 提交文件

    用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

    $ git commit -m "wrote a readme file"
    

    git 查看状态

    命令可以让我们时刻掌握仓库当前的状态,上面的命令告诉我们,readme.txt被修改过了,但还没有准备提交的修改。

    $ 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 比对修改部分

    $ 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 查看提交记录

    $ git log
    commit 3628164fb26d48395383f8f31179f24e0882e1e0
    Author: Michael Liao <askxuefeng@gmail.com>
    Date:   Tue Aug 20 15:11:49 2013 +0800
    
        append GPL
    
    commit ea34578d5496d7dd233c827ed32a8cd576c5ee85
    Author: Michael Liao <askxuefeng@gmail.com>
    Date:   Tue Aug 20 14:53:12 2013 +0800
    
        add distributed
    
    commit cb926e7ea50ad11b8f9e909c05226233bf755030
    Author: Michael Liao <askxuefeng@gmail.com>
    Date:   Mon Aug 19 17:51:55 2013 +0800
    
        wrote a readme file
    

    如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数:

    $ git log --pretty=oneline
    3628164fb26d48395383f8f31179f24e0882e1e0 append GPL
    ea34578d5496d7dd233c827ed32a8cd576c5ee85 add distributed
    cb926e7ea50ad11b8f9e909c05226233bf755030 wrote a readme file
    

    git 回退到某次提交

    Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交3628164...882e1e0(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^ ,上上一个版本就是HEAD^^ ,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。

    $ git reset --hard HEAD^
    HEAD is now at ea34578 add distributed
    

    只要上面的命令行窗口还没有被关掉,你就可以顺着往上找啊找啊,找到那个append GPL的commit id是3628164...,于是就可以指定回到未来的某个版本

    版本号没必要写全,前几位就可以了,Git会自动去找。当然也不能只写前一两位,因为Git可能会找到多个版本号,就无法确定是哪一个了。

    $ git reset --hard 3628164
    HEAD is now at 3628164 append GPL
    

    git 显示之前的命令

    $ git reflog
    ea34578 HEAD@{0}: reset: moving to HEAD^
    3628164 HEAD@{1}: commit: append GPL
    ea34578 HEAD@{2}: commit: add distributed
    cb926e7 HEAD@{3}: commit (initial): wrote a readme file
    

    git 撤销修改

    $ git checkout -- readme.txt
    

    命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
    一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
    一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
    总之,就是让这个文件回到最近一次git commit或git add时的状态。

    如果添加到了暂存区,还没有提交,用命令git reset HEAD file可以把暂存区的修改撤销掉(unstage),重新放回工作区:

    $ git reset HEAD readme.txt
    Unstaged changes after reset:
    M       readme.txt
    

    git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。

    然后再

    $ git checkout -- readme.txt
    

    git 删除文件

    $ git rm test.txt
    rm 'test.txt'
    $ git commit -m "remove test.txt"
    [master d17efd8] remove test.txt
     1 file changed, 1 deletion(-)
     delete mode 100644 test.txt
    

    如果是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:

    $ git checkout -- test.txt
    

    git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。


    git 创建秘钥

    第1步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:

    $ ssh-keygen -t rsa -C "youremail@example.com"
    

    第2步:登陆GitHub,打开“Account settings”,“SSH Keys”页面,然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容


    git 添加远程库

    $ git remote add origin git@github.com:michaelliao/learngit.git
    

    添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。

    $ git push -u origin master
    Counting objects: 19, done.
    Delta compression using up to 4 threads.
    Compressing objects: 100% (19/19), done.
    Writing objects: 100% (19/19), 13.73 KiB, done.
    Total 23 (delta 6), reused 0 (delta 0)
    To git@github.com:michaelliao/learngit.git
     * [new branch]      master -> master
    Branch master set up to track remote branch master from origin.
    

    把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。

    由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。

    $ git push origin master
    

    git 克隆远程库

    $ git clone git@github.com:michaelliao/gitskills.git
    Cloning into 'gitskills'...
    remote: Counting objects: 3, done.
    remote: Total 3 (delta 0), reused 0 (delta 0)
    Receiving objects: 100% (3/3), done.
    
    $ cd gitskills
    $ ls
    README.md
    

    git 查看分支

    $ git branch
    

    git 创建分支

    $ git branch <name>
    

    git 切换分支

    $ git checkout <name>
    

    git 创建并切换分支

    $ git checkout -b <name>
    

    git 合并某分支到当前分支

    $ git merge <name>
    

    git 删除分支

    $ git branch -d <name>
    

    git 强制删除

    $ git branch -D feature-vulcan
    

    分支开发策略

    在实际开发中,我们应该按照几个基本原则进行分支管理:

    首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
    那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
    你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。

    所以,团队合作的分支看起来就像这样:


    git.png

    git 保存工作区

    $ git stash
    

    git 查看保存的状态

    $ git stash list
    

    git 恢复工作区

    $ git stash apply
    

    但是恢复后,stash内容并不删除,你需要用git stash drop来删除;

    git 删除保存的工作区

    $ git stash drop
    

    git 恢复工作区并删除保存状态

    $ git stash pop
    

    git 查看远程库信息

    $ git remote -v
    

    git 推送分支

    $ git push origin <branch-name>
    

    git 拉取分支

    $ git pull
    

    git 指定本地分支与远程分支的对应关系

    $ git branch --set-upstream dev origin/dev
    

    多人协作的工作模式

    1. 首先,可以试图用git push origin branch-name推送自己的修改
    2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并
    3. 如果合并有冲突,则解决冲突,并在本地提交;
    4. 没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!

    如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name。

    git 创建标签(标签就是某条commit的别名)

    默认标签是打在最新提交的commit上的

    $ git tag v1.0
    

    git 创建标签到指定commit

    $ git tag v0.9 6224937
    

    git 创建带说明的标签(用-a指定标签名,-m指定说明文字)

    $ git tag -a v0.1 -m "version 0.1 released" 3628164
    

    git 查看所有标签

    $ git tag
    

    git 删除标签

    $ git tag -d v0.1
    

    git 推送指定标签到远程

    $ git push origin <tagname>
    

    git 推送全部未推送过的本地标签

    $ git push origin --tags
    

    git 删除远程指定标签

    $ git push origin :refs/tags/<tagname>
    

    相关文章

      网友评论

          本文标题:廖雪峰Git教程笔记

          本文链接:https://www.haomeiwen.com/subject/uwsttftx.html