Git rebase / checkout保留最新修改的文​​件

时间:2018-05-25 18:19:48

标签: git git-rebase gitpython git-merge-conflict

我想知道如何从原点获取rebase,如果文件有冲突,我想保留最新的修改文件。

git中是否有一种方法可以在提交或提交日期中获取每个文件的修改日期?或者有没有办法列出与本地分支与原点不同的文件,并告诉哪一方是最新修改的文​​件?

示例场景:

origin/mybranch:
    - File A (modified today)
    - File B (modified yesterday)

local/mybranch:
    - File A (modified yesterday)
    - File B (modified today)

如果我git pull --rebase我想保留最新版本的文件A和文件B.

我使用GitPython来操作存储库,因此我需要一种使用此条件自动解决任何冲突的方法(保留最新修改文件的更改)。

1 个答案:

答案 0 :(得分:1)

首先,没有这样的合并策略,因为"赞成提交日期的最新更改" 盒子外面。 Here's the list of supported strategies

从这个列表中可以看出"递归" "我们/他们的战略"选项可能会解决您的示例案例的某些部分:

因为你想使用" rebase",这意味着它需要" origin / mybranch"作为合并的基础,然后尝试在其上应用新的提交。

然后有两种情况:要么你的改变发生在以后 - 在这种情况下它将适用, 或者您的更改发生得更早 - 在这种情况下,您说您想要应用他们的版本(即--strategy-option"我们的"或者#34;他们的",我认为它是& #34;我们的"对于rebase,这很令人困惑......)。

问题在于,如果您的更改发生在今天,并且他们的更改发生在昨天,但您忘记在早上同步,那么即使您的更改发生在稍后(按提交日期),它仍会产生冲突,并且不恰当地解决他们的版本而不是你的版本。

如果这不完全是您想要的,您可以编写一个自定义自动合并工具,当出现冲突时,会找出导致它的提交日期,并根据哪个提交选择我们的/他们的日期是最新的。

然后,您可以编写一个脚本,在每次冲突时应用rebase和自定义合并工具。

此类合并工具的简要逻辑

  1. 鉴于文件名冲突,并且知道远程和本地分支名称,您可以找到上次为每个分支修改此文件的提交 - 请参阅How do I find the most recent git commit that modified a file?

  2. 然后获取这两个提交的日期并进行比较

  3. 并采取适当的合并决定:复制LOCAL或REMOTE。