• Git极简教程 Git技巧


    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
  • 相关阅读:
    2.1 ArrayList 线程不安全,LinkedList 线程不安全,Vector 线程安全
    Mybatis详解(二)--动态代理(未集成Spring)
    3.2经典垃圾收集器
    3.垃圾收集器与内存分配
    6.类文件结构(Class结构)
    7.类加载机制
    spark实现从hbase中批量查询多个rowKey
    spark实现分页查询hbase
    查询mysql数据库的表名,主键
    redis退出异常:ERR Errors trying to SHUTDOWN. Check logs.
  • 原文地址:https://www.cnblogs.com/sunny3158/p/16831814.html
Copyright © 2020-2023  润新知