当前位置:  开发笔记 > 开发工具 > 正文

如何挑选和恢复工作?

如何解决《如何挑选和恢复工作?》经验,为你挑选了1个好方法。

我试图理解merge和rebase在数学中的集合操作方面做了什么.

在下文中," - "表示diff(类似于数学中的设定差异,但"AB"表示A中的但不表示B中的表示,而B表示不表示A中的表示,而"+"表示patch(即表示不相交联合)数学.我以前没用过patch,所以我不确定).

从版本控制与Git,由Loeliger,2ed

    命令git cherry-pick commit应用当前分支上的命名提交引入的更改.它将引入一个新的,独特的提交.严格来说,使用git cherry-pick不会改变存储库中的现有历史记录; 相反,它增加了历史.

    在此输入图像描述

    在此输入图像描述

    F'=(FB)+ Z是否正确?

    git revert commit命令与命令git cherry-pick commit基本类似,但有一个重要区别:它应用给定提交的反转.因此,此命令用于引入反转给定提交的效果的新提交.

    在此输入图像描述

    在此输入图像描述

    D'= G - D是否正确?

Edward Thoms.. 6

摘樱桃

F'=(FB)+ Z是否正确?

不,这也会引入C,DE中引入的变化.

git-cherry-pick通过隔离提交中的唯一更改来进行挑选(即,在此示例中为FE,忽略包括合并基础的其他祖先),并将它们应用于目标.

这不是通过补丁应用程序完成的,而是通过使用三向合并算法 - 被挑选的提交的父级将被用作共同的祖先,并且被挑选的提交将是合并的一侧,目标为另一方.这个产品的变化包含在樱桃选择的提交和目标中.

例如,如果E是要挑选的提交的父级,并且其内容(充当共同的祖先)是:

Line 1
Line 2
Line 3
Line 4
Line 5

例如,如果F是要挑选的提交,其内容为:

Line 1
Line 2
Line Three
Line 4
Line 5

樱桃采摘Z的目标是:

LINE 1
Line 2
Line 3
Line 4
Line 5!

然后是三向合并的结果(带有关于每条线来自哪里的注释):

LINE 1
Line 2
Line Three
Line 4
Line 5!
还原

D'= G - D是否正确?

是的,粗略地说.D中独有的更改已从G中删除.像git-cherry-pick,git-revert使用三方合并来实现,不过这次提交恢复为共同的祖先被处理,一边是当前提交,另一边是致力于恢复的母公司.

这意味着当提交还原和当前提交之间的行相同时,将选择来自其父级的行.

如果是D的内容,则revert的提交作为共同的祖先,其内容为:

Line 1
Line 2
Line THREE
Line 4
Line FIVE

和内容Ç(d的父)为:

Line 1
Line 2
Line 3
Line 4
Line 5

G的内容进一步改变,内容如下:

Line One
Line 2
Line THREE
Line 4
Line FIVE

那么三向合并的结果将是:

Line One
Line 2
Line 3
Line 4
Line 5

这是获取父C和目标G中的唯一线的结果.

合并提交

至于torek notes(下面),由于这些机制都涉及使用父提交,因此当有多个父提交时这些机制会中断.(即,有问题的提交是一个合并,并且有多个父项.)在这种情况下,您需要指定git 要考虑哪个父项(使用该-m标志).

冲突

当然,这些机制中的任何一个都可能导致冲突.例如,如果当前冲突进一步发生变化,那么您将不得不解决冲突.例如,如果在恢复示例(上面)中,后续提交也改变了第5行,所以G实际上是:

Line One
Line 2
Line THREE
Line 4
LINE FIVE!

然后就会发生冲突.工作目录(合并文件)将是:

Line One
Line 2
Line 3
Line 4
<<<<<<<
LINE FIVE!
=======
Line 5
>>>>>>>

您需要决定是否需要原始更改(Line 5)或最新更改(LINE FIVE!).



1> Edward Thoms..:

摘樱桃

F'=(FB)+ Z是否正确?

不,这也会引入C,DE中引入的变化.

git-cherry-pick通过隔离提交中的唯一更改来进行挑选(即,在此示例中为FE,忽略包括合并基础的其他祖先),并将它们应用于目标.

这不是通过补丁应用程序完成的,而是通过使用三向合并算法 - 被挑选的提交的父级将被用作共同的祖先,并且被挑选的提交将是合并的一侧,目标为另一方.这个产品的变化包含在樱桃选择的提交和目标中.

例如,如果E是要挑选的提交的父级,并且其内容(充当共同的祖先)是:

Line 1
Line 2
Line 3
Line 4
Line 5

例如,如果F是要挑选的提交,其内容为:

Line 1
Line 2
Line Three
Line 4
Line 5

樱桃采摘Z的目标是:

LINE 1
Line 2
Line 3
Line 4
Line 5!

然后是三向合并的结果(带有关于每条线来自哪里的注释):

LINE 1
Line 2
Line Three
Line 4
Line 5!
还原

D'= G - D是否正确?

是的,粗略地说.D中独有的更改已从G中删除.像git-cherry-pick,git-revert使用三方合并来实现,不过这次提交恢复为共同的祖先被处理,一边是当前提交,另一边是致力于恢复的母公司.

这意味着当提交还原和当前提交之间的行相同时,将选择来自其父级的行.

如果是D的内容,则revert的提交作为共同的祖先,其内容为:

Line 1
Line 2
Line THREE
Line 4
Line FIVE

和内容Ç(d的父)为:

Line 1
Line 2
Line 3
Line 4
Line 5

G的内容进一步改变,内容如下:

Line One
Line 2
Line THREE
Line 4
Line FIVE

那么三向合并的结果将是:

Line One
Line 2
Line 3
Line 4
Line 5

这是获取父C和目标G中的唯一线的结果.

合并提交

至于torek notes(下面),由于这些机制都涉及使用父提交,因此当有多个父提交时这些机制会中断.(即,有问题的提交是一个合并,并且有多个父项.)在这种情况下,您需要指定git 要考虑哪个父项(使用该-m标志).

冲突

当然,这些机制中的任何一个都可能导致冲突.例如,如果当前冲突进一步发生变化,那么您将不得不解决冲突.例如,如果在恢复示例(上面)中,后续提交也改变了第5行,所以G实际上是:

Line One
Line 2
Line THREE
Line 4
LINE FIVE!

然后就会发生冲突.工作目录(合并文件)将是:

Line One
Line 2
Line 3
Line 4
<<<<<<<
LINE FIVE!
=======
Line 5
>>>>>>>

您需要决定是否需要原始更改(Line 5)或最新更改(LINE FIVE!).

推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有