Git 将中间提交折叠为以后的提交,而不是更早的提交
假设我有三件事Git 将中间提交折叠为以后的提交,而不是更早的提交,git,github,merge,version-control,Git,Github,Merge,Version Control,假设我有三件事 A-->B'-->B 提交B'表示一种中间状态,其中工作未完成,测试未通过。我可能已经进行了提交B',以便从在我的家用机器上工作切换到我的工作机器上 假设我在一个主题分支上,除了我,没有人在看这个分支。但是这三个提交都在远程,否则我无法使用B'将更改从一台机器传递到另一台机器 如果我执行git-rebase-I(或者如果A是第一次提交,那么git-rebase I--root),并且我选择fixup或squashcommitB',那么B'中的更改将被折叠到commitA 但这并不
A-->B'-->B
提交B'
表示一种中间状态,其中工作未完成,测试未通过。我可能已经进行了提交B'
,以便从在我的家用机器上工作切换到我的工作机器上
假设我在一个主题分支上,除了我,没有人在看这个分支。但是这三个提交都在远程,否则我无法使用B'
将更改从一台机器传递到另一台机器
如果我执行git-rebase-I
(或者如果A
是第一次提交,那么git-rebase I--root
),并且我选择fixup
或squash
commitB'
,那么B'
中的更改将被折叠到commitA
但这并不合适。我希望提交A
和B
来表示工作中合理的检查点,在这些检查点中,更改不会处于一种只有我才能理解的半途而废的状态。如果我修改了B'
commit,那么commitA将保留B'
以前所做的半成品更改。我希望提交B'
被折叠成B
,因为B'
代表了提交B
的中间工作
可能的解决办法:
1a。只需离开commitB'
,并将其命名为“dummycomit”,这样就不会有人注意它了。它在我的主题分支上(即使它被推到了远程),所以谁在乎呢
1b。如果我认为人们可能会看我当前的主题分支并判断我不专业,那么给B'
它自己的分支,我确信没有人关心它,然后只要B
准备好,提交它并将其合并回原始分支,然后删除临时分支。看来
BRANCH DELETED
B' --> B''
/ \
A ---------> B
BRANCH REMAINING
在我提交B
之前,请先删除B'
。因此,如果B'
是为了切换机器而做的,一旦我到达另一台机器,立即git reset--soft
,然后一旦完成更改,进行提交B
,然后git push--force
到远程,然后如果我回到第一台机器,使用git pull--force
。以这种方式“重写历史”是很不幸的,而且经常使用--force
似乎是一种危险的习惯
drop
commitB'
而不是squash
或fixup
。Git似乎没有很好地处理这一点,甚至当A-->B'-->B
显然是快速变化时,也需要合并解决方案。同样,您正在重写历史,并且需要多次使用--force
如果两台计算机位于同一网络上,请改用文件共享。我觉得这很恶心,而且不灵活
做其中一件事,并与之共存;这是品味的问题,你不能取悦所有人
请记住,这个问题的目的不是为了就品味问题展开争论;这是为了发现我没有想到的优点和缺点,或者让我接触到我没有想到的选项
相关职位:
使用git-rebase-i
将B
挤压成B'
。使用squash
指令,以便有机会编辑提交消息
操作完成后,其他人(和您)只会看到一个新的提交B“
,B
和B'
很快就会被忘记,您不必担心自己“作弊”并将B
折叠到B'
中,而不是反过来
当然,您必须强制推送分支,但这并不重要,正如您所说,您是唯一查看它的人。在这种情况下,频繁的强制推送根本不是坏习惯。使用git-rebase-i
将B
挤压到B'
中。使用squash
指令获得操作编辑提交消息的portunity
操作完成后,其他人(和您)只会看到一个新的提交B“
,B
和B'
很快就会被忘记,您不必担心自己“作弊”并将B
折叠到B'
中,而不是反过来
当然,你必须用力推树枝,但那没关系,正如你所说,你是唯一一个看着它的人。在这种情况下,频繁的强行推压根本不是坏习惯