这是我的git存储库的初始快照
在分支上master,文件m1包含
L1
Run Code Online (Sandbox Code Playgroud)
在分支上dev,文件m1包含
L1
L2
Run Code Online (Sandbox Code Playgroud)
如果我尝试合并dev从master,它会导致冲突.
$ 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,现在我们实际上正在使用它更相关的项目.
我总是尝试在合并之前做一个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个提交,则必须通过每个提交并手动解决任何冲突.有没有更合适的方法来处理这种情况?
我很抱歉,如果我没有很好地解释,但你可以尝试复制我在虚拟存储库中提到的步骤,我想你会得到什么在困扰我.
在 Visual Studio Code 中使用 Git 作为源代码控制提供程序时,每当我尝试将冲突文件与保留当前版本的远程存储库合并时,都会遇到问题。
步骤如下:
如果我接受传入的更改,接受两个更改或向我以前的版本添加其他字符(以更改我之前尝试提交的版本),则一切正常。我认为当我选择“接受当前更改”并尝试暂存合并更改时,编辑器(或 Git?)不会将文件添加到 STAGED CHANGES 中,因为它与之前提交的版本相同,并且不会更新 git状态,仍然停留在合并冲突中。
合并时向以前的版本添加额外字符的解决方法工作正常,但我需要知道这是一个错误还是我在合并时遗漏了一些步骤。
请不要用命令行解决方法回复我(如 git merge --abort),我正在寻找一个 UI 友好的解决方案(并非我的所有队友都对命令行有信心)。提前致谢。
我已经克隆了一个远程存储库,创建了一个新分支b并开始工作并进行提交。我也推动了这个b分支,但我是唯一一个在这方面工作的人。
一段时间后,我想在远程主分支上重新设置本地分支的基础,只是为了与系统可能发生的更改同步。请注意,我确信我是唯一处理这些特定文件的人。
所以我做了
git fetch --all
git rebase origin/master
Run Code Online (Sandbox Code Playgroud)
然后 Git 通知我合并冲突。
现在,我可以轻松地手动解决冲突,但我很烦恼:为什么会发生合并冲突?
如果我没有记错的话,整个想法git rebase就是在指定分支的顶端“重放”当前分支的所有提交。我是唯一一个处理过这些特定文件或这个特定分支的人。
那么为什么会发生这种情况呢?我的做法有问题吗?
考虑以下做法:
main功能分支中分支并根据需要创建尽可能多的提交main(例如,想想 GitHub 的“压缩并合并”按钮)现在这是我感兴趣的一个用例:
feature1创建分支并在分支上工作feature2从分支的最后一次提交开始创建一个分支feature1(参见C下图中的提交)feature1到main(参见提交G)G中feature2feature2继续在分支工作换句话说,第 4 步中合并G到feature2分支中的操作如下所示:
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
我有以下情况:我曾在一个功能分支(称为work1)上工作,我对该分支有出色的 PR。当我等待 PR 获得批准时,我想开始开发一个新的功能分支(称为work2)。问题是我公司的合并策略是压缩合并到 main 中,当我尝试合并work2到main.
这几乎就是我所拥有的:
$ 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)
$ 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 add冲突的文件).此时,我可以这样做,git diff并且我将以组合的diff格式显示结果文件与每个父文件的不同之处.
到目前为止都很好.现在我想分别检查结果文件与单个父文件的区别.当然,对于涉及2个父母的合并冲突(樱桃挑选,rebase等),我可以使用git diff --ours或者git diff --theirs,但是我如何将其扩展到更多的父母?
换句话说,如果我从3个父母那里得到冲突,是否可以查看每个父母的个别差异?
而且,我发现--ours并且--theirs非常偶然; 我无法在diff上下文中找到他们的用法.
我有以下问题。
我想branch从我的master 仓库创建一个。我可以使用bitbucket dashboard或Terminal创建分支。如果使用Terminal,则创建的分支不会显示在。中,但是Overview如果Create a branch从仪表板使用并创建,则显示该分支,但其中不包含任何内容,并要求我使用git fetch && git checkout branchname命令进行签出。
哪一种是创建分支的正确方法?
然后,我的下一个问题是:认为我master已更改,并且分支也已更改。所以我怎样才能将分支更改合并到master。有哪些步骤可以做到这一点。(最好的方法是使用命令或位桶仪表板合并)
最后,如果我们键入git branch,它将显示master和other branches。所以我该如何从终端更改分支。
我正在努力正确地合并到分支机构.分支似乎有行结束问题,因为当我打开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) 我已经用这个 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