Skip to content

Instantly share code, notes, and snippets.

@appleshan
Last active April 6, 2018 16:28
Show Gist options
  • Select an option

  • Save appleshan/116c4fb0f5bc2f32c3189162bbf41587 to your computer and use it in GitHub Desktop.

Select an option

Save appleshan/116c4fb0f5bc2f32c3189162bbf41587 to your computer and use it in GitHub Desktop.

Git 的一些小技巧

节省clone体积

有些时候,我们只想简单学习一下项目代码,这个时候,用 git clone rep_address –depth 1 可以只 clone 每个文件最新的一个提交,这样速度会快很多。

如何用 Git 将一个文件的历史提交恢复?

上次遇到一个问题,我某次提交改动了很多文件,但是其中有一个是不应该改的。所以我需要把这次提交中关于那个文件的改动撤销。直接用 git checkout 命令可以检出某一个文件的历史版本,然后就可以将对这个文件的改动取消了。如下:

git checkout CommitId fileName git ci -m “revert a file modification”

本地工作区还有未提交的内容时,不能 pull?

可以先用 git stash 将内容暂存,然后再 pull,成功后再 git stash pop 将修改恢复。

提交的邮箱错了?

有些时候,因为同时在 github 和公司内部做提交,所以用 2 个不同的邮箱。如果一个新工程 clone 下来,忘了用 git config 来设置提交用户名和邮箱,就有可能用错误的邮箱作为账号名提交。这个时候,如果你只是错了最近的一次提交而已,可以用如下命令来将最近的一次提交作者名和邮箱修改:

git config user.email your-email@163.com git config user.name your-name git commit –amend –reset-author 如果等你发现的时候,已经错了很多提交了。可以用如下命令来一次性修改多个提交的用户名和邮箱:

git filter-branch -f –env-filter ” GIT_AUTHOR_NAME=’Tang Qiao’ GIT_AUTHOR_EMAIL=’tangqiao@fenbi.com’ GIT_COMMITTER_NAME=’Tang Qiao’ GIT_COMMITTER_EMAIL=’tangqiao@fenbi.com’ ” HEAD

提交的时候自动去掉源码末尾的空格

源码末尾的空格几乎都是无意义的,应该去掉的。大多数 review 系统,都会将源码末尾的空格标红。所以,我们何不在提交时让 git 自动帮我们去掉这些空格呢?这个可以通过设置 git 的 hook 来实现,具体方法如下:

  1. 用 vim 编辑一个名为 pre-commit 的文件:

vim .git/hooks/pre-commit

  1. 输入如下代码,保存退出 vim

#!/bin/sh if git-rev-parse –verify HEAD >/dev/null 2>&1 ; then against=HEAD else

against=4b825dc642cb6eb9a060e54bf8d69288fbee4904 fi

for FILE in `exec git diff-index –check –cached $against – | sed ’^[+-]/d’ | sed -E ‘s:[0-9]+:.*//’ | uniq` ; do

sed -i ” -E ‘s/:space:*$//’ “$FILE” git add “$FILE” done

增加 pre-commit 的运行权根:

chmod +x .git/hooks/pre-commit

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment