标签: git-merge

使用特定的状态行/行号配置 vimdiff 分割

我正在尝试设置git mergetool为使用vimdiff以下 split 生成(以及为每个 split 定制的配置):

  • 从以下缓冲区 $LOCAL、$BASE、$REMOTE 和 $MERGED 中拆分(水平) [完成]
  • 显示每个分割的行号 [ Todo ]
  • 显示这三个分割中的缓冲区变量的名称:$LOCAL、$BASE、$REMOTE。[去做]
  • $MERGED 拆分状态行应显示%t[$MERGED 拆分已完成]中的文件名

我在本地仓库中使用了这个 git 配置:

git config merge.tool vimdiff
git config mergetool.vimdiff.cmd 'vim +"set number" +"set statusline=%t" -d -c "wincmd J" -O $MERGED $BASE $REMOTE $LOCAL'
git config merge.conflictstyle diff3
git config mergetool.prompt false
Run Code Online (Sandbox Code Playgroud)
  • 在上面的配置中,应该为每个分割显示一个状态行子字符串,但我找不到构建正则表达式的正确方法来将状态行中的文件名减少到三个所需的缓冲区变量名称之一(即“BASE”) ”、“远程”或“本地”)。正则表达式不是必需的,但它似乎是一个有前途的选择。
  • 行号仅显示在一个拆分中,但我希望它们出现在所有四个拆分中。

经过大量谷歌搜索和多次实验后,我仍然无法强制vimdiff显示我想要的状态行/数字...我没有使用 vim-powerline 等状态行插件。如何配置 git 选项以按照vimdiff我需要的方式生成?

我添加了现有拆分的屏幕截图git mergetool …

git vim vimdiff mergetool git-merge

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

使用 git,如何从另一个分支中的文件强制覆盖一个分支中的文件(绕过合并)并提交?

我在一个名为“生产”的分支中有一个文件,我希望被另一个名为“ sqa ”的分支中的特定文件覆盖。

该文件的本质是它不是有多个贡献者的代码。

什么命令可以做到这一点?(两个分支都不是主分支) - 一个分支称为“生产”,另一个分支称为“ sqa ”。


分支“ sqa ”中的文件我想进入分支“生产”并在运行命令后使它们相同,避免任何潜在的合并冲突(强制覆盖,强制接受“sqa”中的文件)/sqa/file => /production/file

如果这是可能的,并且如果有人实际上做到了这一点并测试了这一点,那么我们将非常感激(仅适用于单个文件,而不是多个文件或整个分支合并)。

如果文件存在于分支“ sqa ”中但不存在于“生产”中,则命令的工作方式是否相同(将其复制到那里?)

git git-merge git-branch

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

如何防止 git 自动对大文件进行二进制比较?

我在网上读到,一旦合并中的文件超过某个阈值,git 会自动执行二进制差异而不是文本差异。结果,我们失去了逐行解析的功能,即使差异本身非常小。

我有一个 ~1.3 GB 的 CSV 文件,应该代表一个数据库,根据此链接,这似乎刚刚超过了这个大文件阈值。我目前正在尝试对 Git 的冲突检测算法进行基准测试,因此我需要文本差异算法来在此文件上运行。

有没有一种方法可以增加自动执行二进制差异而不是文本差异的大小阈值?我已经尝试过了

git config --global --add core.bigFileThreshold 2g
Run Code Online (Sandbox Code Playgroud)

但这似乎没有帮助。我认为这没有帮助,因为根据我的理解,这只设置了符合文本差异的文件大小的上限,但文件大小小于并core.bigFileThreshold不能保证它不会将其视为二进制文件。

git git-diff git-merge git-config

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

两个分支之间的 git diff 与合并期间的更改不匹配

我有两个分支,master 和 feature。如果我做:

git diff --name-only master..feature
Run Code Online (Sandbox Code Playgroud)

我得到一长串文件,其中一些是源代码,因此不被 .gitignore 排除

但是,当我尝试将功能合并到主版本中时:

git checkout master
git merge feature
Run Code Online (Sandbox Code Playgroud)

在合并过程中,我只在 master 中更改了一个文件。

为什么会出现这种情况?

另一个有趣的事情是,如果我尝试相反的操作并将 master 合并到功能中,则在功能分支中创建的文件将被删除。

我该如何解决此问题并避免将来出现此问题?

git git-merge

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

GIt merge 不会删除被他们删除的文件

我正在将一个分支合并到我自己的分支中。另一个分支(“他们”)删除了我编辑过的文件。当我合并时,我会遇到冲突。git status显示我的文件已被“他们删除”。

当我添加这个已删除的文件并提交时,该文件仍然保留。为什么是这样?我想要删除该文件,这就是我添加删除操作的原因。 示例屏幕截图在这里

git git-merge

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

为什么会发生 `git merge` 但 `git log --graph` 不显示分支?

我不明白 的行为git merge。有时,我合并一个分支,执行后git log --graph,我可以看到分支合并为绘图,如下所示:

\n
    D  \n   / \\\n  C   B\n   \\ /\n    A\n
Run Code Online (Sandbox Code Playgroud)\n

我已经做了

\n
$ git merge feature1 develop \nUpdating 4c3dd3e..a90a849 Fast-forward \nfileA.txt | 1 +  1 file changed, 1 insertion(+)\n
Run Code Online (Sandbox Code Playgroud)\n

有用。我什至可以删除主题分支,这表明该分支不再是不可或缺的并且合并成功:

\n
$ git branch -d feature1 \nDeleted branch feature1 (was a90a849).\n
Run Code Online (Sandbox Code Playgroud)\n

但是,我看不到图纸。我只有一行:

\n
pedro (develop) second-final-project $ git log --graph \n\n* commit a90a84966040e36b994c0146bbd8a666954bee49 (HEAD -> develop)\n| Author: Pedro Delfino <p.delfino01@gmail.com>\n| Date:   Fri Jul 16 12:29:24 2021 -0300\n| \n| …
Run Code Online (Sandbox Code Playgroud)

git git-merge git-log

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

合并具有来自主分支的恢复合并的发布分支会将恢复合并到主分支中吗?

我们使用具有最新开发的主分支进行开发,并且发布分支经常从该主分支中分离出来并构成一个版本。错误在这些发布分支上得到修复,并且这些错误修复被合并回主分支。我们所有的更改都会通过 PR,您不能手动(强制)推送这些重要分支中的任何一个。

现在,人为错误导致主分支被合并到发布分支(通过 PR)。这是通过包含错误合并提交的恢复提交的 PR 来恢复的。因此,发布分支是“良好的”(除了这两个额外的提交)。随后,这个发布分支被合并到主分支中。接下来发生的事情是出乎意料的:从主分支到发布版本的错误合并以某种方式被忽略(这是合乎逻辑的),但是撤销错误的后续恢复提交被完全合并,有效地删除了自发布分支以来主分支上的所有更改被分裂了。

不幸的是,我不知道这是如何发生的细节,但这可以以某种方式解释为“预期”行为。我计划编写一个 git 命令的小脚本,尽快重复这种序列,并将在这里更新问题。

我的问题是:有没有一种方法(无需强制推送和消除错误提交)能够将发布分支合并到主分支中,而不会使恢复提交对主分支的文件产生影响?现在看来这总是会导致恢复提交改变不应该改变的东西。

git git-merge git-revert

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

Git 在恢复操作后忽略我的更改

伙计们,我有以下情况:

  1. 我创建了一个包含更改 A、B、C(测试分支)的拉取请求。
  2. 我将此分支合并到开发中(测试分支=>开发)。
  3. 我不得不恢复这个合并;
  4. 我合并了其他分支的新东西;

现在我想再次合并来自(测试分支)的这些更改,但我不能,总是我给出的rebase或者pull from test-brach更改不会到来。

我已经reset hard origin/development在本地做了但不起作用。

有人可以帮忙吗?我想我必须从树中删除,但我不知道

git git-merge git-revert

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

从分支的git merge没有用,git merge使用commit做了,发生了什么?

我试图遵循gitflow,所以我创建了一个名为develop的分支,然后是一个以我的功能票命名的分支,做了一些更改并提交了它们.

现在,结帐后我执行

$ git merge #611
Run Code Online (Sandbox Code Playgroud)

我明白了

Already up to date.
Run Code Online (Sandbox Code Playgroud)

然而他们是不同的:

$ git branch -vv
  #611               ca944c8 refs #611 clean repo and create new user settings
* develop            ac605bd [origin/develop] Apk after sprint of November
Run Code Online (Sandbox Code Playgroud)

我注意到了提交号并执行了

$ git merge ca944c8 
Run Code Online (Sandbox Code Playgroud)

一切都像我期待的那样奏效.

我究竟做错了什么?如果我连续几次提交,我会合并每个提交吗?

git git-merge git-flow

0
推荐指数
1
解决办法
49
查看次数

为什么在合并git中更改的文件时没有合并冲突?

我完全不习惯使用git作为开发的版本控制系统,我仍然在学习它.我对拉取请求期间的合并冲突感到困惑.根据我的理解,当文件的同一行在两个不同的分支中不同时,通常会发生合并冲突.我有一个具有以下树结构的git存储库.所以我从"master"创建了一个"dev"分支,然后从"dev"创建了"D1"和"D2"分支.master-> dev - >(D1,D2)在"dev"分支中,我有一个文件名"file1.txt",第一行为1111111111111,在"D1"分支中我有相同的文件"file1.txt"第一行为AAAAAAAAAAAAAAA.我创建了一个拉动请求,将"D1"分支合并到"dev",并预期会出现合并冲突,因为两个分支中的第一行"file1.txt"不同.

但是git显示Able合并消息表示没有合并冲突,"dev"分支更改被"D1"分支更改覆盖.知道我错过了什么.

git github git-merge

0
推荐指数
2
解决办法
698
查看次数