这些Git事故灾难, 你经历过几个?

💡 原文中文,约3200字,阅读约需8分钟。
📝

内容提要

本文分享了工作中遇到的Git场景问题及解决方法,包括确保本地分支最新、使用revert回退commit、cherry pick选择特定commit、处理抵触、使用stash暂存代码、使用核弹洗地删除代码、设置git别名。作者总结多年实际工作经验,欢迎读者分享Git问题和经验。

🔎

延伸解读

合并与回退的陷阱

文章通过一个场景说明:合并分支后若用revert撤销,再次合并时可能提示已是最新,因为merge比较的是commit是否存在,而非内容是否被撤销。这提醒我们,revert后若想重新引入更改,需用cherry pick或revert该revert,不能简单再次merge。

大规模冲突的简化策略

当分支与主干严重分叉、冲突文件极多时,文章建议先将多个commit压缩(squash)或reset后重新提交,减少提交数量;同时可删除本地过时分支重新拉取,再cherry pick关键提交。这能避免逐个解决冲突,但需注意操作前备份,防止丢失代码。

stash的隐藏风险

stash默认只保存已跟踪文件的修改,新建文件不会被暂存,需加--include-untracked参数。取出时推荐用stash apply而非pop,因为pop会删除暂存记录,一旦后续出错难以恢复。这些细节能避免代码意外丢失。

别名与误操作防范

作者分享因别名设置过短(如单字母d)导致误删代码的经历,建议使用更复杂的别名(如ddd)来降低误触风险。同时提到git checkout .和git clean -fd可快速丢弃所有修改和新建文件,但操作前务必确认,因为恢复可能依赖reflog且并非总能成功。

❓

Q&A

如何确保本地的dev分支是最新的?

可以直接删除本地dev分支并重新切换,以获取最新内容。

使用git revert时需要注意什么?

使用git revert回退commit时需注意merge指令的影响。

什么是cherry pick,它有什么用?

cherry pick可以选择特定的commit,不受撤销影响,专注于单个提交的操作。

如何处理复杂的代码抵触?

可以使用squash将多个commit合并为一个,简化抵触处理。

stash命令的使用注意事项是什么?

stash只保存修改的文件,不会保存新建的文件,需使用参数--include-untracked。

如何快速恢复代码并删除新建文件?

可以使用git checkout .和git clean -fd命令来快速恢复代码并删除新建文件。

🏷️

标签

➡️

继续阅读