Git命令笔记本

设置

git config --global user.name "Your Name"
git config --global user.email "Your E-Mail"
git config --global core.editor vim
git config --global merge.tool     vimdiff
git config --list                                # 显示当前的配置
git config --global core.autocrlf false          # 停止换行的自动转换

初始化或者Clone一个库

git init                 # 初始化一个新的空库

git clone   URL          # 克隆一个远程库
git clone --bare   URL   # 克隆不带工作目录的纯库

文件操作相关

git status                    # 查看状态

# 将修改添加到Stage
git add  .                    # 当前目录所有已在版本库中的文件
git add file                  # 添加文件

git diff               # 查看修改      
git diff     --cached  # 查看已经暂存的差异

git commit                   # 将已加到Stage的文件提交到库中
git commit -m "修改注释"
git commit -a -m "修改注释"   # 直接将已跟踪的文件,添加到Stage并提交   

git rm               # 删除文件
git rm -f            # 已修改的文件 强制删除
git rm --cached      # 删除,但保留文件在磁盘

git mv               # 移动 重命名

git checkout file    # 将文件恢复到上次提交的状态,撤销修改
git checkout -- ./   # 撤销当前目录所有修改 

gitignore

.gitignore     # 添加忽略项到这个文件中

# 此为注释 – 将被 Git 忽略
*.a            # 忽略所有 .a 结尾的文件
!lib.a         # 但 lib.a 除外
/TODO          # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
build/         # 忽略 build/ 目录下的所有文件
doc/*.txt      # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt

查看提交历史

git log
git log -p -2     # -p 展开内容差异 -2 显示最近2次提交
git log --stat    # 显示统计
git log --graph   # 图形化地显示提交历史
git log --pretty=oneline #  oneline, short, full, fuller
git log --since --after --until --before --author --committer --grep
git log --pretty=format:"%h - %an, %ar : %s"

修改和撤销提交

# 修改最后一次提交
git commit -m "foo"
git add forgotten_file
git commit --amend               # 只产生一个提交

# 撤销暂存
git reset HEAD some_file

# 回到上一次提交
git reset HEAD^ --soft  # 文件修改保留 HEAD^表示HEAD的父提交
git reset HEAD^ --hard  # 不保留文件修改

 远程库

git remote              # 查看当前的远程库
git remote -v           # 更详细

git remote add [name] [url] # 添加远程仓库

git fetch [remote-name] # 从远程仓库抓取数据

git fetch origin        # 从服务器抓取最新的提交,不合并
git pull                # 从服务器抓取,并合并到工作目录

git push [remote-name] [branch-name] # 推送数据到远程仓库

git remote show origin     # 查看远程仓库信息
git remote rename pb paul  # 重命名远程仓库
git remote rm pb           # 删除远程仓库

tag

git tag                     # 列出已有的标签
git tag -l "v1.4*"          # 过滤

# 新建tag
git tag -a v1.4 -m "标签注释"
git show v1.4               # 显示标签信息

# 后期加标签
git log --pretty=oneline         # 找到对应提交的校验
git tag -a v1.2 9fceb02          # 追加到校验上

# 分享标签
git push origin v1.5            # 推送某个标签
git push origin --tags          # 所有的标签都推送

分支

git branch testing               # 创建分支
git checkout testing             # 切换工作目录到分支
git checkout -b iss53            # 创建分支并切换到分支
git checkout -b my2.6.14 v2.6.14 # 从tag创建一个分支并checkout
git checkout -b serverfix orign/serverfix # 从远程分支创建一个分支,并checkout
git branch --set-upstream branch remotebranch # 将已有分支跟踪远程分支
git branch --track localbranch remotebranch   # 将本地分支跟踪到远程分支

git branch -d iss53                # 删除一个分支

git branch                         # 列出分支
git branch -v                      # 列出分支详细信息
git branch -r                      # 列出远程分支
git branch --merged                # 已合并的分支
git branch --no-merged             # 未合并的分支

git push origin serverfix          # 推送分支到远程
git push origin :serverfix         # 从远程删除分支        

git merge anotherbranch             # 合并另一个分支到当前分支
git merge anotherbranch --no-commit # 合并分支但不提交

rebase 保持干净的提交历史

git rebase master

清空工作目录

git clean -x -d -f
-x 将忽略的文件一起删除
-d 将目录删除

将已删除的文件添加到暂存

git add -u

导出某个分支到指定目录

git archive master | tar -x -C  /some/path

子模块

git submodule add git://github/foobar.git
git submodule init
git submodule update
点赞