在两个git分支之间合并一个文件的问题

时间:2017-09-02 07:22:46

标签: git github version-control

我有两个分支,假设是A和B

A是将用于生产的主分支,B是我用于在本地测试的另一个分支。所以我正在使用本地数据库进行分支B,并且在发送电子邮件时我发送给自己,因为它应该我在本地测试时不会发送给客人。

所以我有一个名为booking_confirmation.cs的文件,当我在本地测试时,电子邮件将是我的,当我切换到主分支时,它将是实时的访客电子邮件。

所以我除了电子邮件部分之外做了一些改变,我希望电子邮件是一样的,所以每次切换分支时我都不会改变。现在我的问题是我只需要其他更改我在文件的分支B中制作,而不在电子邮件中进行任何切换。

我尝试的是

我检查了主分支以确保它正在使用

git checkout A

然后我在分支A中检查了分支B中的特定文件,所以我尝试了

git checkout B booking_confirmation.cs

如果文件中没有冲突我将要合并git auto合并它没有任何问题但是如果有冲突我得到以下错误

  

- 不是我们可以合并的东西

有没有办法合并文件,以便我可以选择/合并我在主分支中需要的文件的哪一部分。任何帮助都将非常感激。

提前致谢!

2 个答案:

答案 0 :(得分:0)

  

所以我有一个名为booking_confirmation.cs的文件,当我在本地测试时,电子邮件将是我的,当我切换到主分支时,它将是实时的访客电子邮件。

嗯......这是一个很好的机会让您的代码对环境变化更加健壮(比如prod与测试)

所述代码可以有一个固定值...除非设置了环境变量,在这种情况下,它将把电子邮件称为环境变量。

由于与配置相关,请参阅" The Twelve-Factor App: III. Config"。

这样可以避免全部" git checkout-保留一行"问题。
您保留一个相同的代码,但只在执行期间通过环境变量覆盖一个值。

但是如果你必须通过Git管理那一行,你也可以设置content filter driver,在结账时可以评估正在检出的分支并在源文件中输入正确的值。

https://git-scm.com/book/en/v2/images/smudge.png

(来自Git Pro Book:" Customizing Git - Git Attributes: Keyword Expansion")

smudge脚本将是一个简单的sed,将一行(在booking_confirmation.cs中)替换为使用正确的值声明电子邮件地址。

答案 1 :(得分:0)

您可以使用交互窗口通过手动管理合并配置/结果来合并文件booking_confirmation.cs:

git checkout A
git checkout --patch B  booking_confirmation.cs

然后您可以手动处理文件的合并结果。例如输入y以应用更改,输入e以手动编辑更改等。