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

github.com/base_user/ba…head_user:head_branch

访问这个url,就能直接发起一个pr。

  • pip直接安装一个GitHub上的包

例如下面的pytorch的仓库,clone那个按钮下有两个url,一个是https的url,另一个是鼠标放在download zip那里的时候会有一个url。

pip install github.com/user/reposit 或者 pip install git+https://github.com/user/repository.git 都可以。

https://zhuanlan.zhihu.com/p/105966867

原文地址:http://www.cnblogs.com/sunny3158/p/16831814.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性