例如:

    1. $ git status
    2. On branch master
    3. Changes not staged for commit:
    4. deleted: a
    5. deleted: c
    6. $ git rm $(git ls-files -d)
    7. rm 'a'
    8. rm 'c'
    9. $ git status
    10. On branch master
    11. Changes to be committed:
    12. deleted: c

    上一个分支

    快速检出上一个分支:

    1. $ git checkout -
    2. # Switched to branch 'master'
    3. $ git checkout -
    4. # Switched to branch 'next'
    5. $ git checkout -
    6. # Switched to branch 'master'

    进一步了解 Git 分支.

    去除空白

    Git Stripspace 命令可以:

    • 去掉行尾空白符
    • 多个空行压缩成一行
    • 必要时在文件末尾增加一个空行

    使用此命令时必须传入一个文件,像这样:

    1. $ git stripspace < README.md

    进一步了解 Git stripspace 命令.

    检出 Pull Requests

    对 Github 仓库来说,Pull Request 是种特殊分支, 可以通过以下多种方式取到本地:

    取出某个特定的 Pull Request 并临时作为本地的 FETCH_HEAD 中以便进行快速查看更改( diff )以及合并( merge ):

    1. $ git fetch origin refs/pull/[PR-Number]/head

    通过 refspec 获取所有的 Pull Request 为本地分支:

    1. $ git fetch origin '+refs/pull/*/head:refs/remotes/origin/pr/*'

    或在仓库的 .git/config 中加入下列设置来自动获取远程仓库中的 Pull Request

    1. [remote "origin"]
    2. fetch = +refs/heads/*:refs/remotes/origin/*
    3. url = git@github.com:tiimgreen/github-cheat-sheet.git
    1. [remote "origin"]
    2. fetch = +refs/heads/*:refs/remotes/origin/*
    3. url = git@github.com:tiimgreen/github-cheat-sheet.git
    4. fetch = +refs/pull/*/head:refs/remotes/origin/pr/*

    对基于派生库的 Pull Request,可以通过先 checkout 代表此 Pull Request 的远端分支再由此分支建立一个本地分支:

    1. $ git checkout pr/42 pr-42

    操作多个仓库的时候,可以在 Git 中设置获取 Pull Request 的全局选项。

    1. git config --global --add remote.origin.fetch "+refs/pull/*/head:refs/remotes/origin/pr/*"

    此时可以在任意仓库中使用以下命令:

    进一步了解如何本地检出 pull request.

    可以使用--allow-empty选项强制创建一个没有任何改动的提交:

    1. $ git commit -m "Big-ass commit" --allow-empty

    这样做在如下几种情况下是有意义的:

    • 标记新的工作或一个新功能的开始。
    • 记录对项目的跟代码无关的改动。
    • 跟使用你仓库的其他人交流。
    • 作为仓库的第一次提交,因为第一次提交后不能被 rebase: git commit -m "init repo" --allow-empty.

    美化 Git Status

    在命令行输入如下命令:

      加上-sb选项:

      1. $ git status -sb

      这会得到:

      git status -sb

      进一步了解 Git status 命令.

      美化 Git Log

      输入如下命令:

      1. $ git log --all --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative

      可以看到:

      这要归功于 Palesz 在 stackoverflow 的回答。

      这个命令可以被用作别名,详细做法见。

      进一步了解 Git log 命令.

      Git 查询

      Git 查询运行你在之前的所有提交信息里进行搜索,找到其中和搜索条件相匹配的最近的一条。

      1. $ git show :/query

      这里 query (区别大小写)是你想要搜索的词语, 这条命令会找到包含这个词语的最后那个提交并显示变动详情。

      1. $ git show :/typo

      git show :/query

      • q 键退出命令。*

      输入命令:

      1. $ git branch --merged

      这会显示所有已经合并到你当前分支的分支列表。

      相反地:

      1. $ git branch --no-merged

      进一步了解 Git branch 命令.

      修复有问题的提交以及自动合并

      如果上一个或多个提交包含了错误,可以在你修复问题后使用下列命令处理(假设要修复的提交版本是abcde):

      进一步了解 Git commit 命令.

      以网站方式查看本地仓库

      使用 Git 的 instaweb 可以立即在 gitweb 中浏览你的工作仓库。这个命令是个简单的脚本,配置了 gitweb 和用来浏览本地仓库的Web服务器。(译者注:默认需要lighttpd支持)

      1. $ git instaweb

      执行后打开:

      Git 配置

      所有 Git 配置都保存在你的 .gitconfig 文件中。

      Git 命令自定义别名

      别名用来帮助你定义自己的 git 命令。比如你可以定义 git a 来运行 git add --all

      要添加一个别名, 一种方法是打开 ~/.gitconfig 文件并添加如下内容:

      1. [alias]
      2. co = checkout
      3. cm = commit
      4. p = push
      5. # Show verbose output about tags, branches or remotes
      6. tags = tag -l
      7. branches = branch -a
      8. remotes = remote -v

      …或者在命令行里键入:

      1. $ git config --global alias.new_alias git_function

      例如:

      1. $ git config --global alias.cm commit

      指向多个命令的别名可以用引号来定义:

      1. $ git config --global alias.ac 'add -A . && commit'

      下面列出了一些有用的别名:

      自动更正

      如果键入 git comit 你会看到如下输出:

      1. $ git comit -m "Message"
      2. # git: 'comit' is not a git command. See 'git --help'.
      3. # Did you mean this?
      4. # commit

      为了在键入 comit 调用 commit命令,只需启用自动纠错功能:

      1. $ git config --global help.autocorrect 1

      现在你就会看到:

      1. $ git comit -m "Message"
      2. # WARNING: You called a Git command named 'comit', which does not exist.
      3. # Continuing under the assumption that you meant 'commit'
      4. # in 0.1 seconds automatically...

      颜色输出

      1. $ git config --global color.ui 1

      进一步了解 Git 命令.

      Git 参考书籍