[心得]git使用技巧归纳

本文深入解析了Git中的关键命令,如git reset、git checkout等,并详细介绍了它们的不同应用场景,包括撤销更改、切换分支、合并和重新基底等。此外,还讨论了如何安全地撤销提交,以及如何使用stash和cherry-pick进行高效开发。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用git管理代码,之前看过好多资料,不得要领。总结如下:

git reset、git checkout
这两个命令不仅可以作用于提交,还可以作用于特定文件
Git仓库有三个主要组成——工作目录,缓存区和提交历史。
你传给git reset和git checkout的参数决定了它们的作用域。如果你没有包含文件路径,这些操作对所有提交生效。
git checkout hotfix
git reset HEAD~2

如果你的更改还没有共享给别人,git reset是撤销这些更改的简单方法。reset就像是go-to命令一样。

–soft – 缓存区和工作目录都不会被改变
–mixed – 默认选项。缓存区和你指定的提交同步,但工作目录不受影响
–hard – 缓存区和工作目录都同步到你指定的提交

reset操作会重写当前分支的历史。正如Rebase黄金法则所说的,在公共分支上这样做可能会引起严重的后果。
The golden rule is to never use it on public branches.

rebase 的原则,就是只改变本地repo的commit,一旦本地commit push到了远程,就不能再次rebase了。这样就不会有那些“混乱的历史”了

git checkout hotfix
上面这个命令做的不过是将HEAD移到一个新的分支,然后更新工作目录。因为这可能会覆盖本地的修改,Git强制你提交或者缓存工作目录中的所有更改,不然在checkout的时候这些更改都会丢失。和git reset不一样的是,git checkout没有移动这些分支。

Revert撤销一个提交的同时会创建一个新的提交。这是一个安全的方法,因为它不会重写提交历史。比如,下面的命令会找出倒数第二个提交,然后创建一个新的提交来撤销这些更改,然后把这个提交加入项目中。

git checkout hotfix
git revert HEAD~2

命令 作用域 常用情景
git reset 提交层面 在私有分支上舍弃一些没有提交的更改
git reset 文件层面 将文件从缓存区中移除
git checkout 提交层面 切换分支或查看旧版本
git checkout 文件层面 舍弃工作目录中的更改
git revert 提交层面 在公共分支上回滚更改

git merge master feature_branch
现有的分支不会有任何形式的改变,因此也就避免了rebasing 一些潜在的缺陷, 当develop开的分支非常活跃时,这将导致branch1到N分支的历史记录初步变大,这时查看工程历史记录,就会发现各种分叉,很难理解。
作为merging的替代方法,我们也可以将branch1分支rebase到develop分支
git checkout feature_branch
git rebase master

假设你将master 分支rebase 到 feature_brauch分支,结果将master上所有提交移动到feature_brauch的最前面,问题是:这次合并操作只影响feature_brauch分支,所有其他开发这依然在original master分支上工作,由于rebasing是重写提交历史,git 会认为所有历史提交已经与其他开发者提交的不同,同步这两个分支唯一的办法是将feature_brauch分支又merging到master分支,结果是两次提交集合中大部分包含了相同的修改,不用说,这是一个非常混乱的局面。因此,当执行rebasing操作时,时常问下自己:是不是有其他人在关注改分支?如果是,则考虑其它方式,否则则可以安全使用rebasing。

git 默认的 git pull 命令相当于 git fetch + git merge
git log -p 查看历史纪录以来哪几行被修改
git log –oneline 查看历史提交日志,单行显示
提交历史搜索
git log –author=””
根据提交作者,搜索提交历史 pattern 可以是字符串或这则表达式
git log –grep=””

git stash 开发中我们经常也会遇到,代码写了一半,要切到另一个分支修复一个bug,或者需要拉取其他小伙伴的代码合并做测试,这时便可以使用 git stash经未完成的放在stash 栈中,相关命令有 :
stash list:列出stash 所有记录
stash apply:将某个纪录取出
stash clear:清空stash 栈

git cherry-pick
当多人在不同分支开发一个版本时,经常也会遇到 A分之上的小伙伴A debug需要B分之上小伙伴B的某次或多次提交, 这时 git cherry-pick朋友值得拥有
git cherry-pick
这一条我在某公司面试时遇到过坑,印象特别深刻!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值