Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 将中间提交折叠为以后的提交,而不是更早的提交_Git_Github_Merge_Version Control - Fatal编程技术网

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
commit
B'
,那么
B'
中的更改将被折叠到commit
A

但这并不合适。我希望提交
A
B
来表示工作中合理的检查点,在这些检查点中,更改不会处于一种只有我才能理解的半途而废的状态。如果我修改了
B'
commit,那么commit
A将保留
B'
以前所做的半成品更改。我希望提交
B'
被折叠成
B
,因为
B'
代表了提交
B
的中间工作

可能的解决办法:

1a。只需离开commit
B'
,并将其命名为“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
    commit
    B'
    而不是
    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'
    中,而不是反过来

    当然,你必须用力推树枝,但那没关系,正如你所说,你是唯一一个看着它的人。在这种情况下,频繁的强行推压根本不是坏习惯