Git命令
文档链接
http://git-scm.com/book/zh/v2/
基本操作
创建git仓库
git init克隆仓库
git clone https://github.com/example/example.git追踪文件
git add a.cpp git add *.cpp git add *查看当前文件状态
git status -------------------- On branch master Your branch is up-to-date with 'origin/master'. Changes to be committed: (use "git restore --staged <file>..." to unstage) new file: README以简洁的方式查看当前文件状态
git status -s -------------------- M README MM Rakefile A lib/git.rb M lib/simplegit.rb ?? LICENSE.txt.gitignore
# 忽略所有的 .a 文件 *.a # 但跟踪所有的 lib.a,即便你在前面忽略了 .a 文件 !lib.a # 只忽略当前目录下的 TODO 文件,而不忽略 subdir/TODO /TODO # 忽略任何目录下名为 build 的文件夹 build/ # 忽略 doc/notes.txt,但不忽略 doc/server/arch.txt doc/*.txt # 忽略 doc/ 目录及其所有子目录下的 .pdf 文件 doc/**/*.pdf查看未暂存的文件有那些修改
git diff -------------------- diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8ebb991..643e24f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -65,7 +65,8 @@ branch directly, things can get messy. Please include a nice description of your changes when you submit your PR; if we have to read the whole diff to figure out why you're contributing in the first place, you're less likely to get feedback and have your change -merged in. +merged in. Also, split your changes into comprehensive chunks if your patch is +longer than a dozen lines. If you are starting to work on a particular area, feel free to submit a PR that highlights your work in progress (and note in the PR title that it's查看已暂存文件和最后一次提交的差异
git diff --staged -------------------- diff --git a/README b/README new file mode 100644 index 0000000..03902a1 --- /dev/null +++ b/README @@ -0,0 +1 @@ +My Project提交暂存区的内容到仓库
git commit -m "message"将所有跟踪过的文件add后提交
git commit -a -m "message"从git中移除并且删除文件
git rm -f README.md从git中移除但并不删除文件
git rm --cached README.md修改文件名并添加到git中
git mv README.md README -------------------- 相当于 \$ mv README.md README \$ git rm README.md \$ git add README
仓库合并操作
查看提交历史
git log -------------------- commit ca82a6dff817ec66f44342007202690a93763949 Author: Scott Chacon <schacon@gee-mail.com> Date: Mon Mar 17 21:52:11 2008 -0700 changed the version number commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 Author: Scott Chacon <schacon@gee-mail.com> Date: Sat Mar 15 16:40:33 2008 -0700 removed unnecessary test commit a11bef06a3f659402fe7563abf99ad00de2209e6 Author: Scott Chacon <schacon@gee-mail.com> Date: Sat Mar 15 10:31:28 2008 -0700 first commit查看最近两次提交所引入的差异
git log -p -2查看提交的简略统计信息
git log --stat以特有的形式显示提交信息
git log --pretty=oneline/short/full/fuller以格式化方式显示提交信息
git log --pretty=format:"%h - %an, %ar : %s" -------------------- %H 提交的完整哈希值 %h 提交的简写哈希值 %T 树的完整哈希值 %t 树的简写哈希值 %P 父提交的完整哈希值 %p 父提交的简写哈希值 %an 作者名字 %ae 作者的电子邮件地址 %ad 作者修订日期(可以用 --date=选项 来定制格式) %ar 作者修订日期,按多久以前的方式显示 %cn 提交者的名字 %ce 提交者的电子邮件地址 %cd 提交日期 %cr 提交日期(距今多长时间) %s 提交说明git log的常用选项
-p 按补丁格式显示每个提交引入的差异。 --stat 显示每次提交的文件修改统计信息。 --shortstat 只显示 --stat 中最后的行数修改添加移除统计。 --name-only 仅在提交信息后显示已修改的文件清单。 --name-status 显示新增、修改、删除的文件清单。 --abbrev-commit 仅显示 SHA-1 校验和所有 40 个字符中的前几个字符。 --relative-date 使用较短的相对时间而不是完整格式显示日期(比如“2 weeks ago”)。 --graph 在日志旁以 ASCII 图形显示分支与合并历史。 --pretty 使用其他格式显示历史提交信息。可用的选项包括 oneline、short、full、fuller 和 format(用来定义自己的格式)。 --oneline pretty=oneline --abbrev-commit 合用的简写。git log 过滤内容
-\<n> 仅显示最近的 n 条提交。 --since, --after 仅显示指定时间之后的提交。 --until, --before 仅显示指定时间之前的提交。 --author 仅显示作者匹配指定字符串的提交。 --committer 仅显示提交者匹配指定字符串的提交。 --grep 仅显示提交说明中包含指定字符串的提交。 -S 仅显示添加或删除内容匹配指定字符串的提交。