这些Git事故灾难, 你经历过几个?
内容提要
本文分享了工作中遇到的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命令来快速恢复代码并删除新建文件。