从头好好梳理一下我的 git 使用习惯,记录一下。
已经被Git跟踪的文件不会受到 .gitignore 的影响。要忽略已经被提交的文件,可以使用 git rm --cached <file>命令将其从版本控中移除。此命令还会保留本地仓库的内容。
git管理项目内容,针对文件夹的名字和文件名是没有大小写敏感性的。
场景:第一次创建文件夹或文件名字后,将其add(暂存)后(只要是仓库形成追踪),再将文件夹或者文件名称修改大小写,git记录的还是第一次提交时的名字,若其他文件引入路径是更新后的路径,会导致报错。
解决:将目标文件提出项目(更改原始路径),提交更改(只要是仓库形成追踪),在项目外面将名称修改好,再放回原来的路径,提交更改就可以了。
场景:在feat/A上提交并推送至远程仓库之后,开始开发B功能,但是这个时候由于粗心,导致没有做切换到main,然后pull,然后checkout -b feat/B,所以此时我依然在feat/A上。开发完B功能之后,不小心commit了,但是没有push到远程仓库,请问此时我该如何做才能弥补错误,使提交符合规范?
解决:
# 使用reset将提交内容返回到工作区 git reset HEAD~ # stash feat B的内容 git stash # 切换至主分支并拉新代码 git checkout main && git pull # 创建B分支 git checkout -b feat/B # 将修改内容放到B分支上 git stash pop # 提交并推送 git add . git commit -m "feat: B" git push origin HEAD
场景:
在feat/A上提交并推送至远程仓库之后,开始开发B功能,但是这个时候由于粗心,导致没有做切换到main,然后pull,然后checkout -b feat/B,所以此时我依然在feat/A上。开发完B功能之后,不小心commit了,并且push到了远程仓库,请问此时我该如何做才能弥补错误,使提交符合规范?假设错误commit的hash值为:abc123
解决:
- feat/A已经被合并到主分
# 回到主分支,拉取最新代码,创建然后切换到一个名为fix/revert-A的分支 git checkout main && git pull && git checkout -b fix/revert-A # 在fix/revert-A分支上使用revert abc123覆盖B功能代码 git revert abc123 # 使用rebase抹平此次revert记录 git log # 找到xyz456 git rebase -i xyz456^ # 表示将xyz456这个commit之后的提交合成一个 # 根据自己的需要填表,保存,关闭;其实就是把自己不想要的commit前面的pick改成fixup # 将fix/revert-A分支推送到远程仓库并联系组长合并到主分支 git add . && git commit -m "fix: revert" && git push origin HEAD # 切换至主分支并拉新代码 git checkout main && git pull # 创建B分支 git checkout -b feat/B # 使用cherry-pick将abc123提交记录复制一份到B分支上 git cherry-pick abc123 # 提交并推送 git add . git commit -m "feat: B" git push origin HEAD- feat/A没有被合并到主分支
# 在feat/A上生成一次revert提交记录,覆盖B功能代码 git revert abc123 # 使用rebase抹平此次revert记录 git log # 找到xyz456 git rebase -i xyz456^ # 表示将xyz456这个commit之后的提交合成一个 # 根据自己的需要填表,保存,关闭;其实就是把自己不想要的commit前面的pick改成fixup # 将revert之后的本地分支推送到远程仓库 git push origin HEAD -f # 切换至主分支并拉新代码 git checkout main && git pull # 创建B分支 git checkout -b feat/B # 使用cherry-pick将abc123提交记录复制一份到B分支上 git cherry-pick abc123 # 提交并推送 git add . git commit -m "feat: B" git push origin HEAD
2589

被折叠的 条评论
为什么被折叠?



