Git使用-如何兼顾日常开发和紧急问题修复

2024/05/22 | 字数1188 | 阅读3分钟


做过一段时间的软件开发后,程序员伙伴们基本上都会遇到这样的情况:你正在开发新功能,老板说有一个紧急问题需要修复,让你尽快处理一下。这个时候你要怎么做?冲老板一顿输出,然后乖乖的修复问题,还是继续开发现在的功能,管他三七二十一。恐怕你没得选,不过,虽然在老板面前没得选择,但是在如何不影响现在的工作,又能修复问题上,你还是有得选的,而且不止一个。

选择1

换一个目录,重新下载一份代码,在新代码上修复问题,然后提交。这种方法简单直接,但如果代码库很大的话,下载也需要点时间(可以参考《高效Git-如何快速下载代码》快速下载)。

bash
1
2
3
4
5
6
7
8
mkdir bugfix && cd bugfix
git clone --depth 1 ssh://xxx.git

## coding

git add .
git commit -am "fix: #NNN XXXX"
git push

选择2

临时保存现在的代码,然后从库上获取最新代码,创建一个新分支修复问题,然后提交。这种方法也勉强可以接受,只是工作目录下的文件会被替换,而且编译的中间结果文件也都没用了,需要重新编译。

bash
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
## 保存现有修改
git add .
git commit -am "temporary saved point"
git checkout -b local_dev HEAD

## 获取最新代码,然后基于主线,创建bugfix分支
git fetch 
git checkout -b bugfix origin/master

## coding

git add .
git commit -am "fix: #NNN xxxx"
git push origin HEAD:master

## 切换到之前的分支继续工作
git checkout local_dev
git branch -D bugfix

选择3

在现有代码基础上创建一个新的worktree,在这个基础上修复问题,然后提交。这种方法相信大部分人都没用过,甚至都没听过。这是git专门为这个场景增加的一个新特性,我们今天重点介绍的内容就是它。可以通过下面的命令实现:

bash
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
## 获取最新代码,创建新的worktree:bugfix
git fetch origin
git worktree add ../bugfix origin/master
git worktree list

## 进入到bugfix,解决问题
cd ../bugfix
# coding
git add .
git commit -m "fix: #NNN xxx"
git push origin HEAD:master

## 回到原来的项目文件夹,删除bugfix工作区
cd ../your-project/
git worktree remove bugfix
## coding
git add .
git commit -m "my work on master"

上面的代码创建了一个新的工作区worktree,这是另外一个bugfix目录,这个目录下是主线最新的代码,你在这个目录下修改代码,然后提交到远端仓库。之后这个bugfix目录就没用了,可以回到原来的工作目录,然后删除bugfix。继续原来的开发。是不是很方便?

还有后续

上面的三种方案都还有后续操作,那就是本地开发完成后,在push到远端服务器之前,需要rebase最新代码,可能会出现冲突,关于如何rebase,在这篇文章《Git常见问题-如何解决冲突》中有描述。

上一篇:Git使用-忽略那些无关文件 下一篇:Git使用-多仓库管理之submodule

【文章不错,鼓励一下】