35.显示本地更新过 HEAD 的 git 命令记录
每次更新了 HEAD 的 git 命令比如 commit、amend、cherry-pick、reset、revert 等都会被记录下来(不限分支),就像 shell 的 history 一样。 这样你可以 reset 到任何一次更新了 HEAD 的操作之后,而不仅仅是回到当前分支下的某个 commit 之后的状态。
git reflog
36.修改作者名
git commit --amend --author='Author Name <email@address.com>'
37.修改远程仓库的 url
git remote set-url origin <URL>
38.增加远程仓库
git remote add origin <remote-url>
39.列出所有远程仓库
git remote
40.查看两个星期内的改动
git whatchanged --since='2 weeks ago'
41.把 A 分支的某一个 commit,放到 B 分支上
这个过程需要 cherry-pick 命令,参考
git checkout <branch-name> && git cherry-pick <commit-id>
42.给 git 命令起别名
简化命令
git config --global alias.<handle> <command> 比如:git status 改成 git st,这样可以简化命令 git config --global alias.st status
43.存储当前的修改,但不用提交 commit
详解可以参考廖雪峰老师的 git 教程
git stash
44.保存当前状态,包括 untracked 的文件
untracked 文件:新建的文件
git stash -u
45.展示所有 stashes
git stash list
46.回到某个 stash 的状态
git stash apply <stash@{n}>
47.回到最后一个 stash 的状态,并删除这个 stash
git stash pop
48.删除所有的 stash
git stash clear
49.从 stash 中拿出某个文件的修改
git checkout <stash@{n}> -- <file-path>
50.展示所有 tracked 的文件
git ls-files -t
51.展示所有 untracked 的文件
git ls-files --others
52.展示所有忽略的文件
git ls-files --others -i --exclude-standard
53.强制删除 untracked 的文件
可以用来删除新建的文件。如果不指定文件文件名,则清空所有工作的 untracked 文件。clean 命令,注意两点:
- clean 后,删除的文件无法找回
- 不会影响 tracked 的文件的改动,只会删除 untracked 的文件
git clean <file-name> -f
54.强制删除 untracked 的目录
可以用来删除新建的目录,注意:这个命令也可以用来删除 untracked 的文件。详情见上一条
git clean <directory-name> -df
55.展示简化的 commit 历史
git log --pretty=oneline --graph --decorate --all
56.把某一个分支导出成一个文件
git bundle create <file> <branch-name>
57.从包中导入分支
新建一个分支,分支内容就是上面 git bundle create 命令导出的内容
git clone repo.bundle <repo-dir> -b <branch-name>
58.执行 rebase 之前自动 stash
git rebase --autostash
59.从远程仓库根据 ID,拉下某一状态,到本地分支
git fetch origin pull/<id>/head:<branch-name>
60.详细展示一行中的修改
git diff --word-diff
61.清除 gitignore 文件中记录的文件
git clean -X -f
62.展示所有 alias 和 configs
注意: config 分为:当前目录(local)和全局(golbal)的 config,默认为当前目录的 config
git config --local --list (当前目录) git config --global --list (全局)
63.展示忽略的文件
git status --ignored
64.commit 历史中显示 Branch1 有的,但是 Branch2 没有 commit
git log Branch1 ^Branch2
65.在 commit log 中显示 GPG 签名
git log --show-signature
66.删除全局设置
git config --global --unset <entry-name>
67.新建并切换到新分支上,同时这个分支没有任何 commit
相当于保存修改,但是重写 commit 历史
git checkout --orphan <branch-name>
68.展示任意分支某一文件的内容
git show <branch-name>:<file-name>
69.clone 下来指定的单一分支
git clone -b <branch-name> --single-branch https://github.com/user/repo.git
70.clone 最新一次提交
只会 clone 最近一次提交,将减少 clone 时间
git clone --depth=1 https://github.com/user/repo.git
71.忽略某个文件的改动
关闭 track 指定文件的改动,也就是 Git 将不会在记录这个文件的改动
git update-index --assume-unchanged path/to/file
恢复 track 指定文件的改动
git update-index --no-assume-unchanged path/to/file
72.忽略文件的权限变化
不再将文件的权限变化视作改动
git config core.fileMode false
73.以最后提交的顺序列出所有 Git 分支
最新的放在最上面
git for-each-ref --sort=-committerdate --format='%(refname:short)' refs/heads/
74.在 commit log 中查找相关内容
通过 grep 查找,given-text:所需要查找的字段
git log --all --grep='<given-text>'
75.把暂存区的指定 file 放到工作区中
不添加参数,默认是 -mixed
git reset <file-name>
76.强制推送
git push -f <remote-name> <branch-name>