git revert reset merge rebase 与大牛分享链接

本文介绍了Git中的关键概念,包括revert用于生成新提交以撤销特定提交,reset则用于完全回退到某个提交状态而不影响后续提交。此外还对比了merge与rebase的区别,并提供了丰富的Git学习资源。

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

git关键概念

revert

是生成一个新的提交来撤销某次提交,此次提交之前和之后的commit都会被保留,虽然撤销但会影响合并,因为revert后版本更新,所以建议用reset做回退

reset

是回到某次提交,提交及之前的commit都会被保留,但是此次之后的修改都会被退回到暂存区,项目的版本不会更新。

merge

rebase


git学习资料


代码管理工具代码社区待研究

在google,在pre-commit阶段必须有主管的审批才能把代码上库。大家可以在平台上讨论代码,也可以让拉里佩奇审核自己的代码(看人家时间),也可以看拉里佩奇当年的代码。类似的平台有一个开源的phabricator,有时间研究一下

### Git Revert 操作对未来 Merge 的影响 当执行 `git revert` 来撤销某个特定的提交时,实际上是在创建一个新的提交来反向应用被撤销提交中的更改[^1]。这意味着原始提交仍然存在于历史记录中,而新引入的 revert 提交则抵消了其效果。 对于未来的 merge 操作而言: - 如果尝试将已经包含了 revert 变化的分支其他未包含这些变化的分支进行合并,则可能会遇到冲突。因为同一个文件的不同版本试图共存于一次新的合集中。 - 当涉及到 revert 了一个由多个父级组成的 merge commit 之后再做进一步的集成工作时,情况会更加复杂一些。由于 revert 不仅要取消掉那次合并带来的所有改动,还要考虑到它所涉及的基础差异(即参合并前的状态),所以如果后续继续基于此状态去做其他修改或再次发生类似的合并行为的话,就很容易引发不必要的麻烦[^4]。 为了妥善处理这种情况下的 merge 操作,建议采取如下措施之一: #### 方法一:使用 `-m` 参数指定主干侧作为基底来进行逆向操作 通过这种方式可以让 Git 明白应该依据哪一个父节点去构建对应的反转逻辑,从而减少潜在的风险点。 ```bash # 假设我们要针对某次三路合并 (具有两个父母) 执行还原动作, # 并且希望以第一个父亲为基准(-m 1),那么命令形式如下所示: git revert -m 1 <merge-commit-id> ``` 这种方法适用于那些想要保持原有历史清晰度而不愿破坏线性结构的情形下;不过需要注意的是,这样做可能无法完全消除所有的可能性冲突,特别是在面对复杂的依赖关系网时[^3]。 #### 方法二:先 cherry-pick 或重新变基(rebase) 另一种策略是把目标分支上的变更单独提取出来形成一系列独立的新提交,然后再把这些更新施加到当前的工作区之上。这样做的好处是可以更精细地控制哪些部分应当保留下来以及如何解决可能出现的问题。 ```bash # 创建临时分支用于保存即将被恢复的内容 git checkout -b temp-recovery # 应用之前被 revert 掉的一系列提交(假设是从 A 到 B) for rev in $(git log --reverse --format=%H A..B); do \ git cherry-pick $rev; \ done; # 解决任何产生的冲突后... # 将修复后的成果并入原定的目的地分支内 git checkout main-target-branch git merge temp-recovery ``` 这种做法适合于需要精确调整某些细节或者对现有流程做出较大改变的情况之下[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值