Git notes

/**********************************************************************
 *                            Git notes
 * 说明:
 *     大概两年前开始知道版本控制器,自己也偶尔会用用github,但因为工
 * 作到目前为止都没有使用git之类的版本控制器,所以也一直没总结,现在
 * 公司打算用git来管理源代码,所以花点时间总结一下,方便查看。
 *
 *                                    2016-4-10 深圳 南山平山村 曾剑锋
 *********************************************************************/

                    \\\\-*- 目录 -*-//////////
                    |   参考文档:
                    |   一、git安装:
                    |   二、git工作模式:
                    |   三、git basis:
                    |   四、remote repo:
                    |   五、branch:
                    |   六、tag:
                    |   七、自定义git:
                    |   八、搭建git服务器:
                    ------------------------------


参考文档:
    Git教程
        http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

一、git安装:
    sudo apt-get install git

二、git工作模式:
    1. git init文件夹是工作区(Working Directory);
    2. git init文件夹下的.git文件夹是版本库(Repository);
    3. .git文件夹又分为stage、实际的仓库;

三、git basis:
    1. 配置git当前用户名、邮箱:
        git config --global user.name "Your Name"
        git config --global user.email "email@example.com"
    2. 创建git仓库:
        git init
    3. 文件添加到仓库:
        1. git add [[file name]...]
        2. 仅仅是将文件放入git的stage中;
    4. 提交文件到本地仓库:
        1. git commit -m <"Prompt information for this commit">
        2. 仅仅是将stage中的内容放入仓库中;
    5. 查看当前状态:
        git status
    6. 查看当前修改的文件与仓库中文件差异:
        git diff <file name>
    7. 查看历史记录:
        1. 信息比较全的方式: git log
            commit id 是SHA1计算出来的字符串;
        2. 信息精简:git log --pretty=oneline
    8. 版本回退:
        1. 回退一个版本:
            git reset --hard HEAD^
        2. 回退二个版本:
            git reset --hard HEAD^^
        3. 回退多个版本:
            git reset --hard HEAD~<回退多少个版本数>
            例:
            git reset --hard HEAD~100
    9. 版本前移:
        git reset --hard <commit id>
        例:
        git reset --hard 3628164 // commit id 只需要前面一部分就够了
    10. 查看commit id用于版本前移:
        git reflog
    11. 撤销工作区修改:
        1. git checkout -- <file name>
        2. 如果stage中有内容,就用stage中的内容;
        3. 如果stage中没内容,就用仓库中的最新的内容;
    12. 删除文件:
        git rm <file name>
    13. 恢复删除的文件:
        git checkout -- <file name>

四、remote repo:
    1. 远程仓库:
        1. ssh-key:ssh-keygen -t rsa -C "youremail@example.com"2. 主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件;
        3. id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人;
        4. 登陆GitHub,打开“Account settings”,“SSH Keys”页面;
        5. 点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容;
        6. 在GitHub上免费托管的Git仓库,任何人都可以看到喔(但只有你自己才能改)。
    2. 添加远程仓库:
        1. git remote add origin <远程仓库地址>
        2. 远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库;
        3. git push -u origin master
            1. 把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。
            2. 如果远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令:
                git push origin master
    3. 从远程库克隆:
        git clone <远程仓库地址>

五、branch:
    1. 创建分支:
        1. 仅创建分支:
            git branch <分支名>
        2. 创建并跳转到对应的分支:
            git checkout -b <分支名>
    2. 分支跳转:
        git checkout <分支名>
    3. 查看分支:
        git branch
    4. 合并分区:
        git merge <分支名>
    5. 删除分支:
        git branch -d <分支名>
    6. 查看本地远程仓库:
        1. git remote
        2. git remote -v
    7. 推送分支到远程仓率:
        1. git push origin master
        2. git push origin <分支名>
    8. 创建远程origin的dev分支到本地
        git checkout -b dev origin/dev
    9. 获取最新提交:
        1. git branch --set-upstream dev origin/<branch>
        2. git pull

六、tag:
    1. 创建标签:
        1. git tag v1.0
        2. git tag v0.9 6224937
        3. git tag -a v0.1 -m "version 0.1 released" 3628164
    2. 查看标签:
        git tag
    3. 删除标签:
        git tag -d v0.1
    4. 推送标签:
        1. git push origin v1.0
        2. git push origin --tags
    5. 删除远程标签:
        1. 先从本地删除:git tag -d v0.9
        2. 删除远程标签也是push,但是格式如下:git push origin :refs/tags/v0.9

七、自定义git:
    1. Git显示颜色
        git config --global color.ui true
    2. 忽略的文件:
        1. .gitignore
        2. 参考:https://github.com/github/gitignore
    3. 配置别名:
        1. git config --global alias.st status
        2. git config --global alias.co checkout
        3. git config --global alias.ci commit
        4. git config --global alias.br branch
        5. git config --global alias.unstage 'reset HEAD'
        6. git ci -m "bala bala bala..."
        7. git unstage test.py
    4. 显示log:
        git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
    5. 配置文件:
        1. 文件位置:.git/config
        2. cat .git/config 
            [core]
                repositoryformatversion = 0
                filemode = true
                bare = false
                logallrefupdates = true
                ignorecase = true
                precomposeunicode = true
            [remote "origin"]
                url = git@github.com:michaelliao/learngit.git
                fetch = +refs/heads/*:refs/remotes/origin/*
            [branch "master"]
                remote = origin
                merge = refs/heads/master
            [alias]
                last = log -1

八、搭建git服务器:
    1. 安装git:
        sudo apt-get install git
    2. 创建一个git用户,用来运行git服务:
        sudo adduser git
    3. 创建证书登录:
        收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。
    4. 初始化Git仓库:
        sudo git init --bare sample.git
    5. 修改权限:
        sudo chown -R git:git sample.git
    6. 禁用shell登录:
        cat /etc/passwd
            git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
    7. 克隆远程仓库
        git clone git@server:/srv/sample.git
原文地址:https://www.cnblogs.com/zengjfgit/p/5373986.html