Git

Git 常用命令

Posted by Scott on August 6, 2016

目录:

[TOC]

配置

git config --global color.ui true
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.br branch
git config --global core.editor "subl -w"    # 设置 Editor 使用 sublime
git config -l  # 列举所有配置

时光机

对比

工作区、缓存区、最新 commit 之间的对比?

git diff # 工作区与缓存区的差异
git diff -–cached # 缓存区与最新 commit 之间的差异
git diff HEAD # 工作区与最新 commit 之间的差异
git diff @ # 同上

如何对比当前版本和上一个版本?

# 以下三者皆可
git diff @~..@
git diff HEAD^ HEAD
git show @

如何对比当前版本和任意版本?

git diff commit_id HEAD
git diff commit_id @

其他的一些对比,参考 TLCL 的文本操作

diff -c file1 file2 # 比较两个文件,上下文模式
diff -u file1 file2 # 比较两个文件,统一模式

撤销与回退

如何撤销工作区编辑?

git config --global alias.co checkout # git checkout 比较常用,设个别名
git co .
git co -- filename

如何撤销缓存区?

git reset HEAD filename # add 之后,恢复后回到编辑状态。
git reset @ filename # 同上

提交到版本库之后如何回退?

# 会把当前历史删除的做法
git log --pretty=oneline # 查看最近的日志
git reset --hard @~ # 直接回退到上一个版本
git reset --hard HEAD^ # 同上 

# 比较安全的做法
git revert <$id>    # 恢复某次提交的状态,恢复动作本身也创建了一次提交对象,需重写 commit
git revert HEAD     # 恢复最后一次提交的状态

# 感觉自己这次写错了
get reset @~ # 回到工作区的编辑状态,跟上方的 hard 还是有区别的。

改变 git log 至标准输出

git config pager.log false

查看命令历史

git log -1 @ # 简单查看最后的一次提交历史
git config --global alias.last 'log -1 HEAD' # 设置别名
git last # 同 1
git log --pretty=oneline # 一行显示
git log --pretty=format:"%h - %an, %ar : %s" -5 # 定制式最近的 5 条记录
git log -p -2 # 查看最近两次提交的差异
git log --stat -2 # 查看最近两次提交的统计信息

分支管理

搭建 git 服务器

git clone --bare my_project my_project.git # 服务器新建空仓库
sudo chown git:git -R # 改变仓库所有者
git clone git@server:/home/scott/.gitrepo/sample.git # 克隆服务器仓库

Fetch 分支、对比

git fetch origin master 
git diff ..FETCH_HEAD # 对比当前版本库和 Fetch 的内容
git diff @..FETCH_HEAD # 同上

Clone 所有分支

git branch -a
git co -b newbranch origin/newbranch

单独 Checkoout 某分支的某个文件

git co branch file
git commit -m "say something"

推送两个 remote

git remote set-url --add --push origin git://original/repo.git
git remote set-url --add --push origin git://another/repo.git

其他待补……

References