Git极简教程 Git技巧
前几篇介绍的是极简git使用方法,还有一些git使用过程中的奇技淫巧,每一个单独成文又内容太少,在这里直接列出来吧。
- git push --all
可以一次性把本地所有分支push上去。
- git push :branch_name
push的分支名前面加上冒号,可以删除远端的分支。对tag同样适用。
- git log --all --name-only | grep filename
可以在所有的提交记录里面查找一个文件。如果某一个文件曾经存在,但是现在已经被删了,可以通过这个来找到它在哪里。
- git rm --cached filename
取消追踪一个文件
- git log --filename
只显示这个文件的改动情况。更极端的,git log -L <start>,<end>:<file> 可以显示某一些行的改动情况,但是粒度太细了,应该不常用。
- git log --graph
用图的方式查看提交记录,对于有merge的多个分支的提交更直观。
- git log -5 查看最近5个修改
- git log HEAD~12..HEAD~10 查看从前12个修改到前10个修改之间的修改。重在三个点,head~12可以用任何commit id表示,包括完整的hash值、tag或者branch名等等。
- git diff 显示哪些文件被改动了
- git diff --word-diff 显示单词级别的改动
在改论文的时候特别有用,因为latex一段就是一句话,改一个单词的时候必须用git diff --word-diff才看得清晰。通用的语法格式为 git diff basebranch targetbranch -- file ,以basebranch为基准,比较targetbranch有什么改动,-- 后面是针对某一特定文件的改动。
其实Git很多操作都可以对文件单独做,语法就是在后面加上 -- filename 。
比如 git checkout commitid -- filename, 直接找出某一个commit_id状态下的那一个文件,而不用影响其它文件。git reset commitid -- file也可以达到同样的效果。
- git blame -L start[,end] -- file
查看file中的[start,end]行都是哪些人改过。定位到bug之后可以用来追责。
- git archive -o archive.zip master
相当于给当前状态做一份快照。GitHub上的下载zip功能,可能就是用这个命令实现的。
- git config --list --show-origin
可以看到所有的配置以及具体是在哪个配置文件中
- git commit --amend
提交一个commit,与上一个commit合并
可以用来替代 git stash 了。git stash 用处不大。
- git commit -a -m 'msg'
等同于先 git add -u 再git commit -m 'msg'
- squash操作的若干种写法
squash的意思是压扁,把若干个commit压扁成一个commit。比如连着三个commit分别是add func1, add func2, add func3, 那么可以压扁成一个commit,叫做 add some funcs。
可以采用git commit --amend一个一个压缩。
也可以采用git rebase -i head~n 的方式压缩最近的n个commit。
GitHub 上面,对一个pr可以squash and commit,就是这里的squash的意思。
- 发起pr的时候先rebase一下,自己处理冲突,是对别人的尊重
git fetch origin && git rebase origin/master
- git cherry-pick commit_id
只把某一个commit的内容拿过来。比如其他branch上有一个commit是实现了一个函数,只想把那个函数拿过来而不想合并整个branch的时候有用。
- git merge / git pull / git rebase / git cherry-pick 都是merge系列的操作,都可以加上 --continue / --abort 参数来继续/取消。
- 撤销已经提交的更改
git reset --hard HEAD~n 撤销n个更改
如果更改已经push到云端,可以 git reset --hard HEAD~n && git push origin --force
- windows下新建.gitignore文件报错
在文件管理器里面新建文本文件,改名为 .gitignore, Windows会说缺少文件名。所以,还是打开命令行,用 touch .gitignore来创建更好。
与GitHub相关的一些操作
- https clone vs. ssh clone
对于使用 https clone 的,每次push或者pull的时候都需要输入账号密码。
ssh clone 的,只要配置好公钥,就可以免密码。
- 在GitHub评论区引用一个commit
只需要写出完整的commit的编号,GitHub会自动识别成commit并加上超链接。
- 直接下载GitHub上的单个文件
把url里面的blob改成raw,就可以直接另存为文件,或者用wget命令行下载了。
- git pull origin master --allow-unrelated-histories
一般用Git的时候第一个命令是 git clone, 也就是先在GitHub上有一个仓库了。如果相反,是本地有一个仓库,想放在GitHub上,那可以在GitHub上新建一个空白的仓库,然后执行这一句,再git push
- 用url直接在GitHub上开pr
http://github.com/base_user/base_repo/compare/base_branch…head_user:head_branch
访问这个url,就能直接发起一个pr。
- pip直接安装一个GitHub上的包
例如下面的pytorch的仓库,clone那个按钮下有两个url,一个是https的url,另一个是鼠标放在download zip那里的时候会有一个url。
pip install https://github.com/user/repository/archive/branch.zip 或者 pip install git+https://github.com/user/repository.git 都可以。
https://zhuanlan.zhihu.com/p/105966867 标签:极简,教程,Git,--,GitHub,git,push,commit From: https://www.cnblogs.com/sunny3158/p/16831814.html