2023.7.10 入职距今已经两个月零 3 天了,培训课程十分紧张也没来得及做一些技术的思考和整理。主要是下班回家后只想躺着玩手机,周末持续性出去撒欢。 但只学习不思考和整理是程序员的忌讳。培训课程结束后,会对这两个月的培训时间进行思考,同时对未来该怎么更好的工作也进行一个思考,甚至包括如何更好的休息锻炼来保持充沛的精力。
回到正文,git
是程序员写框架和交流代码时的必要工具,而过于贫瘠的实操经验导致我真的不会这玩意。尤其是多人协作 pull, merge
或者 reset
时,时常把代码搞的乱七八糟。所以在这里记录 git
的踩坑记录。
git 开发流程
首先克隆仓库
1 | git clone git@xxx.git |
创建本地分支,并对应远程分支
1 | git branch -a // 查看分支 |
获取新分支
clone
仓库的 1 天后,有新分支提交到了远程仓库,所以本地没有这个分支。为了查看新分支的代码,需要更新分支:
1 | git remote update origin -p |
暂存修改
在新分支开发代码时,遇到紧急任务需要切换到其他分支修复漏洞。但是新分支的代码才写了一点点还没有 commit
,如果直接 git checkout
会报错,因为新分支的修改没有被存下来或提交。此时可以暂存修改:
1 | git stash // 暂存当前未提交的更改 |
当你完成其他工作并切换回原分支时,可以使用以下命令还原暂存的更改:
1 | git stash pop |
不建议以下的操作,因为这会直接放弃当前分支的修改:
1 | git checkout -f <branch_name> // 切换到另一个分支并丢弃未提交的更改 |
git
开发时,A 分支的代码泄漏到了 B 分支 ?
问题背景
当时想实现 master
分支只有 README.md, .gitignore, 3rdparty
等公共文件。
- 对于任务一,新建
dev1
分支,并在dev1
文件夹里面写代码 - 对于任务二,新建
dev2
分支,并在dev2
文件夹里面写代码
这样 dev1
和 dev2
分支的代码位于不同文件夹,互不干扰。最后全部合并到 master
分支的时候,也不会产生冲突。
错误操作
在实现期间出现了一个漏洞,当完成 dev1
任务的代码后,直接在 dev1
分支下 git checkout -b dev2
,这样就会发生:dev2
分支下有 dev1
的代码,不是很优雅。
当时培训课程的进度比较紧张,也没有刻意去关注这个问题。只是在 dev2
分支下手动删除了 dev1
文件夹的代码,这样在 git status
的时候会看到很多 delete
信息,且会随着 dev2
分支的提交而提交到 gitlab
中,merge
时会看到很多无用的删除文件信息。
正确做法
随着课程的陆续学习,框架规模越来越大,代码文件也越来越复杂。由于自己的 git
实操很少,担心 git
误操作后导致分支或文件过于混乱。又回过头来重新看这一问题,在本地进行一些简单的实验后发现了正确做法。
在完成 dev1
分支的代码并提交后,应该 git checkout master
,在 master
分支下新建 dev2
分支,这样才能实现 dev2
分支不含 dev1
的代码,保证提交代码时的信息足够干净。
临时代码推送
临时创建了一个文件夹复现了某个问题,需要把这份代码提交到某个仓库。在 git init
之后增加远程仓库:
1 | git remote add origin git@xxx:xxx.git |
因为是临时新建的仓库,所以目前处于 master
分支。执行下面命令,将本地的 master
分支推送到远程的 test
分支(远程没有的话会自动创建):
1 | git push origin master:test // 不加 master: 会报错,因为本地没有 test 分支 |
修改错别字,不值得重新 commit
首先修改小错误,然后:
1 | git add . |
如果此时直接 push
会报错,因为 git status
显示并没有新的内容。如果是提交到自己的分支,在不影响他人的开发的情况下可以直接:
1 | git push origin master:test -f |
这样仓库上只显示一次 commit
记录。