1

我是 git 新手。

我在A way.
我想尝试在B way.

然后我可能需要一些时间来评估这是否B way是一个好主意。
在评估它时,我将修改other parts程序。

假设,我决定B was bad and A was better,并想回到A way
但我想保留对other parts程序的修改。

这可以在git中完成吗?

-编辑-
我正在添加图片以更好地解释我要完成的工作

目前,我在a_way(完成实现A)的末尾,除了我不知道X在哪里​​..

                [a_way]
 o---X---a---a---a

我想试试b_way。
从我所在的地方开始,去掉(或注释掉)a_way相关的代码,实现b_way

   o---X---a---a---a
                    \
                     remove a_way--implement b_way

我需要一些时间来评估 b_way 的有效性,并将继续开发其他功能。

   o---X---a---a---a
                    \
                     remove a_way--implement b_way--develop new features

现在我认为 a_way 比 b_way 更好,并决定回到 a_way。

   o---X---a---a---a--------------------------------new features(I wanna end up here)
                    \
                     remove a_way--implement b_way--new features
4

3 回答 3

0

听起来很像你在变基之后。

在 git 中执行此操作的一种方法是有两个分支a_wayb_way.

当你完成了两种方式的构建后,你将拥有一棵看起来像这样的树

                [a_way]
 o---X---a---a---a
      \
        -b---b---b
                 [b_way]

a实现 A 方式的提交在哪里b,实现 B 的提交在哪里。

现在假设您将分支名称更改为develop一旦 a_way 完成并破解一段时间。您的树将如下所示:

              [a_way]
 o---X---a---a---a---d1---d2---d3---d4 [develop]
      \
        -b---b---b
                 [b_way]

现在您决定要摆脱a_way并改用b_way

git rebase --onto b_way a_way develop

会给我:

              [a_way]
 o---X---a---a---a
      \
        -b---b---b---d1'---d2'---d3'---d4' [develop]
                 [b_way]

注意:如果开发中有合并,这将使合并变平,我怀疑有一种方法可以保留合并,但我还不需要它。它还会导致提交 ID 发生变化,如果有其他人以此为基础工作,这可能会导致问题。

附录

听起来您的存储库如下所示:

                             [a_way]
 o---X             a---a---a
      \           /
        -b---b---b---d1---d2---d3---d4 [develop]
               [b_way]

如果您希望它以这样的方式结束:

                             [a_way]
 o---X             a---a---a
      \           /         \
        b---b---b           d1'---d2'---d3'---d4' [develop]
               [b_way]

然后你发出的命令是

 git rebase --onto a_way b_way develop

或者在这种情况下,它可以简化为

git checkout develop
git rebase a_way

附录

所以你的存储库实际上是这样的:

 o---X---a---a---a [a_way]
                  \
                    da---da---da---b---b---b---f---f---f [develop]
                            [remove_a]   [b_way]

你想去

   o---X---a---a---a---f---f---f [develop]
                    \
                     da---da---da---b---b---b

执行此操作的命令是

git rebase --onto a_way b_way develop

如果您在所需位置没有分支,则可以使用提交 SHA。

git rebase --onto  a_way
于 2012-12-01T00:38:23.133 回答
0

你将拥有AandB在单独的分支中,让我们说Aand B。一旦您决定要保留A,您将把它合并回开发分支(通常是master, 或develop)。

git checkout master
git merge A

你摆脱了两个分支AB

git branch -d `A`
git branch -D `B`

因为B没有合并到您的开发分支中并且更改将丢失,您必须使用大写强制删除D

other parts?它们可能已经在我们的开发分支中(如前所述master,或develop,或其他东西)并且即使在您合并后仍保留在那里A

于 2012-12-01T00:40:24.007 回答
0

你曾经犯过吗?如果没有,git stash可以揭示你在上​​次提交后做了什么,然后你可以尝试另一种方式。当你想要改变时,只需使用git stash apply

这是与上面不同的另一种方式,但我确实认为使用分支要好得多,因为您是 git 新手,了解这一点对您来说非常重要:-)

于 2012-12-01T01:57:18.487 回答