0%

git 实操记录

2023.7.10 入职距今已经两个月零 3 天了,培训课程十分紧张也没来得及做一些技术的思考和整理。主要是下班回家后只想躺着玩手机,周末持续性出去撒欢。 但只学习不思考和整理是程序员的忌讳。培训课程结束后,会对这两个月的培训时间进行思考,同时对未来该怎么更好的工作也进行一个思考,甚至包括如何更好的休息锻炼来保持充沛的精力。

回到正文,git 是程序员写框架和交流代码时的必要工具,而过于贫瘠的实操经验导致我真的不会这玩意。尤其是多人协作 pull, merge 或者 reset 时,时常把代码搞的乱七八糟。所以在这里记录 git 的踩坑记录。

git 开发流程

首先克隆仓库

1
git clone git@xxx.git

创建本地分支,并对应远程分支

1
2
3
git branch -a         // 查看分支
git checkout -b local_branch remote_branch // 切换分支并对应远程分支

获取新分支

clone 仓库的 1 天后,有新分支提交到了远程仓库,所以本地没有这个分支。为了查看新分支的代码,需要更新分支:

1
git remote update origin -p

暂存修改

在新分支开发代码时,遇到紧急任务需要切换到其他分支修复漏洞。但是新分支的代码才写了一点点还没有 commit,如果直接 git checkout 会报错,因为新分支的修改没有被存下来或提交。此时可以暂存修改:

1
2
git stash                  // 暂存当前未提交的更改
git checkout <branch_name> // 切换到另一个分支

当你完成其他工作并切换回原分支时,可以使用以下命令还原暂存的更改:

1
git stash pop

不建议以下的操作,因为这会直接放弃当前分支的修改:

1
git checkout -f <branch_name> // 切换到另一个分支并丢弃未提交的更改

git 开发时,A 分支的代码泄漏到了 B 分支 ?

问题背景

当时想实现 master 分支只有 README.md, .gitignore, 3rdparty 等公共文件。

  • 对于任务一,新建 dev1 分支,并在 dev1 文件夹里面写代码
  • 对于任务二,新建 dev2 分支,并在 dev2 文件夹里面写代码

这样 dev1dev2 分支的代码位于不同文件夹,互不干扰。最后全部合并到 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
2
git add .
git commmit --amend

如果此时直接 push 会报错,因为 git status 显示并没有新的内容。如果是提交到自己的分支,在不影响他人的开发的情况下可以直接:

1
git push origin master:test -f

这样仓库上只显示一次 commit 记录。

感谢在上学期间打赏我的朋友们。入职后不太缺钱了,所以明人不说暗话,我,秦始皇,打钱。

欢迎订阅我的文章