git 实用性操作
git 文档: Pro Git
基本概念:
git会维护自己的一个数据库,每次提交都是整个仓库代码的快照,只是没有改动的文件会指向历史中相同的内容。
原则:
提交规范准确,推送前要慎重,确保自己的提交是正确无误的。禁止修改已经推送的提交。进行合并变基等操作前保证工作区干净。每次提交具有逻辑。
术语:
HEAD: 指的是本地当前分支。 命令行中可以使用@代替
合并
经常进行小的合并,不要等到最后来一次大规模合并。
合并时借助vocede的冲突解决编辑器。
l --ours --theirs
git checkout --ours <file_path>
在合并过程中,可以指定某些文件使用其中一个分支的内容
l Rerere
跨分支保留相同的冲突处理,rerere会保存冲突解决方案,每次合并不需要重复处理已经处理过的冲突。
需要开启配置
git config --global rerere.enabled true
退出合并:
git merge --abort
变基(禁止操作已推送的提交)
提取一个分支的更改,放到另一个分支上,使提交历史更整洁,是一条直线的形式,合并是有分支的形式。
l 基础变基举例:将feature_a的提交放到dev
git switch dev
git rebase feature_a
l 筛选在B分支不在A分支的提交,(B是基于A拉取的分支)合并到主分支
git rebase --onto main branchA branchB (筛选出只在B分支的提交,改变B的提交历史)
git merge branchB / git rebase branchB
git rebase main branchA (后续合并A分支的代码,同样先排除已经在main分支的提交)
git merge branchB / git rebase branchB
最后可以删除分支A和分支B
l 退出变基
git rebase --abort
重点注意: 不要对别人已经引用的提交执行变基操作,因为变基的本质是丢弃之前的提交,并创建相似但有差异的新提交。如果修改其他人已经使用的提交,会引起混乱。
git log 查看提交历史
l git log - 查看最近几条提交
l --since="20240505" 某个时间点之后的提交
l --until="20240101" 某个时间点之前的提交
l --author 提交人
l --grep 查询提交信息中包含特定字符串的提交
l 查看特定字符串第一次出现和删除的提交
git log -S "domoFn"
查找demoFn在项目中什么时候出现或者删除的提交
l 查看特定行数范围或者函数名的变更历史
git log -L 1,20:src/a.vue
git log -L demoFn():a.vue
l --no-merges 排除合并提交
l 自定义格式 git log --pretty=format:"%h - %an, %ar : %s"
以上条件可同时设置
对比差异 git diff
l 对比两个分支不同 git diff branch1 branch2
l 对比两个分支的同一个文件 git diff branch1 branch2 -- path/to/file
l 对比当前代码与特定提交 git diff commit-hash
l --name-only 只显示有差异的文件名
查找不同分支间的历史提交
l 查找存在A分支不在B分支的提交
git log main..dev 查看在dev上不在main的提交
同等于 git log dev --not main
同等于 git log dev ^main
l 查找在A,B上不在C上的提交
git log A B --not C
同等于 git log A B ^C
l 查找在A或者B,但不同时存在于AB的提交
git log --left-right A...B
Bisecting
查找bug,找到未出现bug的提交,git会使用二分法辅助确定bug出现的提交。
git reflog
查看本地保存的提交历史,每次git操作都会在本地记录一条reflog,并保留几个月
git show HEAD@{5} 查看倒数第5条的记录
git show dev@{2024-05-23} 查看某个时间dev分支位于哪个提交
其他
储藏当前更改
快速切换回刚才的分支
git switch -
重置提交
对于本地提交
git reset --hard HEAD~
操作符号~ 指前一个提交
遴选多个提交
首先git log --oneline -3 列出需要遴选的多个提交,获取hash
git cherry-pick hash-1 hash-2 hash-3 (顺序为提交时间从早到晚)
对比两个分支差异并应用
git diff branchA..branchB > branch_diff.patch
git apply branch_diff.patch
查看另一个分支的当前文件内容
git show branch:path/to/file
查看当前仓库地址url
git remote -v
启用彩色输出,使命令输出更易读
git config --global color.ui auto