当前版本是 1.0 ,现在团队在 dev_1.1 的分支上提交代码,但是因为一些原因,原计划的一些功能,不能在 1.1 版本上线,但是部分代码已经 merge 进了 dev_1.1 分支里面。这个时候一般怎么操作?
1
rlds 166 天前
回滚
|
2
flyqie 166 天前 via Android
手动 revert 那个 commit?
|
3
rlds 166 天前
同时可以在了解下 cherry pick
|
4
yujianwjj OP cherry pick 要重新创建一个分支,然后才能 cherry pick ,现在是 dev_1.1 还是下个要上线的分支
|
5
codeMore 166 天前
如果部分已经合进去的代码是在提交的最后几次,那可以直接 reset --hard 到前面的提交,如果在中间,那从 1.0 版本创建出一个新分支叫 dev_1.1_new ,然后从 dev_1.1 里 cherry-pick 出需要的提交到 dev_1.1_new 咯,后面就上线 dev_1.1_new 咯
|
6
chf007 166 天前
除了楼上的办法,如果有系统或人工记录了特性分支,可以新建一个 dev_1.1 ,去掉不上的功能再合一遍么。这种最好有工具来完成。
|
7
v2kt 166 天前
git reflog 恢复
|
8
Nazz 166 天前
git reset --hard $hash && git push -f
|
9
IamBack 166 天前
git rebase -i 可以交互式的修改某些提交,将你想剔除的提交移动到最上面。
然后再用楼上说的办法,reset --hard |
10
kucy 166 天前
从上一次提交,新建一个分支发到线上,这个分支就作为这次发布用一次
|
11
crysislinux 166 天前
如果是新的功能,再添加个 feature toggle 把新功能关了好了。
|
12
IMelon 166 天前
git reset 或者 git revert 会撤销修改,但是有可能撤销你想要保存的部分,结合 cherry pick 能够恢复部分修改。
因此我认为 git reset 用来撤销历史中的一段提交,再用 cherry pick 把想要的提交恢复过来。 当然,基础是一定要做好备份。 |
13
guanzhangzhang 166 天前
reset
rebase 后把 pick 换成 d 上面俩任选其一 push -f 或者可以 revert ,但是会多 commit |
14
nothingistrue 166 天前
留历史:git revert 不想要的那些提交。很简单的一个操作,GUI 都提供的,命令都不用打。
洁癖:废了 dev_1.1 ,跳到 dev_1.2 。 作死:reset --hard && push --force 。 |
15
unco020511 166 天前
revert 或者 reset
|
16
cirzear 166 天前
revert commit
|
17
diagnostics 166 天前
revert commit
|
18
geelaw 166 天前
假设 dev_1.1 是
B -> C1 -> C2 -> C3 -> C4 -> C5 = dev_1.1 并且假设 C2 、C4 要被撤销,那么 git checkout -b new dev_1.1 git revert --no-commit C4 解决冲突,并 git add 好 git revert --no-commit C2 解决冲突,并 git add 好 git commit --edit 编辑消息,说明要暂缓某功能,并且实际操作是撤销了 C4 、C2 ,并记录冲突是如何解决的。 git checkout -b dev_1.1_bak dev_1.1 git merge -s ours --edit new 编辑消息,说明这是为了恢复暂缓功能的代码,同时实现“当前 commit 是撤销后 commit 的后代”和“blame 可以得到正确历史记录”。 git push git checkout dev_1.1 git merge --ff-only new git push git branch -d new 到此为止: - dev_1.1 是暂缓功能代码删去的状态 - dev_1.1_bak 是没有删去的状态,且是 dev_1.1 的后代 - 如果 dev_1.1 继续开发,可以在 dev_1.1_bak 上 merge dev_1.1 ,并且 merge 的时候不会删去暂缓功能的代码 |