Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.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 rebase-在分叉点模式下提交选择_Git_Github_Version Control - Fatal编程技术网

Git rebase-在分叉点模式下提交选择

Git rebase-在分叉点模式下提交选择,git,github,version-control,Git,Github,Version Control,阅读git-rebase和git-merge-baseman文档: 在使用git checkout-b topic origin/master创建主题分支之后,远程跟踪分支origin/master的历史记录可能已被重绕和重建,从而导致此分支的历史记录 形状: 其中,origin/master过去指向B3、B2、B1,现在它指向B,当origin/master位于B3时,您的主题分支从它的顶部开始。此模式使用 origin/master将B3作为分岔点,以便主题可以通过以下方式在更新的origi

阅读
git-rebase
git-merge-base
man文档:

在使用git checkout-b topic origin/master创建主题分支之后,远程跟踪分支origin/master的历史记录可能已被重绕和重建,从而导致此分支的历史记录 形状:

其中,origin/master过去指向B3、B2、B1,现在它指向B,当origin/master位于B3时,您的主题分支从它的顶部开始。此模式使用 origin/master将B3作为分岔点,以便主题可以通过以下方式在更新的origin/master之上重定基础:

$ fork_point=$(git merge-base --fork-point origin/master topic)
$ git rebase --onto origin/master $fork_point topic
$fork\u point
将(如果我理解正确的话)作为提交对象
B3
,因此提交
B3..topic
将重设为
源代码/主代码
分支

Q1为什么省略
B3
commit有用?
主题
分支的提交是建立在
B3
提交之上的,因此省略它意味着它的修改将在
源代码/主代码
分支的故事中丢失。对
B3
commit和
topic
分支进行重定基址将导致更清晰的历史记录,不是吗


Q2是否有人可以链接/简要描述git工作流中
--fork point
选项的实际使用案例?

您认为
$fork\u point
将是
B3

我相信这里的意图是将
B3
省略为“非您的承诺”

我认为Git的人在这里画的图表不太好。下面是我如何在不做太多更改的情况下重新绘制和重写它(尽管我可能只是重新编写每个提交的字母)


您首先克隆(或更新)一些(
origin
)存储库,这些存储库的图形以提交
B3
结尾,然后创建一个主题分支并进行一些提交:

但是,在另一次
git fetch
之后,您自己的提交图现在看起来像这样:

...--o---F---B3--B2--B1    <-- origin/master
              \
               G---H---I   <-- topic
                 o---B1'       <-- origin/foo
                /
...o---F---B2'-o---o---o---B   <-- origin/master
        \
         B3--G---H---I         <-- topic
但你更愿意:

                 o---B1'                 <-- origin/foo
                /
...o---F---B2'-o---o---o---B             <-- origin/master
                            \
                             G'--H'--I   <-- topic

o--B1'如果上游分支未更改历史记录,是否有任何关于
--fork point
的用户案例?我看到的每个示例都描述了一种情况,即上游在您处理主题分支时修改了历史记录(例如,rebase、amend或filter分支)。@MikkoRantalainen:我认为不是:如果上游总是在增长而没有放弃以前的提交,fork point就不应该做任何事情。不过,在这种情况下,它也不会破坏任何东西。如果我是对的,那么只有当有人强迫master进入远程repo,让graph像答案的第三图中那样突然改变时,才会发生这种情况?@BreakingBenjamin:是的,很明显,
--fork point
是为了解决上游强制推送问题。我认为这不是一个很好的实现,但是这里没有一个正确的行为。Myaliy的进化扩展理论上是一个更好的方法来处理它(实际上它是如何工作的,我不知道,没有使用它),但是进化不适合Git的实现。Git 2.24(Q4 2019),你也可以考虑。
                 o---B1'       <-- origin/foo
                /
...o---F---B2'-o---o---o---B   <-- origin/master
        \
         B3--G---H---I         <-- topic
                 o---B1'                     <-- origin/foo
                /
...o---F---B2'-o---o---o---B                 <-- origin/master
                            \
                             B3'-G'--H'--I'  <-- topic
                 o---B1'                 <-- origin/foo
                /
...o---F---B2'-o---o---o---B             <-- origin/master
                            \
                             G'--H'--I   <-- topic