Git平时使用太频繁,搜起指令来也很方便,感觉都没什么好介绍了。记录一点我常用的命令,顺便写写最近接触到的新东西。
Git指令
-
git stash
这世界没有git stash不能运转.jpg
可以把它的功能理解为快速给你的当前worktree做一个备份,并恢复到上一个提交的状态。切分支时最常用。我有时候写着写着乱了,想暂时回滚到上一个提交做sanity check也会用。
要弹出的时候就
git stash pop
,要查看stash过的东西就git stash list
。如果想pop又想保留一份copy在stash list中,do
git stash apply
instead ofgit stash pop
(pop等同于apply并drop最新一条记录;apply是可以指定特定记录的)。 -
git reset --soft HEAD^1
回滚到最新commit的前一个commit;最新commit的内容会重新加回工作区。简单来说就是对commit这个行为的Ctrl + Z。
我的用法只能算bad practice,请当作反面教材。我最常用的场景之一是……更改commit message(明明可以用
git commit --amend
!)另一场景比较复杂也更恶劣:在写小项目的时候,有时候本地环境出各种各样的问题,推上github通过线上流水线来验证会更快。这时候如果build失败,就本地回滚,后面再推代码的时候用 git push -f 强行用本地的代码覆盖远程。这样非常不好,但某种程度上也算保证了commit history不要太脏乱(虽说这是good practice),属于不是办法的办法,千万要小心别影响到自己或队友…… -
git revert
跟reset的区别在于,revert是撤销之前的某次特定提交。对ps类的工具熟悉的,可以理解为“将前面某个图层的可视取消,并且对当前图片状态进行一个快照(commit)”。revert是会产生一条新commit的。
-
git cherry-pick <commitHash>
从别的分支捡特定commit到当前分支(支持捡多个、范围捡)。协作时总会需要用到的一条指令。
-
git checkout <branch-name> -- <file-name>
把别的分支的某特定文件导入到当前分支,像对文件的cherry pick。
Git flow工作流
对团队开发中分支、提交等的规范。Sourcetree之类的git可视化工具里对git flow工作流有配置上的支持。
分支设置比较冗杂,事实上完全照着git flow的流程来的项目应该不多,但稍具规模的团队开发都会采用类似的工作流。
danielkummer.github.io/git-flow-ch…
阮一峰老师8年前写的 git flow等工作流 www.ruanyifeng.com/blog/2015/1…
Codespace
协作时不止要共享代码,还要保证运行环境一致。
GitHub提供了一个非常便捷的功能 Codespace,我们最近在用。可以在任意repo中创建codespace,codespace的IDE会自动在浏览器中运行。这样的online IDE确保开发不会受到不同local environment的影响,代码在你的工作电脑、个人电脑、队友的工作电脑、个人电脑,都在同样的环境下运行。
Codespace也整合进了VSCode,需要进行更复杂的操作的时候,无缝切换到VSCode里操作更方便。
Dev Container
在 codespace 中工作时,你工作所处的环境是使用托管在虚拟机上的dev container创建的,这个环境可以通过devcontainer.json进行一些config(GitHub官方文档的介绍)。
如果不使用codespace,VSCode也有插件支持dev container,使用方法跟在VSCode里使用codespace相差无几。我实操的时候遇到一个小问题(windows机器限定),大概是说ssh-agent service出错,不解决会导致你无法在container里使用git。这是因为微软在某次更新后默认关闭了ssh-agent的服务,在services.msc里找到OpenSSH Authentication Agent Properties,把它打开就好了。