git
Git
Git是一个分布式版本控制系统,目前主要用于管理代码版本。
Common command
add
按节暂存(stage)/提交(commit)文件:
git add -p <filename>
commit
指定 commit 时间:
d='2017-01-02T15:33:44' GIT_AUTHOR_DATE="$d" GIT_COMMITTER_DATE="$d" git cm -m 'msg' # or GIT_AUTHOR_DATE="$d" git cm -m 'msg' --date "$d"
tag
删除标签:
git tag -d <tag>
删除远程 origin 中的标签:
git push --delete origin <tag>
Useful command
clean
清理当前工作区为干净工作区:
git clean -d -x -f
bisect
Debug利器,通过二分法查找是哪个 commit
导致的bug
开始,设定在两个commit见二分查找(good为工作正常的commit,bad为工作错误的commit):
git bisect start git bisect bad <commit-id> git bisect good <commit-id> # run and test
如果该commit工作仍然异常:
git bisect bad # 将自动切换到下一个测试commit
直到工作正常为止:
git bisect good # 将输出引入bug的commit
patch
生成 patch
文件:
git format-patch -1 <sha> git format-patch -1 HEAD # or git format-patch <sha> # format patch from <sha> to HEAD
应用 patch
文件:
git am ./change.patch
Trick
If you try to delete .git/index.lock
but accidentally delete .git/index
, you can recover this repo by using this commands(All unstaged changes will lose, sorry, blame yourself):
git read-tree --reset HEAD
Ignore some tracked files
git update-index --assume-unchanged <filename> # retrack git update-index --no-assume-unchanged <filename>
Change commited username/email
git filter-branch -f --env-filter \ "GIT_AUTHOR_NAME='NAME'; GIT_AUTHOR_EMAIL='EMAIL'; \ GIT_COMMITTER_NAME='NAME'; GIT_COMMITTER_EMAIL='EMAIL';" HEAD # need to push force git push --force
管理多个ssh密钥
Linux是通过.ssh/config手动指定每个Host的ssh key来实现对多个ssh密钥的管理的,这个方法对于在需要github上切换使用多个帐号的人来说同样有效。
Host my-user-name.github.com HostName github.com User git IdentityFile ~/.ssh/id_rsa IdentitiesOnly yes Host company.github.com HostName github.com User git IdentityFile ~/.ssh/id_rsa_company IdentitiesOnly yes
git.txt · 最后更改: 2023/12/03 10:24 由 127.0.0.1