安装

Git For Windows in MSYS2

https://github.com/git-for-windows/git/wiki/Install-inside-MSYS2-proper

概念

The Refspec (引用指定)

  • [+]<src>:<dst>
    • [+] # 强制更新
    • <src> # 本地引用
    • <dst> # 远端引用

表示本地分支和远端分支的映射关系

拉取引用

通常.git/config中会默认指定这个映射,在fetch或是pull时会使用该映射。

[remote "origin"]
   url = git@github.com:schacon/simplegit-progit.git
   fetch = +refs/heads/*:refs/remotes/origin/*

修改该映射该映射可以使得默认的fetch或是pull命令获取指定分支。

[remote "origin"]
   url = git@github.com:schacon/simplegit-progit.git
   fetch = +refs/heads/master:refs/remotes/origin/master
   fetch = +refs/heads/experiment:refs/remotes/origin/experiment

同时指定多个引用也是允许的。

推送引用

通过相同的方法,也可以修改push命令的默认行为。

[remote "origin"]
       url = git@github.com:schacon/simplegit-progit.git
       fetch = +refs/heads/*:refs/remotes/origin/*
       push = refs/heads/master:refs/heads/qa/master

这里的远程分支用到了名为qa的命名空间。

删除引用

git push origin :topic

通过留空的引用,删除topic分支

命令行

仓库

  • git clone [/path|ssh://] [dst_path] #克隆新仓库

  • git init [options] [path] # 初始化一个新仓库

    • [options]
      • –bare # 初始化一个纯仓库,可用于服务端
      • –separate-git-dir # 指定外部 git 目录

取回和推送

推送分支到远程分支

  • git push [–all | –mirror | –tags] [–follow-tags] [–atomic] [-n | –dry-run] [–receive-pack=<git-receive-pack>] [–repo=<repository>] [-f | –force] [-d | –delete] [–prune] [-v | –verbose] [-u | –set-upstream] [-o <string> | –push-option=<string>] [–[no-]signed|–signed=(true|false|if-asked)] [–force-with-lease[=<refname>[:<expect>]]] [–no-verify] [<repository> [<refspec>…​]]

推送无关分支 $ git pull –allow-unrelated-histories

合并

自动合并

  • git merge <merge_branch_name> #合并一个分支
  • git commit #提交修改
  • git commit -m “commit message” #提交修改附带消息

手动合并

变基

  • git rebase
  • git rebase –onto <new_base>

恢复

逆向操作,恢复一个 commit。

  • git revert

分支

  • git branch
  • git branch <new_branch_name> #从 HEAD 新建分支
  • git branch -a #显示远程分支
  • git branch -vv #显示本地分支及追踪的分支
  • git branch –set-upstream-to=origin/<branch> master #设置远程跟踪

远程

  • git remote
    • [-v | –version] 详细
    • add [-t <branch>] [-m <master>] [-f] [–[no-]tags] [–mirror=<fetch|push>] <name> <url>
    • remove <name>

Stashing (储藏)

  • git stash [push [-p|–patch] [-k|–[no-]keep-index] [-q|–quiet] [-u|–include-untracked] [-a|–all] [-m|–message <message>] [–] [<pathspec>…​]] # 向暂存区保存当前工作,并清空工作区
  • git stash list [<options>]
  • git stash ( pop | apply ) [–index] [-q|–quiet] [<stash>] # 提取暂存区的工作
  • git stash drop [-q|–quiet] [<stash>]

日志

  • git log [<option>] [<revision range>] [[–] <path>]
    • <option>
      • -n <number> # 控制日志条数
      • -p # 查看差异
      • –stat # 简要文件差异
      • –name-status # 查看新增、修改和删除
      • –summary # 显示摘要
      • –diff-filter # 使用过滤
      • –grep # 正则匹配

清理

  • git clean -f #删除 untracked files
  • git clean -fd #连 untracked 的目录也一起删掉
  • git clean -xfd #连 gitignore 的untrack 文件/目录也一起删掉 (慎用,一般这个是用来删掉编译出来的 .o之类的文件用的)
  • git clean -nxfd #在用上述 git clean 前,墙裂建议加上 -n 参数来先看看会删掉哪些文件,防止重要文件被误删

差异和补丁

  • git diff
    • git diff [<option>] [–] [<path>…]
      • 默认比较工作区和暂存区
    • git diff [<option>] [<commit>] [–] [<path>…]
      • 比较工作区和commit。
    • git diff [<option>] –cached [<commit>] [–] [<path>…]
      • 比较暂存区和commit。
    • git diff [<option>] <commit> <commit> [–] [<path>…]
      • 比较两个commit。
    • <option>
      • -p | -u | –patch
        • 生成 patch
      • -s | –no-patch
        • 不输出

git diff命令的输出可以直接作为补丁使用

  • git format-patch

    • git format-patch -1 [<commit>]
      • 生成指定commit的补丁
  • git apply

    • git apply [<option>] [<patch>…]
      • 应用一个补丁文件
    • git apply [<option>] [-R | –reverse] [<patch>…]
      • 撤销一个补丁
    • <option>
      • –ignore-space-change | –ignore-whitespace
        • 忽略空格

配置

  • git config

    • git config [<file-option>] name [value [value_regex]]
      • 修改一个键值
    • git config [<file-option>] -e | –edit
      • 直接编辑配置文件
  • [core]

    • autocrlf 自动转换换行符
    • filemode 保持文件权限
    • editor 编辑器
    • pager 翻页工具
  • [diff]

    • tool
    • guitool
  • [i18n]

    • commitencoding 提交改动编码
    • logoutputencoding 日志输出编码