鄙人作为一个业余 CoderGit 自然是用的不咋滴。于是在此做一些备忘,方便以后查询,本文将长期更新。

更新 gitignore 不起作用

gitignore 对于已经追踪的文件是不起作用的,导致添加了新的 ignore 规则,但是该被删去的文件还是存在。此时需要删除一下缓存的内容即可。执行一下命令:

1
2
3
git rm -r --cached .
git add .
git commit -m "Update .gitignore"

查看未推送到远程的提交

1
git cherry -v

查看某个 commit 的变动

看看某次 commit 更新或更改了什么,show 之后可以指定 commit ID,也可以使用 相对于 HEAD 的查看

1
git show HEAD

更新存在 Submodule 的项目

1
git submodule update --init --recursive

rebase

http://jartto.wang/2018/12/11/git-rebase/

撤销 rebase

1
git rebase --abort

创建空分支

1
git checkout --orphan <新分支名称>

使用这条命令会创建一个没有父节点的分支,该分支没有历史记录,但是文件内容继承前分支。接下来删除所有文件就可以得到一个空的分支:

1
git rm -rf .

撤销 commit

这里的情景为已经提交(commit),但还未推送到远程仓库(push)。

提交有遗漏或调整提交信息

为了不污染提交的信息,使用以下的命令:

1
git commit --amend

会重新打开编辑器,输入 commit 信息;当然在此之前可以使用 add 添加遗漏的文件,然后再提交。该命令会直接让上一次的 commit 好像没发生一样。

撤回提交

1
git reset HEAD^

这里的 HEAD^ 是上一个版本的意思,也可以写做 HEAD~1,当然也可以撤回多个 commit,只要把 1 改成相应的数字即可。

有几个可选的参数:

  • --mixed 撤销 commit 的同时撤销 git add 操作的效果,reset 的默认参数就是这个;
  • --soft 仅仅撤销 commit,不撤销 git add
  • --hard 撤销 git add,同时删除变动的代码,慎用

取消暂存的文件

有时候我们想提交一个 commit 时发现不小心 add 多了,可以选择性的取消暂存某个文件:

1
git reset HEAD <filename>

这将会使这个文件变成未 staged 状态。如果还想放弃对它的更改,可以继续执行:

1
git checkout -- <filename>

我们对这个文件的更改就会消失,又回到了上次 commit 该文件的状态。

远程相关

以下是一些和远程仓库相关的操作,origin 为远程仓库的名称。

删除远程分支

1
git push origin --delete <分支名称>

推送一个远程不存在的分支

1
git push --set-upstream origin <分支名称>

推送全部分支和 tag

1
git push --all origin