Git
从工作区去除大量已删除文件
当用 /bin/rm
命令删除了大量文件之后,你可以用下面一条命令从工作区和索引中去除这些文件,以免一个一个的删除:
$ git rm $(git ls-files -d)
例如:
$ git status
On branch master
Changes not staged for commit:
deleted: a
deleted: c
$ git rm $(git ls-files -d)
rm 'a'
rm 'c'
$ git status
On branch master
Changes to be committed:
deleted: a
deleted: c
上一个分支
快速检出上一个分支:
$ git checkout -
# Switched to branch 'master'
$ git checkout -
# Switched to branch 'next'
$ git checkout -
# Switched to branch 'master'
去除空白
Git Stripspace 命令可以:
- 去掉行尾空白符
- 多个空行压缩成一行
- 必要时在文件末尾增加一个空行
使用此命令时必须传入一个文件,像这样:
$ git stripspace < README.md
检出 Pull Requests
对 Github 仓库来说,Pull Request 是种特殊分支, 可以通过以下多种方式取到本地:
取出某个特定的 Pull Request 并临时作为本地的 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
操作多个仓库的时候,可以在 Git 中设置获取 Pull Request 的全局选项。
git config --global --add remote.origin.fetch "+refs/pull/*/head:refs/remotes/origin/pr/*"
此时可以在任意仓库中使用以下命令:
git fetch origin
git checkout pr/42
没有任何改动的提交
可以使用--allow-empty
选项强制创建一个没有任何改动的提交:
$ git commit -m "Big-ass commit" --allow-empty
这样做在如下几种情况下是有意义的:
- 标记新的工作或一个新功能的开始。
- 记录对项目的跟代码无关的改动。
- 跟使用你仓库的其他人交流。
- 作为仓库的第一次提交,因为第一次提交后不能被 rebase:
git commit -m "init repo" --allow-empty
.
美化 Git Status
在命令行输入如下命令:
$ git status
可以看到:
加上-sb
选项:
$ git status -sb
这会得到:
美化 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
可以看到:
这要归功于 Palesz 在 stackoverflow 的回答。
这个命令可以被用作别名,详细做法见这里。
Git 查询
Git 查询运行你在之前的所有提交信息里进行搜索,找到其中和搜索条件相匹配的最近的一条。
$ git show :/query
这里 query
(区别大小写)是你想要搜索的词语, 这条命令会找到包含这个词语的最后那个提交并显示变动详情。
$ git show :/typo
- 按
q
键退出命令。*
合并分支
输入命令:
$ git branch --merged
这会显示所有已经合并到你当前分支的分支列表。
相反地:
$ git branch --no-merged
会显示所有还没有合并到你当前分支的分支列表。
修复有问题的提交以及自动合并
如果上一个或多个提交包含了错误,可以在你修复问题后使用下列命令处理(假设要修复的提交版本是abcde
):
$ git commit --fixup=abcde
$ git rebase abcde^ --autosquash -i
进一步了解 Git commit
命令.
进一步了解 Git rebase
命令.
以网站方式查看本地仓库
使用 Git 的 instaweb
可以立即在 gitweb
中浏览你的工作仓库。这个命令是个简单的脚本,配置了 gitweb
和用来浏览本地仓库的Web服务器。(译者注:默认需要lighttpd支持)
$ git instaweb
执行后打开:
Git 配置
所有 Git 配置都保存在你的 .gitconfig
文件中。
Git 命令自定义别名
别名用来帮助你定义自己的 git 命令。比如你可以定义 git a
来运行 git add --all
。
要添加一个别名, 一种方法是打开 ~/.gitconfig
文件并添加如下内容:
[alias]
co = checkout
cm = commit
p = push
# Show verbose output about tags, branches or remotes
tags = tag -l
branches = branch -a
remotes = remote -v
…或者在命令行里键入:
$ git config --global alias.new_alias git_function
例如:
$ git config --global alias.cm commit
指向多个命令的别名可以用引号来定义:
$ git config --global alias.ac 'add -A . && commit'
下面列出了一些有用的别名:
别名 Alias | 命令 Command | 如何设置 What to Type | ||||
---|---|---|---|---|---|---|
git cm |
git commit |
git config --global alias.cm commit |
||||
git co |
git checkout |
git config --global alias.co checkout |
||||
git ac |
git add . -A git commit |
git config --global alias.ac '!git add -A && git commit' |
||||
git st |
git status -sb |
git config --global alias.st 'status -sb' |
||||
git tags |
git tag -l |
git config --global alias.tags 'tag -l' |
||||
git branches |
git branch -a |
git config --global alias.branches 'branch -a' |
||||
git cleanup |
`git branch —merged | grep -v ‘*’ | xargs git branch -d` | `git config —global alias.cleanup “!git branch —merged | grep -v ‘*’ | xargs git branch -d”` |
git remotes |
git remote -v |
git config --global alias.remotes 'remote -v' |
||||
git lg |
git log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit -- |
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --" |
自动更正
如果键入 git comit
你会看到如下输出:
$ git comit -m "Message"
# git: 'comit' is not a git command. See 'git --help'.
# Did you mean this?
# commit
为了在键入 comit
调用 commit
命令,只需启用自动纠错功能:
$ git config --global help.autocorrect 1
现在你就会看到:
$ git comit -m "Message"
# WARNING: You called a Git command named 'comit', which does not exist.
# Continuing under the assumption that you meant 'commit'
# in 0.1 seconds automatically...
颜色输出
要在你的 Git 命令输出里加上颜色的话,可以用如下命令:
$ git config --global color.ui 1
Git 资源
Title | Link |
---|---|
Official Git Site | http://git-scm.com/ |
Official Git Video Tutorials | http://git-scm.com/videos |
Code School Try Git | http://try.github.com/ |
Introductory Reference & Tutorial for Git | http://gitref.org/ |
Official Git Tutorial | http://git-scm.com/docs/gittutorial |
Everyday Git | http://git-scm.com/docs/everyday |
Git Immersion | http://gitimmersion.com/ |
Ry’s Git Tutorial | http://rypress.com/tutorials/git/index.html |
Git for Computer Scientists | http://eagain.net/articles/git-for-computer-scientists/ |
Git Magic | http://www-cs-students.stanford.edu/~blynn/gitmagic/ |
GitHub Training Kit | http://training.github.com/kit |
Git Visualization Playground | http://onlywei.github.io/explain-git-with-d3/#freeplay |
Git 参考书籍
Title | Link |
---|---|
Pragmatic Version Control Using Git | http://www.pragprog.com/titles/tsgit/pragmatic-version-control-using-git |
Pro Git | http://git-scm.com/book |
Git Internals Pluralsight | https://github.com/pluralsight/git-internals-pdf |
Git in the Trenches | http://cbx33.github.com/gitt/ |
Version Control with Git | http://www.amazon.com/Version-Control-Git-collaborative-development/dp/1449316387 |
Pragmatic Guide to Git | http://www.pragprog.com/titles/pg_git/pragmatic-guide-to-git |
Git: Version Control for Everyone | http://www.packtpub.com/git-version-control-for-everyone/book |