zoukankan      html  css  js  c++  java
  • [skill][git] git 常用操作记录

    傻瓜入门: step by step : https://try.github.io/levels/1/challenges/1

    一本书: https://git-scm.com/book/en/v2

    竟然有中文版 O.O: https://git-scm.com/book/zh/v2/

    git实在是太复杂了,学呀学呀学不懂。只能一点点记下来,省得每次想好久。。。。

    0. 新环境里的第一次配置:

    [root@D128 Src]# git config --global user.name "Cao Tong"
    [root@D128 Src]# git config --global user.email "tong.caotong@gmail.com"

    0.1  generate ssh key

    [root@D128 Src]# ssh-keygen 

    0.2  add your pub key to your ssh repo server, like github

    0.3  下载代码

    [root@D128 Src]# git clone git@github.com:intel/hyperscan.git

    1. 丢弃所有修改

      两个命令一起用。

    /home/tong/Src/copyleft/libdssl [git::master *] [tong@T7] [13:53]
    > sudo git clean -xdf
    /home/tong/Src/copyleft/libdssl [git::master *] [tong@T7] [13:47]
    > git reset --hard

    2.  删除一个本地分支:

      git branch -d <branch-name>

    /home/tong/Src/thirdparty/github/msgpack-c [git::master] [tong@T7] [11:07]
    > git branch -l
      list
    * master
    
    /home/tong/Src/thirdparty/github/msgpack-c [git::master] [tong@T7] [11:08]
    > git branch -d list
    Deleted branch list (was c50fbe4c).
    
    /home/tong/Src/thirdparty/github/msgpack-c [git::master] [tong@T7] [11:08]
    > git branch -l     
    * master

    3.  创建git server

      在CentOS 7 环境下:

      参考: https://git-scm.com/book/zh/v2/%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%9A%84-Git-%E5%8D%8F%E8%AE%AE

      3.1  安装:

    [root@S205 log]# yum install git

      3.2  初始化仓库

    [root@S205 log]# su - git
    Last login: Mon Jun 19 20:04:06 CST 2017 on pts/0
    [git@S205 ~]$ mkdir anthropoid.git
    [git@S205 ~]$ cd anthropoid.git/
    [git@S205 anthropoid.git]$ git init --bare
    Initialized empty Git repository in /home/git/anthropoid.git/
    [git@S205 anthropoid.git]$ ll
    total 12
    drwxrwxr-x 2 git git   6 Jun 19 20:05 branches
    -rw-rw-r-- 1 git git  66 Jun 19 20:05 config
    -rw-rw-r-- 1 git git  73 Jun 19 20:05 description
    -rw-rw-r-- 1 git git  23 Jun 19 20:05 HEAD
    drwxrwxr-x 2 git git 242 Jun 19 20:05 hooks
    drwxrwxr-x 2 git git  21 Jun 19 20:05 info
    drwxrwxr-x 4 git git  30 Jun 19 20:05 objects
    drwxrwxr-x 4 git git  31 Jun 19 20:05 refs

      3.3  增加公钥,授予权限

      3.4  设置git shell

    [root@S205 ~]# which git-shell >> /etc/shells
    [root@S205 ~]# cat /etc/shells 
    /bin/sh
    /bin/bash
    /sbin/nologin
    /usr/bin/sh
    /usr/bin/bash
    /usr/sbin/nologin
    /bin/tcsh
    /bin/csh
    /usr/bin/git-shell
    [root@S205 ~]# chsh git
    Changing shell for git.
    New shell [/bin/bash]: /usr/bin/git-shell
    Shell changed.
    [root@S205 ~]# su - git
    Last login: Mon Jun 19 20:35:34 CST 2017 from 192.168.50.20 on pts/1
    fatal: Interactive git shell is not enabled.
    hint: ~/git-shell-commands should exist and have read and execute access.
    [root@S205 ~]# 

      3.5  在原项目里创建新分支

    /home/tong/Src/copyleft/potatos [git::master *] [tong@T7] [20:15]
    > git branch anthropoid
    
    /home/tong/Src/copyleft/potatos [git::master *] [tong@T7] [20:15]
    > git branch          
      anthropoid
      hally
    * master
    
    /home/tong/Src/copyleft/potatos [git::master *] [tong@T7] [20:15]
    > git checkout anthropoid
    Switched to branch 'anthropoid'
    
    /home/tong/Src/copyleft/potatos [git::anthropoid *] [tong@T7] [20:15]

       3.6  push第一个版本

    /home/tong/Src/copyleft/potatos [git::master *] [tong@T7] [20:56]
    > git push origin anthropoid:master          
    X11 forwarding request failed on channel 0
    Counting objects: 139, done.
    Delta compression using up to 4 threads.
    Compressing objects: 100% (135/135), done.
    Writing objects: 100% (139/139), 34.86 KiB | 0 bytes/s, done.
    Total 139 (delta 69), reused 0 (delta 0)
    To s205:/home/git/anthropoid.git
     * [new branch]      anthropoid -> master

       3.7  从新仓库clone

    /home/tong/Src/copyright/onescorpion [tong@T7] [20:58]
    > git clone git@s205:/home/git/anthropoid.git
    Cloning into 'anthropoid'...
    X11 forwarding request failed on channel 0
    remote: Counting objects: 139, done.
    remote: Compressing objects: 100% (66/66), done.
    remote: Total 139 (delta 69), reused 139 (delta 69)
    Receiving objects: 100% (139/139), 34.86 KiB | 0 bytes/s, done.
    Resolving deltas: 100% (69/69), done.

    4.  使本地仓库的仓库内容与某标签一致。

    检出标签
    在 Git 中你并不能真的检出一个标签,因为它们并不能像分支一样来回移动。 如果你想要工作目录与仓库中特定的标签版本完全一样,
    可以使用 git checkout
    -b [branchname] [tagname] 在特定的标签上创建一个新分支: $ git checkout -b version2 v2.0.0 Switched to a new branch 'version2' 当然,如果在这之后又进行了一次提交,version2 分支会因为改动向前移动了,那么 version2 分支就会和 v2.0.0 标签稍微有些不同,这时就应该当心了。

    参考: https://git-scm.com/book/zh/v2/Git-%E5%9F%BA%E7%A1%80-%E6%89%93%E6%A0%87%E7%AD%BE

    5.  让文件恢复到上一次提交时的样子

    git checkout -- [file] 

    6.  查看/获取远程分支

    > git branch -a
    > git checkout -b frame_feature origin/frame_feature

     7.   export 导出

    https://git-scm.com/docs/git-archive

    https://stackoverflow.com/questions/160608/do-a-git-export-like-svn-export

    好像是不行的。有人说用rsync:

    rsync -a ./FROM/ ./TO --exclude='.*'
    /home/tong/Src/thirdparty/pktgen-dpdk [git::pktgen-3.3.3] [tong@T7] [18:21]
    > git archive --format=tar.gz -o pktgen-3.3.3.tar.gz HEAD

    8.  git add 空文件夹

      git add 不能添加空文件夹。没有这个功能。 一般是在空文件夹下面放一个文件 .gitkeep

    https://git.wiki.kernel.org/index.php/GitFaq#Can_I_add_empty_directories.3F

    9.  git 重命名仓库

      9.1  

    [root@S205 git]# mv anthropoid.git/ crisp.git

      9.2

    /home/tong/Src/copyright/onescorpion [tong@T7] [14:23]
    > mv anthropoid crisp 

      9.3

    /home/tong/Src/copyright/onescorpion/crisp [git::develop *] [tong@T7] [14:23]
    > git remote -v 
    origin  git@s205:/home/git/anthropoid.git (fetch)
    origin  git@s205:/home/git/anthropoid.git (push)
    
    /home/tong/Src/copyright/onescorpion/crisp [git::develop *] [tong@T7] [14:23]
    > git remote set-url origin git@s205:/home/git/crisp.git     
    
    /home/tong/Src/copyright/onescorpion/crisp [git::develop *] [tong@T7] [14:29]
    > git remote -v                                         
    origin  git@s205:/home/git/crisp.git (fetch)
    origin  git@s205:/home/git/crisp.git (push)
    
    /home/tong/Src/copyright/onescorpion/crisp [git::develop *] [tong@T7] [14:29]
    > 

     10. 分支合并指定文件 / 从其他分支提取指定文件

    git checkout source_branch <paths>...

    http://ryanhoo.github.io/blog/2014/07/11/checkout-files-from-another-branch/

    http://jasonrudolph.com/blog/2009/02/25/git-tip-how-to-merge-specific-files-from-another-branch/

    无历史信息!

    11.  clone时,指定具体的tag.

    git clone --branch v1.6 git@github.com:hyperrealm/libconfig.git libconfig-v1.6

    glibc下载代码的指引, 不知道是不是相同的需求:

    git clone git://sourceware.org/git/glibc.git
    cd glibc
    git checkout --track -b local_glibc-2.26 origin/release/2.26/master

    https://www.gnu.org/software/libc/sources.html

     12. 重写最近一次提交的日志

    [11:36:53] tong@T7 /home/tong/Src/copyright/ (129) 
    > git commit --amend 

    13. git archive 的用法

    https://www.kernel.org/pub/software/scm/git/docs/git-archive.html 

    https://stackoverflow.com/questions/5995301/how-do-i-pipe-a-git-clone-to-archive-tar-or-gzip

    git archive --format=tar --remote=git@server:repo.git master | tar -xf -
    git archive --format=tar.gz -o pktgen-3.3.3.tar.gz HEAD

     14 git checkout 到指定版本

    ┬─[tong@T7:~/Src/]─[04:40:14 PM]
    ╰─>$ git checkout --detach 0e4dcf6cd69c2b9ca37bafd1a43dfede0f17542f
    HEAD is now at 0e4dcf6... fix bug: msgpack soa dns rr
    ┬─[tong@T7:~/Src/]─[04:40:31 PM]
    ╰─>$ git branch
    * (HEAD detached at 0e4dcf6)
      master
    ┬─[tong@T7:~/Src/]─[04:40:40 PM]
    ╰─>$ 

    15 git 从指定版本退回

    ┬─[tong@T7:~/Src/copyright/strongswan]─[05:46:41 PM] 
    ╰─>$ git revert 4e77d9939af9ac6f06b95516399ed302d0df10fe
    ┬─[tong@T7:~/Src/copyright/strongswan]─[05:46:41 PM]
    ╰─>$ git push

    16 提交之后有一些内容忘记了提交

    例如,你提交后发现忘记了暂存某些需要的修改,可以像下面这样操作:
    
    $ git commit -m 'initial commit'
    $ git add forgotten_file
    $ git commit --amend
    最终你只会有一个提交 - 第二次提交将代替第一次提交的结果。

    17 临时分支到某个tag

    root@D128 ~/S/t/pktgen-dpdk.git# git checkout --detach pktgen-3.5.0
    HEAD is now at 46f697c... fix typo
    root@D128 ~/S/t/pktgen-dpdk.git# git branch
    * (detached from pktgen-3.5.0)
      master

     18 清理工作目录

    # git clean -fd

     19  取出某个commit 作为patch,并patch到当前代码里

    root@D128 ~/S/c/j/j# git format-patch -1 9ca41ea4a56bfcab0fb6fcb6eea5ecb0a9e5103e
    0001-nlb_sched.patch
    root@D128 ~/S/c/j/j# git am 0001-nlb_sched.patch 
    Applying: nlb_sched: 1. unbind scheduler while service is really freeing. 2. support release_later feature for 'scheduler data'.

     am会增加commit log。只接受修改可使用apply

    root@D128 ~/S/c/j/j# git apply 0001-nlb_sched.patch

    20  查看git目录下的全部不在仓库里的数据

    git status --ignored -u

          清除他们

    git clean -x -f -d

    21 push用法

    $ git pull <远程主机名> <远程分支名>:<本地分支名>
    $ git pull origin next:master

    22 删除远端分支

      $ git push  <远程主机名> :<本地分支名>

    git push origin :test_branch

     

  • 相关阅读:
    《Programming WPF》翻译 第8章 1.动画基础
    一些被遗忘的设计模式
    《Programming WPF》翻译 第4章 数据绑定
    《Programming WPF》翻译 第3章 控件
    《Programming WPF》翻译 第5章 样式和控件模板
    《Programming WPF》翻译 第7章 绘图
    《Programming WPF》翻译 第9章 自定义控件
    《Programming WPF》翻译 第7章 绘图 (2)
    《Programming WPF》翻译 第8章 前言
    关于Debug和Release之本质区别
  • 原文地址:https://www.cnblogs.com/hugetong/p/6861029.html
Copyright © 2011-2022 走看看