Git 伪高级操作

745 阅读3分钟

前提:大巴车分支为merge多个人分支的总和。

背景:大巴车发布的时候发生冲突,需要解决冲突,自己分支merge了大巴车的分支(埋下隐患),然后push remote自己分支。

隐患:如果他人对自己分支代码进行删除,重新push 大巴车分支依旧无修改 因为大巴车这段多余的代码是由我的分支进行提交的。

插曲:在merge完大巴车分支之后,我重新commi了一个包修改的提交。经过组内大哥们的题型才发现上面的隐患。

解决:自己分支reset 到merge之前的代码。使用cherry-pick将包修改提交拉取。大巴车分支重新merge。(为什么大巴车重新merge而不是reset,是因为我 push-f 将大巴车之前的merge都覆盖了)

规范:大巴车解决分支冲突步骤 1. git chekout bus/xxxx 2.git merge yourBranch 3 .git push remote

工具:

推荐一款mac上的beyondCompare,kaleidoscope。

Kaleidoscope是一款Mac上非常强大的文件图片和文本比较工具,支持任意文本文档和图像文件,能够非常快速和准确的查找出不同之处和合并不同的文档或图片,其强大的合并和解决冲突功能非常好用,并且支持和Subversion、Git、Mercurial等版本管理工具的整合。

跟git的结合需要一些简单的配置。

  1. 安装完kaleidoscope后
  2. 然后安装ksdiff命令行
  3. 安装完后选择git选项框,然后将kaleidoscope设置为默认的git diff和merge工具

安装完成。 之后在命令行用git difftool 代替git diff。比如要跟本地master进行diff,请使用git difftool master。然后你会发现再也不是枯燥的命令行里的+++ ---了,仿佛从二次元到了三次元~~。

常用的命令

  1. 代码推拉:git pull/push/fetch [remote] [branch]
  2. 代码比对:git diff commit1 commit2 [-- stat]
  3. 日志查找:git log [-p] [--author=xxx] [filename]
  4. 分支合并:git merge branch [--squash]
  5. 代码提交:git commit -m [-n] [--author=other]
  6. 代码重置:git reset hash [--hard]
  7. 代码搜索:git grep [-l] keyword [filename]

常用的tag:

type用于说明 commit 的类别,只允许使用下面7个标识。

  • feat: 新功能(feature)
  • fix:bug修复
  • merge: 合并分支
  • docs:文档修改
  • style:缩紧,空格,换行,大小写等调整(不影响代码运行的变动)
  • refactor:代码重构(代码结构调整,不影响功能)
  • perf:性能优化(improve performance)
  • test:增加测试
  • chore:系统构建,打包

其他的一些技巧

git stash :多分支开发

git stash list:查看stash

git stash pop:弹出第一个

git stash drop stash@{0} :移除stash

git stash save "xxx" 带名字

git stash show -p xxx:查看diff不同

cherry-pick:reset配合使用或者拉取别人提交的某个commit

git cherry-pick 拉取别人的commit

www.ruanyifeng.com/blog/2020/0…

idea reset 之前可以记录下分支的hash reset之后 可以cherry pick 之前的提交 gitkraken 好处是图形化界面

缩写快捷键:(zsh命令)

g :git 其他命令还是敲一下算了

恢复代码:

只要能拿到hash就能进行恢复

git reflog

强制删除 分支之后可以通过 git reset hash --hard进行恢复

git stash clear 也可以进行恢复