我在实际开发项目中 git 的灵活运用技巧
1 - 由于每次开发时,都需要更改相关文件(项目的特殊性,env文件和debugger工具特殊使用方式,以及有些功能在模拟器中无法正常运行,只能代码跳过),为了不用每次频繁更改
我把一次更改好的内容建立了一个分支叫做 microl/editFilesForDev 并且提交了 commit,
commit id 为:06c4ee71f102308f4ced9476766c2dea22d628ba
以后每次开发新任务时,只需要先把这条commit 通过cherry-pick指令摘取到新分支上便可直接进行开发了,不用重复修改那些文件了
实际案例:
比如,我现在处在一个叫做AAA-SSS的项目上,并接到一个new task,该task在 DevOps 上建立的 ticket 为 【453234 — [AAA] xxx UI need to change】
那么我在平时开发过程中会涉及到的git操作一般有:
(1)切换到主分支 git checkout master ,然后拉取最新代码 git pull
(2)base 主分支(最新)来创建并切换一个新分支:git checkout -b fix/AAA-SSS-453234;注意-我现在已经切换到新分支上了,然后就能把提前准备好的开发文件commit cherry-pick 过来了:git cherry-pick 06c4ee71f102308f4ced9476766c2dea22d628ba;这个commit id就是上面提到的那条,(然后记得要reset到该分支的前一条最新commit,确保这条开发临时更改的commit是处于未提交的状态)
(3)开发之前要记录下当前最新的一条commit id,比如记录下这条commit id — 72a2dba4af7d1005f211cf1381652ec66d5968a4
(4)因为修改代码过程中,我很可能为了记录自己的修改记录,频繁提交很多commit,但是这在提交PR的时候是不被允许的,如此一来我在最后提交PR的时候就能通过 reset 指令回到最出记录好的 commit 上:git reset 72a2dba4af7d1005f211cf1381652ec66d5968a4,然后重新提交一份完整的新的 commit: [1] - git add . => [2] - git commit -m “fix: 453234 — [AAA] xxx UI need to change”;
(5)这是就会把之前我频繁提交了好多条的commit记录都给覆盖掉了,现在就只会只有一条刚提交的最新的commit了
(6)强制推送到远程分支上:git push origin fix/AAA-SSS-453234 —force; 因为之前开发的时候,我很可能我已经把commit记录都推送到远程分支上了,因为本地保存不一定可靠(万一电脑出问题了),那么此时本地分支和远程分支的commit就会不一致有冲突,所以我需要使用 —force 指令来把本地分支的强制推送到远程分支上
(7)这样一来最后提交的PR就只会看到只有一条commit了,review代码的人就不会说什么了