相关疑难解决方法(0)

我怎么告诉git总是选择我的本地版本来解决特定文件上的冲突合并?

假设我通过git存储库与某人合作,并且有一个特定的文件,我永远不想接受任何外部更改.

有没有办法让我设置我的本地仓库,以便每当我拉动时不抱怨冲突的合并?我想在合并此文件时始终选择我的本地版本.

git git-merge

94
推荐指数
2
解决办法
4万
查看次数

如何使用Git阻止automerge?

我试图将本地分支合并到主分支而不让Git进行自动注册.我想"亲自挑选"我想要合并为主人的东西.

当我使用Git的difftool命令时,我能够区分并选择我想要添加到主分支中的内容.但是当我合并时,我会失去我之前选择的东西,因为Git会做一个automerge.我可以在合并之前将更改提交到master中,但这样做似乎不自然.

Git的mergetool仅在合并发生冲突时才可用.但是如果Git做了automerge,那么通常没有冲突,所以我无法运行mergetool命令.

更新:

我开始认为我想要完成的是不好的做法,或者这是不可能的.也就是说,合并一个主题分支,只让它合并我需要的差异.此外,还有这一点反映在历史上.无论如何,我在试验Git时发布的问题浮出水面.

git

57
推荐指数
3
解决办法
5万
查看次数

git工作流:我可以阻止某个文件合并到另一个分支但仍保持在版本控制之下吗?

我有一个包含两个分支的存储库:live和stage.存储库包含基于Web的应用程序的代码.我想为舞台和现场分支维护两个不同的.htaccess文件,但仍然保持它们的版本控制,因为服务舞台网站的性质有点不同(例如,现在,我希望缓存定时不同).

我是git的新手,所以可能有一个简单的解释,但我想有一个工作流程,当我在现场和我拉变化(简单git merge stage)时,我没有覆盖现有的.htaccess在现场科.有没有办法配置这个?我在git中错过了一些重要的概念吗?

同样地,还有一大块(但可能很多).html文件,我想跟踪变化但不将它们合并回实时.为了清楚起见,我希望live和stage能够跟踪这些文件中的更改,但知道在进行合并时不要合并这些特定的更改.

git workflow git-merge

27
推荐指数
2
解决办法
1万
查看次数

如何在没有合并的情况下在Git中执行三向差异?

我想在具有公共合并基础的两个git分支之间执行三向差异,并使用kdiff3查看它.

我发现很多指导对SO(和一些非常相似的问题(1,2,3)),但我还没有找到一个直接的答案.值得注意的是,对这个答案的评论意味着我想要的是可能的,但它对我不起作用.希望用户可以在这里ch :) :)

对于背景,当我执行合并时,我使用"diff3"冲突样式:

git config --global merge.conflictstyle diff3

我已git mergetool配置为使用kdiff3.

解决合并冲突时,这会显示四个文件:

  1. 当前分支的文件($ LOCAL)
  2. 另一个分支的文件($ REMOTE)
  3. 该文件是两个分支的共同祖先($ BASE)
  4. 合并的输出文件($ MERGED)

但是,git difftool只会拉起两个分支提示.我也希望看到基本文件. 为了清楚起见,我希望能够合并之前执行此差异,包括没有合并冲突的文件.(git mergetool如果存在冲突,则仅显示三向差异).


部分解决方案#1:

使用单个文件,我可以导出三个版本并手动调用diff:

git show local_branch:filename > localfile
git show remote_branch:filename > remotefile
git show `git merge-base local_branch remote_branch`:filename > basefile

{kdiff3_path}/kdiff3.exe --L1 "Base" --L2 "Local" --L3 "Remote" -o "outputfile" basefile localfile remotefile &
Run Code Online (Sandbox Code Playgroud)

这有两个问题:

  1. 我希望它适用于整个项目,而不仅仅是一个特定的文件.
  2. 这太丑了!我可以编写脚本,但我希望使用标准的git进程有一个更清晰的方法. …

git version-control diff merge

23
推荐指数
1
解决办法
4578
查看次数

将git merge驱动程序添加到存储库?

我正在创建一个合并驱动程序.我已经定义了一个.gitattributes文件,如下所示:

filename merge=mergeStrategy

我在$ PROJECT/.git/config中创建了合并驱动程序,如下所示:

[merge "mergeStrategy"]
    name = My merge strategy
    driver = scripts/mergeScript.sh
Run Code Online (Sandbox Code Playgroud)

这在本地工作正常,但我想将此合并驱动程序提交到git存储库,以便合并策略对每个人都有效.

有没有办法可以将此(或其他Git配置选项)添加到存储库本身?

git merge git-merge git-config

16
推荐指数
1
解决办法
3280
查看次数

.PO(gettext)文件的3路Git合并驱动程序在哪里?

我已经有了以下内容

[attr]POFILE merge=merge-po-files

locale/*.po POFILE
Run Code Online (Sandbox Code Playgroud)

.gitattributes同一个本地化文件(例如locale/en.po)已经在并行分支中修改时,我希望合并分支以正常工作.我目前正在使用以下合并驱动程序:

#!/bin/bash
# git merge driver for .PO files (gettext localizations)
# Install:
# git config merge.merge-po-files.driver "./bin/merge-po-files %A %O %B"

LOCAL="${1}._LOCAL_"
BASE="${2}._BASE_"
REMOTE="${3}._REMOTE_"

# rename to bit more meaningful filenames to get better conflict results
cp "${1}" "$LOCAL"
cp "${2}" "$BASE"
cp "${3}" "$REMOTE"

# merge files and overwrite local file with the result
msgcat "$LOCAL" "$BASE" "$REMOTE" -o "${1}" || exit 1

# cleanup
rm -f "$LOCAL" "$BASE" "$REMOTE" …
Run Code Online (Sandbox Code Playgroud)

git merge localization conflict gettext

15
推荐指数
2
解决办法
2443
查看次数

合并期间Git会覆盖文件 - 不会显示冲突

可能重复:
Git - 如何在所选文件上强制合并冲突和手动合并

我们正在尝试在两个分支之间进行合并:稳定代码和新功能.

合并功能对我们不起作用:它有时会显示冲突,但通常只是覆盖文件而不告诉我们任何冲突,可能与它认为正确的版本有关.

是否可以阻止此覆盖,以便向我们显示所有冲突的行?我们尝试使用git diff来了解它有多广泛,但有几千行,因为我们在我们的稳定分支上进行了相当广泛的调试...所以我们真的需要让合并功能工作,如果可能的话.

所以我们处于一个混乱的状态,将非常感谢所有的帮助.

git github git-merge

9
推荐指数
1
解决办法
4639
查看次数

在GIT上手动合并

我使用专有的脚本语言开发了非常恢复的代码,其中大多数配置都包含在代码本身中.

显而易见的问题是测试和生产环境之间代码本身的差异,而这正是我试图用GIT管理的.

由于我的测试环境非常不稳定,我想我可以在GIT中创建一个分支,同时进行更改(并在其中保留代码和测试配置),并且在代码被接受之后我将其合并到生产中.

好吧,当我要求git合并我的分支时,它可以很好地处理代码..但是配置也会被迁移,而且我必须逐个文件地打开,将其更改回原来的状态.

无论如何我可以禁用GIT的自动合并并威胁一切,因为代码冲突要手动与WinMerge合并或稍后?代码很简短,真的.因为无论如何我都要编辑它以应用配置......

ps:请注意,我不是问如何在git上配置WinMerge.我有这些工具.我的问题是如何始终在分支之间执行手动合并.

谢谢!

F.

git merge manual

7
推荐指数
1
解决办法
7015
查看次数

Git - 即使没有冲突,如何强制手动合并

这是一个多年来被问过很多次的问题。我找到了很多答案,尤其是这个:

Git - 如何在所选文件上强制合并冲突和手动合并(@Dan Moulding)

此页面包含如何设置始终返回失败的合并驱动程序的详细指南,从而使手动合并成为可能。我试图为 Windows 调整该解决方案:

  1. 我将以下内容添加到我的%homepath%\.gitconfig

    [merge "verify"] name = merge and verify driver driver = %homepath%\\merge-and-verify-driver.bat %A %O %B

  2. 我把驱动改成了

    cmd /K "echo Working > merge.log & git merge-file %1% %2% %3% & exit 1"

    echo Working > merge.log添加来检查驱动程序是否被调用)。

  3. 并且,在 repo 的根目录下,创建了一个.gitattributes包含以下行的文件:

    *.txt merge=verify

不幸的是,它不起作用。我试图合并一个文件feature.txt,唉,合并成功完成。似乎根本没有调用驱动程序,因为没有创建 merge.log 文件。

我做错了什么吗?任何强制手动合并问题的解决方案都是最受欢迎的。

git merge

7
推荐指数
2
解决办法
2728
查看次数

即使在"明显"的情况下,也强制git手动合并

有一些关于如何做的答案(这个那个)建议使用自定义驱动程序,这似乎很好.

但是,在合并分支中未更改给定文件时会出现这种情况,因此git甚至不会调用合并驱动程序,而只是覆盖该文件.

有没有办法有效地防止发生?

[编辑]

为了澄清,每个实现的合并都包含一个具有本地环境配置的Excel,即每个开发人员的本地设置.很少编辑这样的文件,这通常会导致它在我从主分支的每次拉动时被覆盖.

请注意,此文件中还有一些其他详细信息可能已经过编辑,我想在我自己的版本中进行更新,因此更新它仍然很重要.我只是希望它总是导致冲突被手动排序,所以我可以保持我的本地配置并更新其余的(即使我必须手动完成).

同样值得注意的是,这个文件不能拆分,让我的生活更轻松.

git git-merge

5
推荐指数
1
解决办法
920
查看次数

Git merge:是否可以避免非快进文件的自动合并?

当我执行 a 操作时git merge,我希望仅自动合并可以快进的文件(即自上次公共修订以来仅在合并的一个分支上更改的文件),而所有其他文件(已更改)在两个分支上,即使在不同的行上)都被标记为冲突。我环顾四周,但似乎没有一种“简单”的方法(例如传递给 的选项git merge)来做到这一点。这里有一个类似的问题,但不完全是这个问题。这里有一个非常相似的问题,但已经有 4 年历史了,而且没有确凿的答案。

git merge

5
推荐指数
1
解决办法
3138
查看次数