本秘籍收录了一些Git和Github非常酷同时又少有人知的功能。灵感来自于Zach Holman在2012年Aloha Ruby Conference和2013年WDCNZ上所做的演讲:Git and GitHub Secrets(slides)和More Git and GitHub Secrets(slides)。

新手怎么学git和github(GitHub秘籍:git)(1)

前一个分支

快速检出上一个分支:

$ git checkout - # Switched to branch 'master' $ git checkout - # Switched to branch 'next' $ git checkout - # Switched to branch 'master'

进一步了解 Git 分支.

Stripspace命令

Git Stripspace命令可以:

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

$ git stripspace < README.md

进一步了解 Git stripspace 命令.

检出Pull Requests

Pull Request是一种GitHub上可以通过以下多种方式在本地被检索的特别分支:

检索某个分支并临时储存在本地的FETCH_HEAD中以便快速查看更改(diff)以及合并(merge):

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

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

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

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

[remote "origin"] fetch = refs/heads/*:refs/remotes/origin/* url = git@github.com:tiimgreen/github-cheat-sheet.git

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

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

$ git checkout pr/42 pr-42

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

提交空改动 :trollface:

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

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

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

更直观的Git Status

在命令行输入如下命令:

$ git status

可以看到:

新手怎么学git和github(GitHub秘籍:git)(2)

加上-sb选项:

$ git status -sb

这回得到:

新手怎么学git和github(GitHub秘籍:git)(3)

进一步了解 Git status 命令.

更直观的Git Log

输入如下命令:

$ 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

可以看到:

新手怎么学git和github(GitHub秘籍:git)(4)

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

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

进一步了解 Git log 命令.

Git查询

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

$ git show :/query

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

$ git show :/typo

新手怎么学git和github(GitHub秘籍:git)(5)

合并分支

输入命令:

$ git branch --merged

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

相反地:

$ git branch --no-merged

会显示所有还没有合并到你当前分支的分支列表。

进一步了解 Git branch 命令.

转载本文请遵循原文要求

,