where git
git version
git config user.name
git config --list --show-origin
git config --show-origin user.name
git config --global user.name "John Doe"
git config --global user.email johndoe@example.com
git config --global core.editor "'C:/Program Files (x86)/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"
git config --help 或 git help config 或 git config -h
git clone https://github.com/libgit2/libgit2
git status 或 git status --short
git add <file>
git commit -o <file1> <file2> -m '提交特定两个文件'
git commit -a -m '提交所有文件'
创建gitignore.txt
ren gitignore.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 只显示尚未暂存的改动
git diff --staged 或 git diff --cached 比对已暂存文件与最后一次提交的文件差异
git commit -a -m '注释'
git commit --amend 有时候我们提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了。 此时,可以运行带有 --amend 选项的提交命令来重新提交
git rm --cached README 从暂存区删除文件,但仍在工作目录中
git rm log/\*.log 此命令删除 log/ 目录下扩展名为 .log 的所有文件
git mv from.txt to.txt
运行 git mv 就相当于运行了下面三条命令 mv README.md README git rm README.md git add README
git log 显示所有提交记录
git log -p -2 显示最近两次提交,并显示提交的补丁差异
git log --stat 查看简短版的提交差异
git log --pretty=oneline 美化显示日志,一次提交放在一行
git log --pretty=format:"%h - %an, %ar : %s" 按指定格式输出日志
git log --pretty=format:"%h %s" --graph 这个选项添加了一些 ASCII 字符串来形象地展示你的分支、合并历史
git log --since=2.weeks 打印近两周的日志,可以是类似 "2008-01-15" 的具体的某一天,也可以是类似 "2 years 1 day 3 minutes ago" 的相对日期。
还可以过滤出匹配指定条件的提交。 用 --author 选项显示指定作者的提交,用 --grep 选项搜索提交说明中的关键字。
git log -S function_name 根据修改内容查找日志
git log --pretty="%h - %s" --author='Junio C Hamano' --since="2008-10-01" \ --before="2008-11-01" --no-merges -- t/ --no-merges不显示合并的提交记录
git reset HEAD CONTRIBUTING.md 取消暂存的文件,但不会撤消对文件的修改
git checkout -- CONTRIBUTING.md 撤消对文件的修改,还原到最近提交的版本
git tag 查看所有标签
git tag -a v1.4 -m "my version 1.4" 如果只写了git tag -a v1.4 则会调用你配置的默认编辑器去输入附注
git show v1.4 显示标签信息
git tag v1.4-lw 创建轻量标签,不需要输入附注信息
git log --pretty=oneline
git tag -a v1.2 9fceb02 后期打标签
git tag -d v1.2 删除标签
git push origin --delete <tagname> 删除远程标签
git checkout v1.1 根据标签检出代码
git config --global alias.ci commit 当要输入 git commit 时,只需要输入 git ci
git branch testing
git log --oneline --decorate
git checkout testing
git checkout -b <newbranchname>
git merge hotfix
git branch -d hotfix
git branch -D hotfix
git merge testing
git status
git commit -a -m '修改冲突后提交'
git branch 获取分支列表
git branch -v
git branch --merged
git branch --no-merged
git checkout experiment
git rebase master
检出 experiment 分支,然后将它变基到 master 分支上 它的原理是首先找到这两个分支(即当前分支 experiment、变基操作的目标基底分支 master) 的最近共同祖先 C2, 然后对比当前分支相对于该祖先的历次提交,提取相应的修改并存为临时文件, 然后将当前分支指向目标基底 C3, 最后以此将之前另存为临时文件的修改依序应用。 变基与merge达到的效果一样,但变基是将一系列提交按照原有次序依次应用到另一分支上,而合并是把最终结果合在一起。
git add -i
有时,当你在项目的一部分上已经工作一段时间后,所有东西都进入了混乱的状态, 而这时你想要切换到另一个分支做一点别的事情。 问题是,你不想仅仅因为过会儿回到这一点而为做了一半的工作创建一次提交。 针对这个问题的答案是 git stash 命令。
git stash list
git stash apply
git stash apply stash@{2}
git stash drop stash@{0}
git stash --keep-index
git stash --include-untracked
git stash -all
git stash branch <new branchname>
git clean -f -d -n (-f强制,-d删除,-n输出内容)
git clean -x -i (-x移除未跟踪忽略的文件,-i交互)
git commit --amend 修改最近的一次提交
git rebase -i HEAD~3 列出之前三次提交让你更改,可以修改/删除/压缩/拆分提交,
git filter-branch --tree-filter 'rm -f passwords.txt' HEAD 全局修改你的邮箱地址或从每一个提交中移除一个文件
全局修改邮箱地址,可以修改之前提交记录里的邮箱地址
git filter-branch --commit-filter '
if [ "$GIT_AUTHOR_EMAIL" = "schacon@localhost" ];
then
GIT_AUTHOR_NAME="Scott Chacon";
GIT_AUTHOR_EMAIL="schacon@example.com";
git commit-tree "$@";
else
git commit-tree "$@";
fi' HEAD
git reset --hard HEAD
git config --global commit.template ~/.gitmessage.txt
git for-each-ref --format='%(committerdate) %09 %(authorname) %09 %(refname)' | sort -k5n -k2M -k3n -k4n|grep branch_A
git reflog show --date=iso master
git branch --merged
git branch --no-merged
https://git-scm.com/book/zh/v2