标签: git-merge-conflict

为什么会导致合并冲突?

这是我的git存储库的初始快照

在此输入图像描述

在分支上master,文件m1包含

L1
Run Code Online (Sandbox Code Playgroud)

在分支上dev,文件m1包含

L1
L2
Run Code Online (Sandbox Code Playgroud)

如果我尝试合并devmaster,它会导致冲突.

$ git checkout master
Switched to branch 'master'

$ git merge dev
Auto-merging m1
CONFLICT (content): Merge conflict in m1
Automatic merge failed; fix conflicts and then commit the result.

$ git diff
diff --cc m1
index 078f94b,9f46047..0000000
--- a/m1
+++ b/m1
@@@ -1,1 -1,2 +1,5 @@@
  L1
++<<<<<<< HEAD
++=======
+ L2
++>>>>>>> dev
Run Code Online (Sandbox Code Playgroud)

虽然我没有修改m1in的第2行master,但它是如何导致冲突的?

要验证文件的实际内容并确定是否由white-spaces引起: …

git git-merge git-merge-conflict

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

Git Merge vs Rebase - 解决冲突

这有点长,但我认为这可能是一个有趣的问题.

我们刚刚开始在我们公司使用git,尽管很多人不愿意在一些小项目中开始使用git,现在我们实际上正在使用它更相关的项目.

我总是尝试在合并之前做一个rebase,但就在最近我们发现了这种方法的问题.

想象一下,你有一个文件F,你有以下git历史记录:

(master)       F -- F''1
                \
(feature)        \- F'1 -- ... -- F'X
Run Code Online (Sandbox Code Playgroud)

现在,如果你对功能分支进行了重组,并且在解决了第一个冲突时,你实际上保持了F''1和F'1的变化,你将不得不手动解决文件F的X冲突,因为git可以' t自动解决它们.相反,如果您刚刚进行了合并(没有重新定位),则必须解决一个("大")冲突.这让我质疑变基的实际价值,因为这可能是一项非常繁琐的工作.

我错过了什么,或者这只是它的方式?如果您在一个文件上有30个提交,则必须通过每个提交并手动解决任何冲突.有没有更合适的方法来处理这种情况?

我很抱歉,如果我没有很好地解释,但你可以尝试复制我在虚拟存储库中提到的步骤,我想你会得到什么在困扰我.

git merge workflow rebase git-merge-conflict

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

Visual Studio Code 不会暂存 Git 合并更改

在 Visual Studio Code 中使用 Git 作为源代码控制提供程序时,每当我尝试将冲突文件与保留当前版本的远程存储库合并时,都会遇到问题。

步骤如下:

  • 远程存储库上的文件已被修改,我在本地存储库上修改了相同的文件
  • 当我尝试将更改推送到服务器时,我(正确地)收到一条错误消息(无快进),我必须执行拉取以更新我的本地存储库
  • 拉动时,编辑器警告我文件上的冲突,给我四个选项(接受当前更改、接受传入更改、接受两个更改、比较更改)
  • 我接受当前更改(我的本地版本)并保存文件。当我尝试暂存更改时,该文件不会添加到 STAGED CHANGES 部分,但它会消失。Git 仍处于“合并”状态,我什么也做不了(推给我与第一次推相同的错误,拉给我一个错误,就像我没有解决冲突一样;实际上在 .git 文件夹中我还有 MERGE_HEAD 文件)

如果我接受传入的更改,接受两个更改或向我以前的版本添加其他字符(以更改我之前尝试提交的版本),则一切正常。我认为当我选择“接受当前更改”并尝试暂存合并更改时,编辑器(或 Git?)不会将文件添加到 STAGED CHANGES 中,因为它与之前提交的版本相同,并且不会更新 git状态,仍然停留在合并冲突中。

合并时向以前的版本添加额外字符的解决方法工作正常,但我需要知道这是一个错误还是我在合并时遗漏了一些步骤。

请不要用命令行解决方法回复我(如 git merge --abort),我正在寻找一个 UI 友好的解决方案(并非我的所有队友都对命令行有信心)。提前致谢。

git git-merge git-merge-conflict visual-studio-code

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

为什么 git rebase 会触发合并冲突?

我已经克隆了一个远程存储库,创建了一个新分支b并开始工作并进行提交。我也推动了这个b分支,但我是唯一一个在这方面工作的人。

一段时间后,我想在远程主分支上重新设置本地分支的基础,只是为了与系统可能发生的更改同步。请注意,我确信我是唯一处理这些特定文件的人。

所以我做了

git fetch --all
git rebase origin/master
Run Code Online (Sandbox Code Playgroud)

然后 Git 通知我合并冲突。

现在,我可以轻松地手动解决冲突,但我很烦恼:为什么会发生合并冲突?

如果我没有记错的话,整个想法git rebase就是在指定分支的顶端“重放”当前分支的所有提交。我是唯一一个处理过这些特定文件或这个特定分支的人。

那么为什么会发生这种情况呢?我的做法有问题吗?

git rebase git-merge-conflict

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

将压缩的提交从主分支合并到功能分支时避免 git 中的冲突

考虑以下做法:

  • 开发人员从main功能分支中分支并根据需要创建尽可能多的提交
  • 一旦功能完成,所有提交都会被压缩并合并到分支中main(例如,想想 GitHub 的“压缩并合并”按钮)

现在这是我感兴趣的一个用例:

  1. feature1创建分支并在分支上工作
  2. feature2从分支的最后一次提交开始创建一个分支feature1(参见C下图中的提交)
  3. 挤压并合并feature1main(参见提交G
  4. 将这个新创建的提交合并到分支Gfeature2
  5. feature2继续在分支工作

换句话说,第 4 步中合并Gfeature2分支中的操作如下所示:

user@host:~/repo (main)$ git checkout feature2
user@host:~/repo (feature2)$ git merge main     # merge G into feature2
Run Code Online (Sandbox Code Playgroud)

压缩和合并后合并冲突

通常,这种合并(请参阅提交H)会导致许多合并冲突。

如何彻底消除这些矛盾呢?

我能想到的最简单的解决方案如下(见下图):

user@host:~/repo (main)$ git checkout feature1
user@host:~/repo (feature1)$ git merge main         # merge G into feature1; essentially, an empty commit
user@host:~/repo (feature1)$ git …
Run Code Online (Sandbox Code Playgroud)

git git-merge branching-and-merging git-squash git-merge-conflict

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

从功能分支分支并在主南瓜合并后协调提交

我有以下情况:我曾在一个功能分支(称为work1)上工作,我对该分支有出色的 PR。当我等待 PR 获得批准时,我想开始开发一个新的功能分支(称为work2)。问题是我公司的合并策略是压缩合并到 main 中,当我尝试合并work2main.

这几乎就是我所拥有的:

  1. 创建存储库和文件:
$ mkdir git_test && cd git_test && git init .
$ echo "test!" > test.txt && git add test.txt && git commit -m "added test"
[master (root-commit) 217c4bb] added test
 1 file changed, 1 insertion(+)
 create mode 100644 test.txt
Run Code Online (Sandbox Code Playgroud)
  1. 通过几次提交创建第一个功能分支:
$ git checkout -b work1
Switched to a new branch 'work1'
$ echo "1. Added this!" >> test.txt && git add test.txt && git …
Run Code Online (Sandbox Code Playgroud)

git version-control git-merge git-squash git-merge-conflict

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

查看来自个别父母的git diff

说,我遇到了合并冲突,我设法修复它,但没有标记为已解决(即我还没有完成git add冲突的文件).此时,我可以这样做,git diff并且我将以组合的diff格式显示结果文件与每个父文件的不同之处.

到目前为止都很好.现在我想分别检查结果文件与单个父文件的区别.当然,对于涉及2个父母的合并冲突(樱桃挑选,rebase等),我可以使用git diff --ours或者git diff --theirs,但是我如何将其扩展到更多的父母?

换句话说,如果我从3个父母那里得到冲突,是否可以查看每个父母的个别差异?

而且,我发现--ours并且--theirs非常偶然; 我无法在diff上下文中找到他们的用法.

git git-merge-conflict

6
推荐指数
1
解决办法
311
查看次数

如何在bitbucket上合并分支到master

我有以下问题。

  1. 我想branch从我的master 仓库创建一个。我可以使用bitbucket dashboardTerminal创建分支。如果使用Terminal,则创建的分支不会显示在。中,但是Overview如果Create a branch从仪表板使用并创建,则显示该分支,但其中不包含任何内容,并要求我使用git fetch && git checkout branchname命令进行签出。
    哪一种是创建分支的正确方法?

  2. 然后,我的下一个问题是:认为我master更改,并且分支也已更改。所以我怎样才能将分支更改合并到master。有哪些步骤可以做到这一点。(最好的方法是使用命令或位桶仪表板合并)

  3. 最后,如果我们键入git branch,它将显示masterother branches。所以我该如何从终端更改分支。

branch bitbucket git-merge git-merge-conflict

6
推荐指数
1
解决办法
3万
查看次数

Git + Windows + Visual Studio合并由分支之间的行结束问题引起的冲突

我正在努力正确地合并到分支机构.分支似乎有行结束问题,因为当我打开Visual Studio中的冲突窗口时,它显示0个冲突和0个不同文件之间的差异.

我在两个分支上添加了一个gitattributes文件,它在两个存储库中查找并执行了存储库刷新.

当我刷新两个存储库时,没有提交更改,即使指令指出将提交更改(实际上更改来自EOL转换).

这是我的gitattributes

# Auto detect text files and perform LF normalization
* text=auto

# Custom for Visual Studio
*.cs     diff=csharp

# Standard to msysgit
*.doc    diff=astextplain
*.DOC    diff=astextplain
*.docx   diff=astextplain
*.DOCX   diff=astextplain
*.dot    diff=astextplain
*.DOT    diff=astextplain
*.pdf    diff=astextplain
*.PDF    diff=astextplain
*.rtf    diff=astextplain
*.RTF    diff=astextplain
Run Code Online (Sandbox Code Playgroud)

我也检查过,我的全局core.autocrlf等于true(因为我们所有的开发人员都在Windows上使用Visual Studio)

问题是,当我继续做以上操作以期在两个分支中修复和规范化这些分支时,我最终会遇到比以前更多的冲突 - 所有这些都是由于行结束:

在此输入图像描述

.git/config文件(不包括分支引用)

[core]
    repositoryformatversion = 0
    filemode = false
    bare = false
    logallrefupdates = true
    symlinks = false
    ignorecase = true
    hideDotFiles = …
Run Code Online (Sandbox Code Playgroud)

git github visual-studio git-merge-conflict

6
推荐指数
1
解决办法
4320
查看次数

Github 认为合并后分支不同

我已经用这个 Github 问题把我的头撞在墙上,足以最终来到这里寻求帮助。我的repo有两个感兴趣的分支:master,这是当前实时发布的分支,以及alternate-testing,这正是它听起来的样子。我们的开发流程具有定期分支(和分叉)的功能分支alternate-testing,然后合并回alternate-testing. 最后,alternate-testing定期合并到master. 请注意,测试分支是看门人master- 除了master通过之外什么都不会进入alternate-testing

完全清楚,这不是这样的情况:

1 -- 2 -- 3 -- 4 -- 5 -- 6 -- 7 -- 8 [master]
       \                      /
        A -- B -- C -- D -- E [alternate-testing]
Run Code Online (Sandbox Code Playgroud)

就像在这个问题中一样,因为 master本身永远不会改变。更相关的图表是:

1 -- 2 ---------------------- * -- 8 [master]
       \                      /
        A -- B -- C -- D -- E …
Run Code Online (Sandbox Code Playgroud)

git version-control github merge-conflict-resolution git-merge-conflict

6
推荐指数
1
解决办法
1570
查看次数