git 用的比较少, 所以来询问一下大佬们,我遇到如下场景有什么方式可以处理。 目前项目只有一个分支,master 分支。 假如我目前在开发当前项目的 V1.2 版本,但是 V1.1 版本有 BUG 时,我需要修改对应的代码。 但是 V1.2 版本的新功能不可能在一次 BUG 修复中就发布出来。那么此时我应该怎么处理 V1.2 版本新功能的代码呢?
可以不通过新建一次分支的情况下处理嘛。 [这是重点哦]
1
fiypig 2022-04-05 21:05:02 +08:00 via iPhone
同问
|
2
dvsilch 2022-04-05 21:10:55 +08:00
在本地新建一个分支推到 master 都不行吗?
|
3
gengchun 2022-04-05 21:12:11 +08:00
用分支
https://git-scm.com/book/en/v2/Git-Branching-Branches-in-a-Nutshell Because a branch in Git is actually a simple file that contains the 40 character SHA-1 checksum of the commit it points to, branches are cheap to create and destroy. Creating a new branch is as quick and simple as writing 41 bytes to a file (40 characters and a newline). |
4
pagxir 2022-04-05 21:14:20 +08:00 via Android 1
这个跟 git 没关系吧,这个是分支管理的问题,即使你换成 SVN 也一样需要考虑怎么去管理分支,什么时候合并分支
|
5
marat1ren 2022-04-05 21:16:04 +08:00 via iPhone
假设 v1.2 还是在你的本地 master ,那么你可以先把 v1.1 的修复 push 到 master 上去。然后 rebase 有修复的 master 。第二种情况,如果 master 上已经是 v1.2 了,那只能建议新建一个基于 v1.1 的 branch ,把修复 push 到这个新 branch 上。
|
6
CEBBCAT 2022-04-05 21:19:48 +08:00 via iPhone
你要是实在想问,那么 stash 可以解决你的问题,rebase+checkout 也许也可以
但是你这么做,用的还是 git 吗?以上操作有较高的丢失代码的风险。你未来开发到 2.0 的时候,又该要怎么修复 1.1 的 bug 呢? |
7
nightwitch 2022-04-05 22:09:06 +08:00
先从你当前远程的那个 commit id 分叉一个分支 v1.1 ,然后修复 bug ,push 到远端。
本地的 master 有一堆 v1.2 的代码还没实现完,rebase 到修复完 bug 的分支上。 |
8
christin 2022-04-05 22:15:45 +08:00 via iPhone
只有一个分支万一出问题怎么办 建议多开几条分之,又不要钱
|
9
msg7086 2022-04-05 23:57:09 +08:00 1
不新建分支还用什么 git 。你就算是新建文件夹( 1 )那也是分支啊。
|
10
zkd8907 2022-04-06 00:12:12 +08:00
在一些管理的方式下 v1.1 应该是一个 tag ,它会指向到 master 上的一个 commit 。如果 v1.2 在 master 上开发并且又要修改 v1.1 的 bug ,可以直接从 v1.1 的 tag 拉一个新的 hotfix 分支进行开发修复,修复后通过打 v1.1.1 tag 进行发布,同时将 master 也 rebase 到 v1.1.1 上,这样 master 也会包含这个改动。
|
11
FieldFarmer 2022-04-06 01:09:10 +08:00 via Android
另开一个目录重拉远程 v1.1 版本的项目代码,修复后推到远程。
v1.2 commit 后,git pull ,有冲突解决冲突,没冲突继续开发 |
12
AItsuki 2022-04-06 01:37:26 +08:00
异想天开,我想不出能比新建一个 bugfix 分支更简单的方式。
|
13
duke807 2022-04-06 04:33:21 +08:00 via Android
op 最大的問題其實是 git 用的不熟,我的觀念一直是:git 必須要非常熟悉,才能提高工作效率,否則反而會降低工作效率,搞不好還會把自己坑死
|
14
dangyuluo 2022-04-06 05:39:29 +08:00
@zkd8907 正常情况下应该有一个 release-v1 的分支,然后 v1.1 这个 tag 应该指向 release-v1 上的一个 commit 。这时把修复 push 到 release-v1 上,再创建一个 v1.1.1tag 就可以了。定期的,相关 fix 应该被 cherry-pick 到 maste 上
|
15
caeger 2022-04-06 08:33:22 +08:00 via Android
git 创建新分支要开始收费了?
|
16
SenLief 2022-04-06 08:38:12 +08:00
git 的分支开销非常的小啊,随意开新分支就好了。
|
17
caixiangyu17 2022-04-06 08:41:41 +08:00
Trunk Based development + feature toggle flag
我们就是只有一个分支,所有人直接 push master ,直接 CI/CD 上生产环境,所以这里对 CI/CD 的各种测试要求很高。 如果不想这么麻烦,可以 CI/CD 直接发布到 test 服务器上,先测,然后手动部署到 prod 上 |
18
tedzhou1221 2022-04-06 09:04:33 +08:00
不新建分支,你可以把修复好的代码 cherry-pick 到 v1.2 分支上。
我们还有同事试过,在 v1.1 上修复代码并提交后,再把 v1.1 合并到 v1.2 |
19
chengyiqun 2022-04-06 09:36:26 +08:00
不用分支还不如不用 git 。git 最大的优点就是分支建立代价很小。
|
20
raykle 2022-04-06 09:42:02 +08:00
不新建分支你用什么 git
|
21
SmiteChow 2022-04-06 10:01:08 +08:00
在服务器上复制一份代码现改,然后可以生成 patch 文件,最后手动把所有服务器上打 patch 补丁。
|
22
Jwyt 2022-04-06 10:07:48 +08:00
学一下 git 吧,真不难
|
23
lizuoqiang 2022-04-06 10:20:34 +08:00
都用 git 了,还是看看 git 工作流吧
|
24
daimubai 2022-04-06 10:42:44 +08:00
stash 可以解决,把 v1.2 的先暂存
|
25
james2013 2022-04-06 10:59:15 +08:00
不新建分支是处理不了的,难道要把 1.2 版本的所有提交记录还原么?
这种情况,在 1.1 版本最后 1 次 commit 打个 tag,用新分支修改 bug 后,再把这个修复版本打 tag |
26
ganbuliao 2022-04-06 11:04:20 +08:00
git flow 看一下吧
|
27
superfatboy 2022-04-06 11:10:53 +08:00
git flow xiao 一下吧
|
28
konakona 2022-04-06 11:16:48 +08:00
你们是一个分支打了 2 个 tag 来进行版本管理?
那你先基于 v1.1 的标签创建分支,然后在这个分支上创建一个新的 bugfix or hotfix 分支(这样可以独立 commit id 和文件树),修复完后文件数量应该不多就几个吧? ``` git checkout v1.1 ...此时修改文件 A 、B 、C git add A B C git commit -m '修复了 xxx 问题' git status #可以看到只有 3 个文件变动 git -a v1.1.1 -m '修复了 xxx 问题' # 打一个新的 tag # 接下来要将修改的这 3 个文件的改动合并到 master 分支 git checkout master git merge v1.1.1 ``` |
29
konakona 2022-04-06 11:18:13 +08:00
上面补充下,我提议的跟我打的命令是 2 个做法。
提议的是用一些 git flow ( flow 是一个统称,代表流程,比如有 git-flow gitlab-flow GitHub-flow 等等)的方式管理版本。 如果不用 flow ,就是直接代码片段里那样也可以的。 |
30
why1001 2022-04-06 11:28:59 +08:00
不创建分支就是 v1.2 先扔到暂存,改完 bug ,再恢复
|
31
leafre 2022-04-06 11:40:58 +08:00
stash 能解决,但是分支用起来啊
|
32
tuutoo 2022-04-06 16:54:38 +08:00
看一下 git 工作流 如何管理和使用分支。基本上不会在 master 上直接开发的。至少会新建 dev, feature, hotfix 或者 bugfix 这种分支。一言两语说不清。 master 永远对应生产库的最新版,其他的都 checkout 分支出来开发新功能或者 bugfix 。完了再合并回分支。。。
bugfix 或者新功能上线后,其他正在开发的分支再从 master 合并(merge)或者变基(rebase),这个 rebase 也不能乱用(特别是多人开发同一分支的时候)。用之前先好好看一下。。。 |
33
findex 2022-04-06 17:00:43 +08:00 via iPhone
rebase 即可
|