请教各位 V 老师
用网上的教程:
1 、git checkout master 2 、git merge --squash 分支名称 3 、git commit -m '汇总后的一次 commit 内容'
这样是可以,不过从此我的分支和 main 的就分开了。
1
z1829909 2023-09-11 19:09:43 +08:00
1. 在你的分支 git reset --soft hashxxx 回退到合并前的那个提交
2. git add . + git commit -m 'xxx' + git push --force 这样你的这个分支的后面几个提交合成一个了 |
2
horizon 2023-09-11 19:15:27 +08:00 1
git rebase
|
3
xubeiyan 2023-09-11 20:45:16 +08:00 via Android
这个问题那些 git 命令行最棒的人就跟没看见一样,笑死,切到需要的分支上,用 tortoisegit 查看提交记录,多选若干个提交,压扁成一个提交,完了,再看 merge 或者 rebase 到 master 分支上
|
5
hanxiV2EX 2023-09-11 23:34:49 +08:00
我只会用 git rebase -i HEAD~3 ,3 是要合并几条 commit ,然后在 vim 里编辑提交信息,会有提示的,第一条不动,其他的改成 s (squash) ,然后保存,然后再改 commit 信息就行了。
|
7
dayeye2006199 2023-09-12 09:12:04 +08:00 via Android
rebase interactive 压一块儿
|
9
JackyCDK 2023-09-12 09:35:07 +08:00
直接 rebase 呗
|
10
hexiaowu1993 2023-09-12 09:42:47 +08:00
git reset --soft 跟 git rebase -i 都可以实现你的要求,压缩 commit 后,在强推到你特性分支,然后在合并到主分支,这样就只有一个 commit 了
|
11
loveDiu4ever 2023-09-12 10:14:11 +08:00
rebase -i 然后根据选项进行筛选合并
|
12
kfansup 2023-09-12 10:24:34 +08:00
rebase -i master ,然后提交前 保留一个初始 commit ,squash 其他 commit 。
|
13
dif 2023-09-12 10:39:06 +08:00
不想分开就 rebase ,各有优缺点。统一规范就行。
|
14
anonym233 2023-09-12 11:01:32 +08:00
如果多次提交基于以前的 master ,那就 git reset --soft 合并比较方便。如果多次提交不连续,那就需要 git rebase -i 调整顺序并合并。 合成一个 commit 以后,可以 git rebase master ,然后再到 master 分支下 merge 这个分支,这样的话 master 合并是无痛的,并且你的分支也是基于最新的 master ,还是紧密的联合在一起,可以继续在这个分支上开发。
|
15
droppedbytech 2023-09-12 11:16:56 +08:00
@xubeiyan 不是反对你哈,我知道 gui 能这样操作,非常方便;但对习惯 git cli 的人来说,这套操作的负担和敲命令其实差不多,而且粒度还更精细,想 reword 哪个 commit 都是可以的。而且你看下面的回复都是用命令行的操作方式介绍,怎么就“跟没看见一样”呢
|
16
shawndev 2023-09-12 11:43:18 +08:00
在你检出的新分支上,合并多次提交之后会造成哈希链表的分叉,所以所谓的分开了是必然结果。
只是这种情况可以不必检出新分支操作,在 main 分支 rebase 之后可以选择 force push 。 |
17
mengdodo 2023-09-12 11:58:51 +08:00
rebase 变基的坑有人踩过没😄
|
18
aroa 2023-09-12 14:45:21 +08:00
@droppedbytech 你真知道?我好几个 gui 用下来只有 tortoisegit 支持这个功能
|
19
Z5460520 2023-09-12 16:30:41 +08:00
我不知道你是用的什么 IDE 开发工具。我用的是 pycharm 。首先确认你的当前分支。你现在肯定已经有很多个 commit_id 。现在你可以基于你的当前的分支,再新建一个分支。然后 pycharm 会直接切到你新建的分支上。然后你选择你从 master 分支切换的那个节点(非常重要),然后选择重置到那个节点。你所在的当前分支的 commit 暂存区会有你所有的改动。然后提交 commit 。你的这个新的分支就可以合成一个 commit,然后将这个新分支提交合并到主分支上了。没有什么指令。
|
20
droppedbytech 2023-09-12 16:52:19 +08:00
@aroa 别的 GUI/TUI 不清楚,我只是在很久以前用过小海龟,但是 lazygit 是支持的,我感觉没道理 TUI 都支持的东西 GUI 不支持吧... 不过我还是更习惯 rebase -i ,然后自己编辑,可能我远程机开发比较多习惯了
|
21
iosyyy 2023-09-12 17:21:35 +08:00
|
22
xubeiyan 2023-09-12 17:53:28 +08:00 via Android
@droppedbytech 您想想,与其去教一个 git 新手去学习 git rebase -i 这种交互式变基操作,不如直接教他用 GUI 工具快得多。你看看下面的回复,1.如果要从中间两个提交之间删怎么办?需要 rebase -i <start-commit> <end-commit> ,2.在编辑信息的时候是没法看到每个提交修改了哪个文件,除了多开 CLI 。reset 的都洗洗睡吧,不屑于和他们讨论这个问题
|
23
Ib3b 2023-09-12 19:32:53 +08:00
公司内部平台上有一个勾选压制提交的功能,要自己操作还真不会😅
|
24
droppedbytech 2023-09-14 10:55:56 +08:00
@xubeiyan 这点我是同意的,GUI 对于大多数人,或者说至少是入门者/临时使用一下的,就是更友好,否则现代带图形界面的操作系统不可能几乎垄断个人电脑市场了,CLI 终究还是特定人群导向的
|