主持人注意:鉴于此问题已经发布了67个答案(其中一些已删除),请考虑在发布另一个问题之前是否提供任何新内容.
git pull
和之间有什么区别git fetch
?
我正在合并一个可能有很多冲突的远程分支.我怎么知道它是否会有冲突?
我没有看到像什么--dry-run
的git-merge
.
是否可以在不触及工作树的情况下知道合并是否会发生冲突?我不想触摸工作树,因为我不想让它签出.如果我想在几个分支机构看到这些信息,那将需要很长时间.
我想在具有公共合并基础的两个git分支之间执行三向差异,并使用kdiff3查看它.
我发现很多指导对SO(和一些非常相似的问题(1,2,3)),但我还没有找到一个直接的答案.值得注意的是,对这个答案的评论意味着我想要的是可能的,但它对我不起作用.希望用户可以在这里ch :) :)
对于背景,当我执行合并时,我使用"diff3"冲突样式:
git config --global merge.conflictstyle diff3
我已git mergetool
配置为使用kdiff3.
解决合并冲突时,这会显示四个文件:
但是,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)
这有两个问题:
我想在git分支中搜索我和所有其他文件之间共同修改的文件,作为早期冲突检测的方法.有没有一种方法让git允许我这样做,我忽略(或通过shell脚本)?
我现在想到的方法是作为post-commit钩子:
git diff --name-only master
在我正在的分支上执行a ,以确定我将在其他分支中搜索的所有文件(以生成冲突分支的列表)git diff --name-only origin/<remote branch> origin/master
目前,在合并分支之前,我使用以下命令来查看要合并的更改:
base=$(git merge-base other HEAD)
git diff $base other
Run Code Online (Sandbox Code Playgroud)
是否有一个git命令来实现这一目标?
此致,Jochen
我不确定我是否可以信任Git自动合并.这是一个场景.
在master中创建一个程序:
MOVE 0 TO I.
A.
PERFORM X-PROC.
IF I IS EQUAL TO 25 THEN GO TO A.
Run Code Online (Sandbox Code Playgroud)
开发人员1创建了一个分支,并注意到存在一个错误:无限循环.他解决了这个问题:
MOVE 0 TO I.
A.
ADD 1 TO I.
PERFORM X-PROC.
IF I IS EQUAL TO 25 THEN GO TO A.
Run Code Online (Sandbox Code Playgroud)
与此同时,Developer 2创建了一个分支并以自己的方式修复了错误:
MOVE 0 TO I.
A.
PERFORM X-PROC.
ADD 1 TO I.
IF I IS EQUAL TO 25 THEN GO TO A.
Run Code Online (Sandbox Code Playgroud)
两位开发人员都会测试他们的代码并发现它 两者合并到主人:
MOVE 0 TO I.
A.
ADD 1 TO I.
PERFORM X-PROC.
ADD 1 TO …
Run Code Online (Sandbox Code Playgroud) 找不到我的问题所以我想我会问。
我自己和另一个人正在开发这个仓库。我的本地克隆是最新的。
我的伙伴删除了文件“example.txt”,提交并推送了它。
第二天我进来,执行 git status(最新),然后执行 git pull。它从我的本地存储库中删除“example.txt”。
问题是我需要该文件,但我的伙伴不小心删除了它。
我该如何防止将来再发生这种情况?有没有办法让 git pull 在删除某些内容之前先警告我?
因此,我尝试先执行 git fetch,然后执行 git status,但它并没有表明如果合并,我将删除文件。
我想检查运行 git pull 后将对文件进行的更改。我知道我们用来git fetch
从远程存储库检索新对象而不更改本地存储库。但是我如何在编辑器中查看这些更改?
我在 Git 中有两个主要分支:master
和dev
.
我的分支结构如下所示:
B-->E-->F-->G (master branch)
B-->C-->D-->H-->I-->J-->K (dev branch)
Run Code Online (Sandbox Code Playgroud)
之前,我进行了合并,master
并dev
有一个共同的母公司B
。
在提交E
,F
并G
掌握的,我删除了一些文件(说foo
和bar
)不正确,而他们在提交仍然存在C
起在dev
分支。
结果,当我执行三向合并以加入G
并K
创建 commit 时L
,L
不再包含 foo 和 bar !Git 没有以任何方式通知我他们的失踪。
在我看来,由于E
,F
并G
进行了简单的重播后提交C
因此foo
而bar
都不见了。
Git 合并的这种行为对我来说很奇怪。因为我无法知道是否有人从另一个分支删除了一些文件。
我不应该至少在合并时收到有关任何冲突修改的通知吗?