实用Git技巧
快速Git命令
提交所有更新的文件(不包括新增)
$ git add -u $ git commit -m "some comments"
提交到Remote Repository
$ git fetch $ git rebase // rewrite history $ git push
只读模式获取远端代码
$ git clone git://github.com/username/reponame.git
撤销和修改历史
批量修改错误的作者和邮箱
如果你有多个Git用户,又不小心用错误的用户进行了提交,可以用下面的命令进行修改:
$ git filter-branch --env-filter 'if [ $GIT_AUTHOR_EMAIL = bad@email ]; \ then GIT_AUTHOR_EMAIL=correct@email; fi; export GIT_AUTHOR_EMAIL' $ git filter-branch --env-filter 'if [ $GIT_AUTHOR_NAME = bad_name ]; \ then GIT_AUTHOR_NAME=correct_name; fi; export GIT_AUTHOR_NAME'
批量删除敏感数据的历史
如果不小心提交了一些敏感数据,如证书和密码,简单的删除并不能解决问题,GitHub还是会显示文件的所有历史版本。这时你需要使用下面的命令:
$ git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch \ your/sensitive/data' --prune-empty --tag-name-filter cat -- --all $ git push origin master --force # 强制重写历史
撤销提交
$ git reset --mixed <commit> // 默认值,保留本地修改,处于已修改状态 $ git reset --soft <commit> // 保留本地修改,处于待提交状态 $ git reset --hard <commit> // (危险)不保留本地修改,回归到指定commit状态
撤销刚刚不完整的提交,并重新提交
$ git commit ... $ git reset --soft HEAD^ // 最新的三个是HEAD, HEAD^, and HEAD~2 $ edit $ git commit -a -c ORIG_HEAD
Merge vs Rebase
- o - o - A - B - C (master) \ P - Q - R (origin/master) $ git merge // git pull - o - o - A - B - C - X (master) \ / P - Q - R --- (origin/master) $ git rebase - o - o - P - Q - R - A - B - C (master) ( (origin/master)
Disregard master
// ignore everything from 'master' $ git merge master --strategy=ours // more safe way - resolve all conflicts by picking the 'branch' version $ git merge -s recursive -X theirs branch