图形化学习网站:learngitbranching.js.org/
Git命令小结:
$ git rebase main (bugFix)- 将bugFix支与main分叉的所有commits都移动到main之后
- bugFix可以省略,默认为当前所在分支
- 移动后bugFix会自动成为当前所在分支
- $ git rebase -i HEAD~4 (bugFix)类似于cherry-pick
- 但是不需要知道你所需要摘取的各commit节点的hash值
- 并且可以在vim中重新排序,编辑
$ git branch -f main HEAD~3- 强制移动main分支到HEAD~3
- 当前所在的分支可以不是main,即可以移动其他分支
- 移动后当前所在的分支不变
$ git reset 和 git reverse$ git reset HEAD~1- 移动当前所在节点为HEAD~1,当前的commit丢失(变灰),好像从没commit过一样
- 当然通过log还是可以看到“丢失”的那个commit的hash
- reset后面的参数HEAD~1表示移动到哪去
- $ git reset —hard origin/main 可以处理main被policy限制,需要用户创建pull request并创建别的分支才能merge时,如果用户又不知道情况,已经在本地尝试push到main分支,就会被远程remote拒绝并陷入锁死的情况,此时需要将本地的main分支与远程orign/main重新同步并创建新分支feature来进行push
$ git revert HEAD- 生成一个新commit,新commit和当前commit之间的delta内容,将是当前commit和其父commit节点间所提交修改的反操作
- 不适用于remote协作,只作用于本机本地分支
- revert后面的参数HEAD则表示要回退哪一个commit
$ git commit —-amend- 修改刚刚的commit,新commit同样指向原父commit节点
- 经常被用于修改typo或者commit信息填写错误等
$ git tag v1 (C1)- C1是一个commit哈希,如果没写,默认是当前HEAD所在的那个commit位置
$ git describe (<ref>)- 和git tag连用,可用于很长时间未接触项目后重新获取项目中特定位置的定位情况
- <tag>_<numCommits>_g<hash>是输出格式
$ git pull等价于$ git fetch; git merge origin/main,假设当前所在main分支$ git pull —rebase等价于$ git fetch; git rebase origin/main,假设当前所在main分支$ git checkout -b feature (C2)- 此处C2为某一个commit的哈希,参数不给出时为创建新分支到HEAD当前位置
- 改变本地对应origin/main远程分支的分支为其他分支的两个方法:
$ git checkout -b foo origin/main$ git branch -u origin/main (foo),如果当前分支为foo时,可以省略
$ git fetch origin :bar- 可以创建本地分支bar
$ git push origin :foo- 可以删除远程分支foo
- $ git pull origin main 取决于你当前所在的分支,比如当前所在foo分支,那么就相当于在foo分支上拉取远程main所有的新commit,而不会修改本地的main分支,所以你可以在多个不同分支上git pull origin main以达到更新各个分支的目的:
- $ git fetch origin main
- $ git merge main
- $ git pull origin main:bar 则做的更多:
- $ git branch bar 创建本地新分支bar
- $ git fetch origin main:bar 将main对应的远程分支的commits更新到本地分支bar
- $ git merge bar 合并当前所在分支和bar分支
其他git学习资料:
- Git User Manual: mirrors.edge.kernel.org/pub/softwar…
- 学习pro git中文版,(前五章):git-scm.com/book/zh/v2
- 简短的介绍了如何从 Git 错误中恢复:ohshitgit.com/
- 简短的介绍了 Git 的数据模型,包含较少量的伪代码以及大量的精美图片:eagain.net/articles/gi…
- 详细的介绍了 Git 的实现细节,而不仅仅局限于数据模型。好奇的同学可以看看:jwiegley.github.io/git-from-th…,xosh.org/explain-git…
- 通过基于浏览器的游戏来学习 Git:learngitbranching.js.org/?locale=zh_…
- udacity上的git教学,挺有用的: