zoukankan      html  css  js  c++  java
  • 整理一些Git的命令

    本地操作


    Git Book -

    参考资料:http://git.oschina.net/progit/

    参考资料:http://rogerdudler.github.io/git-guide/index.zh.html

    参考资料:http://backlogtool.com/git-guide/cn/

    参考资料:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/

    http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html

    http://www.ruanyifeng.com/blog/2015/08/git-use-process.html

    https://ourai.ws/posts/working-with-git-in-team/

    https://wenku.baidu.com/view/e1430d1b7f1922791788e81e

     以及极客学院的资料


    Linux下安装:

    --git安装依赖命令
    sudo yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker

    wget https://github.com/git/git/archive/v2.8.0.tar.gz
    tar -zxvf git-v2.8.0.tar.gz
    cd git-v2.8.0
    make prefix=/usr/local/git all
    make prefix=/usr/local/git install

    whereis git
    vim /etc/profile
      export PATH=$PATH:$JAVA_HOME/bin:/usr/local/git/bin:$CATALINA_HOME/bin:$MAVEN_HOME/bin:$NODE_HOME/bin:/usr/local/bin:$RUBY_HOME/bin


    source /etc/profile
    git --version

    git config --global user.name porters
    git config --global user.email 1906846616@qq.com

    git config --global core.autocrlf false    //忽略win和linux的换行符转换
    git config --global core.quotepath off    //避免中文乱码
    git config --global gui.encoding utf-8

    ssh-keygen -t rsa -C "1906846616@qq.com"
    --一路回车

    eval `ssh-agent`
    ssh-add ~/.ssh/id_rsa

    cat ~/.ssh/id_rsa.pub
    ...

    
    
    mac下安装:


    cd ~

    which -a git                           // 查看mac下安装了哪些版本的git
    git --version                          // 查看git的版本

    git-scm.som                          // 从官网下载安装包,并安装

    vim .bash_profile                        // linux下不同好像是.bash_rc
      export PATH=/usr/local/git/bin:$PATH
    source .bash_profile

    自动完成

    github.com/git/git                        //从github下载源码zip,解压
    cp contrib/completion/git-completion.bash ~/
    cp contrib/completion/git-prompt.sh ~/


    git --version                          //再次查看

    git config --help                          //q退

    git help config                         //q退

    man git-config                         //mac下
    q退出

    win下安装:
    git config                           //tab键会自动补全, 再按一下会有提示可能的282个命令
    git config --                          //tab键会提示参数
    git config --global --unset-all user.name               //移除所有user.name行


    --git增删改查
    git config --global user.name "zhipengliu"
    git config --global user.email "git@zhipengliu.com"
    git config --global user.name pengliu                  //修改
    git config --global --add user.name pengliu                //追加
    git config --global user.name                      
    git config --get user.name                       
    git config user.name                          
    git config --list --global                        //查看所有
    git config --global --unset user.name pengliu                
    git config --global --unset user.name                  //移除所有user.naem行
    --git的子命令以及参数 其别名
    git config --global alias.co checkout
    git config --global alias.br branch
    git config --global alias.st status
    git config --global alias.ci commit
    git config --global alias.lol "log --oneline"

     git config --global alias.lol "log --oneline --decorate --graph --all --date-order

    "

    --git中的四种对象
    1 blob
    2 tree
    3 commit
    4 tag


    1. git init
    2. git clone
    git init git_non_bare_repo          //初始化一个git仓库
    git init --bare git_bare_repo          //创建裸仓库
    git clone git_brare_repo/ git_clone_repo      //从裸仓库克隆一个git仓库(也可以克隆一个远程地址)


    git仓库有三个工作区域:
    working directory:                工作区 (也就是我们日常编写代码存放的地方)维护着一个树形结构
    staging area:                  暂存区(相当于工作区与历史提交中间的一个缓存, 他代表的是你需要提交的一个工作的状态,维护的是一个虚拟的树形结构)
    history repository:                历史仓库(他是一个commit指向的一个树形结构)

    Changes not staged for commit          未提交的更改
    changes to be committed            已暂存
    Untracked files                  跟踪文件
    Unstaged changes after reset          复位后未改变

    1. git add :                    添加到暂存区git add -A  git add .

    2. git commit :                   提交到历史中
    3. git status :                  查看工作区与暂存区之间的区别, 确保我们提交时我们所需要的git status -s
    4. git rm :                     git rm --cached a可以从暂存区删除我们不需要的a文件
    5. git mv :                    底层git帮你做了在工作区对文件重命名, 删除暂存区的文件, 再把重命名的文件添加到暂存区
    .gitignore :                   确保工作区不希望添加到暂存区,或历史中的文件不被添加进去


    1. git branch                // 创建分支(查看分支git branch)(删除非当前分支git branch -d 分支名)
    2. git tag                   // 给一个固定的commit做标记, 

                            git tag -a "INITIAL_COMMIT" f77ce01(-a给commit是f77ce01的打一个含附注的(annotated)标签)

                               git push origin v1.5
                               git push origin --tags

    3. git checkout               // 怎么在分支之间进行切换,

                            还可以git checkout a //此时还原a文件到工作区

                            还可以git checkout -b fix_v0 //相当于git checkout和git branch的组合
    4. git stash                    // 怎么样在切换分支之前保存本地的修改     

                            git stash save -a "stash1" //在返回到的最近指向的commit点,并把未提交的修改stash起来,

                              -a暂存区的内容也stash起来,同时把这些操作记录保存一个临时的地方

                            git stash list 查看之前保存的stash

                            git stash pop --index stash@{0}

                            git stash apply --index stash@{0}

                            git stash drop stash@{0}

                            git stash clear

    5. git merge               // 怎么合并分支

                            git merge --abort //内容有冲突,放弃这次merge的合并        


    1. git show               // 可以跟一个代表commit的对象
    2. git log
    3. git diff

    git show 6fa315a
    git show master
    git show HEAD

    git show HEAD~         git show HEAD~~    git show HEAD~2
    git show master~     git show master~~   git show master~2

    git show HEAD^    git show HEAD^^     git show HEAD^2
    git show master^   git show master^^    git show master^2

    git show master^2 //除了使用hash格式,只有master^2格式才能查看第二幅提交的最后commit(实验获得),      其他格式只是在当前的线性分支依次递减向前推移查看

    git show --oneline master^2       //hash 提交者 提交时间缩成了一行
    git show --stat master^2        //提交的统计信息
    git show --oneline --stat master^2      //提交的commit信息, 和统计信息
    git show --format=%T master^2      //此commit指向的tree对象

    git log
    git log -p
    git log --stat
    git log --oneline
    git log --oneline --decorate --graph --all

    git diff HEAD~2 -- master.txt
    git diff --cached HEAD~2
    git diff HEAD HEAD~2
    git diff HEAD HEAD~2 -- master.txt
    git diff --color-words
    git diff --word-diff


    1. git checkout             //还原工作区
    2. git reset              //还原暂存区
    3. git clean                //git还没有跟踪的文件, git clean清除
    4. git revert             //产生新的提交覆盖原来的之间的提交,达到撤销以前的一个commit提交的目的

    命令git checkout -- readme.txt意思就是: 用此刻head上的已提交的内容回到这个文件最近一次git commit或git add时的状态。
    命令git reset HEAD file意思就是: 用此刻head上的已提交的内容覆盖暂存区**(默认是--mixed: git reset --mixed HEAD file)

    //移除没有被git管理的文件(n查看)(真正删除用f替换n)
    git clean -n              //移除没有在.ignore中列举的
    git clean -n -X              //只移除.ignore中列举的
    git clean -n -x               //移除所有(包含.ignore中列举的)

    git revert 一个代表commit点的对象   //产生新的提交覆盖原来的之间的提交,达到撤销以前的一个commit提交的目的
    git revert --abort            //撤销操作


    1. git commit --amend          //产生一个新的提交, 替换当前指向的这个提交
    2. git rebase               //历史修改能力, 帮助我们维护一个线性的历史
    3. git reset               //刚刚创建了给合并的提交, 想撤销的这个合并的提交,让我们的历史看上去没有合并这个提交
    4. git reflog              //维护了一个head引用的一个历史信息, 通常配合git reset来使用

    //test_rebase分支上做错了, 需要回退
    git reflog                //根据test_rebase上最后一个commit进行还原
    git reset --hard HEAD@{7}        //--hard: 工作区和暂存区被历史还原,把head和分支名的引用指向我们这个commit
                       //--mixed(默认) : 还原暂存区,把head和分支名的引用指向我们这个commit
                       //--soft: 不还原, 把head和分支名的引用指向我们这个commit


    远程协作



    github.com
    bash下:
    ssh-keygen -t rsa -C "xxxxxx@163.com"
    *****
    *****


    eval `ssh-agent -s`
    eval "$(ssh-agent -s)" //win: `ssh-agent -s`


    ssh-add ~/.ssh/id_rsa
    *****
    ****

    cat ~/.ssh/id_rsa.pub
    vim ~/.ssh/id_rsa.pub
    例如:
    ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDUgpHqZm/MtbVFP4aOlEYVcfwG+ey2wxfv/lMMJN1V
    iGtBkUnz/9l+9XrVqiIbVg40Z3D2xvK3qIOoowlA2kyKUa1TBF+Tc3e66sECJxnCZarBz9G8FHLIhs07
    rJjhB5qo7mToLQl/p2oRyY3BeAyoflLh/SJLZEXxrBivn8YA5CGuZm9TCujv1IyasVn3WqbvoRENLAiq
    rKz5uyFzP43IsPajCBvxF80u+I89ynrKZYx2hqguC7QQ7aKXQUeriqfD+YvhuRMTBCt9xIuARJ9Caw8D
    i3jBiIIa5nZrX+vD1z9zsErqTETqpiJd2UtvIDc1fI9H2lEtAHqRwwHyqZrz xxxx@163.com

    在github.com中setting中添加sshkey
    验证bash下:
    ssh -T git@github.com
    输入你刚才设置的密码, 出现你的账户成功授权了
    Hi portersLiu! You've successfully authenticated...

    git clone
    git fetch      //拉取远程仓库数据
    git pull      //获取最新数据,//git pull=>git fetch + git merge 
    git push      //如果push成功, 远程跟踪分支head会自动指向到跟踪分支最新的commit上

    更新本地分支

      git fecth origin

      git fecth origin feacher

       git pull origin feacher

    跟踪远程分支

    git checkout -b [分支名] [远程分支]/[分支名]   //如果你有 1.6.2 以上版本的 Git,还可以用 --track 选项简化:

      git chckout --track origin/serverfix

      git checkout -b sf  origin/serverfix      //在本地起个别名

    推送本地分支

    git push [远程名] [本地分支]:[远程分支]

    git push origin refs/heads/serverfix:refs/heads/serverfix

    git push origin serverfix:serverfix

    git push origin serverfix

      把本地分支推送到某个命名不同的远程分支:若想把远程分支叫作 awesomebranch,可以用 

      git push orgin serverfix:awesonebranch

    删除远程分支

      git branch -d feacher    //删除本地分支

      删除远程分支的方式

      git push --delete origin feacher

      另一种删除远程分支的方式
      git push origin :feacher   //git push [远程名] [本地分支]:[远程分支] 语法,如果省略 [本地分支],那就等于是在说“在这里提取空白然后把它变成[远程分支]”。

    GitHub Pull Request流程

    1. GitHub上fork项目
    2. git remote
    3. pull request

    搜索别人的用户
    找到他的仓库
    点击Fork, 到了自己的仓库
    克隆下来
    一般新建功能分支承载我们的修改
    git checkout -b feature
    vim xxx
    git add xxx
    git commit -m "update xxx on feature"
    git push origin feature
    在master上创建pull request
    就是别人master分支与自己的feature分支的一个差异
    点击create pull request
    ...

    别人用户就可以看到

    再次给别人这个项目pull request流程:
    git remote add upstream https://github.com/别人用户/xxxx.git
    git remote -v
    git checkout master
    git fetch upstream //更新下来的是别人用户master上最新的代码
    git merge upstream/master //合并到我们master分支, 我们test和别人的test就一样了

    git remote rename daydayup //改名
    git remote rm daydayup //删除


    深入理解远程协作
    跟踪分支(tracking branch)与远程跟踪分支(remote tracking branch)的概念
    远程操作中的remote配置
    远程操作中的branch配置


    建议使用git fetch,git merge或git rebase代替git pull
    git diff master origin/master --查看结果决定是否使用merge或rebase操作


    remote配置
    自己的团队:
    git remote set-branches --add origin qa/*
    cat ./git/config
    [remote "orgin"]
    fetch = +refs/heads/qa/*:refs/remotes/origin/qa/*

    qa团队:配置
    git push origin master:qa/master
    或者
    vim ./git/config
    [remote "orgin"]
    push = refs/heads/*:refs/heads/qa/*
    git push origin

    git remote add fork https://github.com/别人用户/mytest.git
    cat ./git/config
    [remote "fork"]
    url = https://git.oschina.net/porters/tutorial.git
    fetch = +refs/heads/*:refs/remotes/fork/*


    branch配置的作用
    如何配置branch
    第一种方式:
    git branch --set-upstream-to=origin/v0 v0
    cat ./git/config
    [branch "v0"]
    remote = origin
    merge = refs/heads/v0
    第二种方式:
    git branch [--set-upstream | --track] v1 origin/v0
    cat ./git/config
    [branch "v1"]
    remote = origin
    merge = refs/heads/v0
    第三种方式:
    git push -u origin v2
    cat ./git/config
    [branch "v2"]
    remote = origin
    merge = refs/heads/v2
    第四种方式:
    git checkout v3
    cat ./git/config
    [branch "v3"]
    remote = origin
    merge = refs/heads/v3
    第五种方式:
    git branch v4
    git config branch.v4.remote origin
    git config branch.v4.merge refs/heads/master
    cat ./git/config
    [branch "v4"]
    remote = origin
    merge = refs/heads/v4

  • 相关阅读:
    【LeetCode】在排序数组中查找元素的第一个和最后一个位置
    【LeetCode】搜索旋转排序数组
    【LeetCode】组合总和
    【LeetCode】电话号码的字母组合
    【LeetCode】对称二叉树
    【LeetCode】验证二叉搜索树
    【LeetCode】分发糖果
    Go学习笔记
    mybatis
    redis
  • 原文地址:https://www.cnblogs.com/liuzhipeng/p/7371575.html
Copyright © 2011-2022 走看看