CFSection9's Studio.

Git常用命令

字数统计: 877阅读时长: 4 min
2018/07/21 Share

git config

Git的设置文件为.gitconfig,它可以在用户主目录下(全局配置),也可以在项目目录下(项目配置)

  • 显示当前的Git配置

    1
    $ git config --list
  • 设置提交代码时的用户信息

    1
    2
    $ git config [--global] user.name "[name]" 
    $ git config [--global] user.email "[email address]"
  • 设置彩色显示

    1
    git config --global color.ui true
  • 设置vim为默认编辑器

    1
    git config --global core.editor "vim"
  • 设置不关心权限

    1
    git config core.filemode false

git push/commit

  • 推commit到remote git server
    for是推到gitweb里面,使本条commit可以在gitweb上能查到

    1
    git push aosp HEAD:refs/for/master
  • 推tag到remote git server:

    1
    repo forall -c "git push origin TAG-04.15.010.03.06"
  • 推commit和tag到remote git server:
    推到heads里面,需要remote先给权限,因为gitweb上无法查看

    1
    repo forall -c "git push aosp --tags HEAD:refs/heads/master"
  • 创建PatchSet
    有的时候推到remote git server还没有merge之前,若是遇上像Merge Conflict或是还有一些瑕疵需要修改,又不想产生新的Change,这个时候PatchSet就发挥作用了。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    1.Create normal commit and push (for Patchset1)
    for example:
    1. git add Server.java
    2. git commit -m "server added"
    3. git push origin HEAD:refs/for/master
    After doing some changes to files
    2.Finally to create new Patchset (Patchset 2)
    1. git add Server.java
    2. git commit --amend
    3. there has two way:
    git push origin HEAD:refs/for/master
    or
    git push origin HEAD:refs/changes/05/112405
    (112405是commit的网址,05是112405最后两个号码)
    Repush commit to remote

git log/diff

  • 查看单独一条branch的message

    1
    git log --graph --oneline --decorate aosp/master
  • 显示指定文件相关的每一次diff

    1
    $ git log -p [file]
  • 查看某个TAG与当前HEAD之前差了哪些commit

    1
    repo forall -p -c "git log TAG-04.15.010.03.08.a1..HEAD" > diff.txt
  • 显示指定文件是什么人在什么时间修改过

    1
    $ git blame [file]
  • 显示某次提交的元数据和内容变化

    1
    $ git show [commit]
  • 显示暂存区和工作区的差异

    1
    $ git diff

git tag

  • 新建一个tag在当前commit

    1
    $ repo forall -c "git tag -a TAG.04.15.010.1.0 -m 'release TAG.04.15.010.1.0 to cus'"
  • 新建一个tag在指定commit

    1
    $ git tag [tag] [commit]
  • 查看tag信息

    1
    $ git show [tag]

git branch

  • 将整个code base切到某个特定时间

    1
    repo forall -c 'git log origin/master -n1 --before="2018-07-21 16:00:00" --format="%H" | xargs git checkout'
  • 列出所有本地分支和远程分支

    1
    $ git branch -a

git Merge

  • 使用合之前的改动:

    1
    2
    3
    4
    5
    git checkout --ours file_name
    ```bash
    * 使用要合的改动:
    ```bash
    git checkout --theirs file_name
  • 遗忘对之前文件的处理:

    1
    git rerere forget [filename]
  • repo项目的大版本合code:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    //1.切到远端分支:
    repo forall -c "git checkout origin/cusline"
    //2.执行merge tag的命令,并把merge的结果输出到log.txt中,方便查找。
    repo forall -p -c "git merge TAG.1.23.a5 -m 'Merge tag TAG.1.23.a5 in to cusline'" > log.txt
    //3.检查log.txt里面是否有conflict
    vim log.txt
    :/Conflict
    //4.转到有conflict的git project,修正conflict,并创建commit
    git add -A
    git merge --contine
    //5.直到把所有Conflict的地方都修正后,确认暂存区里面是否还有东西
    repo forall -c "git status"
    //6.保险起见,把合完后的code与要合的tag做比较,确认diff.txt里面,是否只有客制化的部分
    repo forall -c "git diff TAG.1.23.a5" > diff.txt
    //7.确认无误,把新的commit推到远端
    repo forall -c "git push origin HEAD:refs/for/cusline"

git Patch

  • Linux 默认 patch

    1
    2
    patch –p1 < ../aaa.patch 
    p表示跳过.diff里面所指定的几级目录
  • Git Patch 生成某个commit的patch

    1
    2
    git format-patch -1 <commit number> 
    ex: git format-patch -s -1 c95c8cb4edbadbc46406868f7b60442a9b54f61a
  • 把某个patch合进去:

    1
    git am <file.diff>
CATALOG
  1. 1. git config
  2. 2. git push/commit
  3. 3. git log/diff
  4. 4. git tag
  5. 5. git branch
  6. 6. git Merge
  7. 7. git Patch