相关疑难解决方法(0)

使当前的Git分支成为主分支

我在Git中有一个存储库.我做了一个分支,然后对主人和分支做了一些改变.

然后,几十次提交之后,我意识到分支处于比主设备好得多的状态,所以我希望分支"成为"主设备并忽略主设备上的更改.

我无法合并它,因为我不想在master上保留更改.我该怎么办?

额外:在这种情况下,'old'主服务器已经被push转到另一个存储库,例如GitHub.这怎么改变了?

git

1555
推荐指数
10
解决办法
69万
查看次数

是否有"他们的"版本的"git merge -s ours"?

当使用主题分支"B"合并到"A"时git merge,我会遇到一些冲突.我知道使用"B"中的版本可以解决所有冲突.

我知道git merge -s ours.但我想要的是类似的东西git merge -s theirs.

它为什么不存在?在与现有git命令冲突合并后,如何获得相同的结果?(git checkout来自B的每个未合并文件)

更新:从分支A(合并提交点到树的B版本)丢弃任何东西的"解决方案"不是我想要的.

git git-merge

818
推荐指数
11
解决办法
43万
查看次数

如何恢复因硬盘故障而损坏的Git对象?

我遇到了硬盘故障导致Git存储库的某些文件损坏.运行时,git fsck --full我得到以下输出:

error: .git/objects/pack/pack-6863e0a0e4b4ded6090fac5d12eba6ca7346b19c.pack SHA1 checksum mismatch
error: index CRC mismatch for object 6c8cae4994b5ec7891ccb1527d30634997a978ee from .git/objects/pack/pack-6863e0a0e4b4ded6090fac5d12eba6ca7346b19c.pack at offset 97824129
error: inflate: data stream error (invalid code lengths set)
error: cannot unpack 6c8cae4994b5ec7891ccb1527d30634997a978ee from .git/objects/pack/pack-6863e0a0e4b4ded6090fac5d12eba6ca7346b19c.pack at offset 97824129
error: inflate: data stream error (invalid stored block lengths)
error: failed to read object 0dcf6723cc69cc7f91d4a7432d0f1a1f05e77eaa at offset 276988017 from .git/objects/pack/pack-6863e0a0e4b4ded6090fac5d12eba6ca7346b19c.pack
fatal: object 0dcf6723cc69cc7f91d4a7432d0f1a1f05e77eaa is corrupted
Run Code Online (Sandbox Code Playgroud)

我有存储库的备份,但包含包文件的唯一备份已经损坏了.所以我认为我必须找到一种方法从不同的备份中检索单个对象,并以某种方式指示Git生成一个只有正确对象的新包.

你能否告诉我如何修复我的存储库?

git corruption data-recovery

92
推荐指数
3
解决办法
9万
查看次数

Git合并强制覆盖

我有一个分支demo,我需要与master分支合并.我可以使用以下命令获得所需的结果:

git pull origin demo
git checkout master
git pull origin master
git merge demo
git push origin master
Run Code Online (Sandbox Code Playgroud)

我唯一关心的是,如果有任何合并问题,我想告诉git覆盖master分支中的更改而不给我合并提示.因此,demo分支中的更改基本上应该自动覆盖master分支中的更改.

我环顾四周有多种选择,但我不想冒险合并.

git merge github

71
推荐指数
6
解决办法
14万
查看次数

合并但覆盖Git中的更改

当我在Git中合并一个分支来掌握时,我经常会遇到合并冲突.有没有办法合并一个分支,只是覆盖当前分支中的东西?

git conflict

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

如何从Git历史记录中删除文件?

我之前添加的信息必须是私有的,从项目中删除,不是问题,但也必须从历史中删除.

我使用Git和Github(私人账户).


这个线程上显示类似的东西,但这里是一个旧文件,添加到一个功能分支,该分支合并到一个开发分支,最后合并到master,因为这样做了很多更改.所以它不一样,所需要的是更改历史记录,并隐藏该文件以保护隐私.

git github

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

如何通过获取当前分支中的版本来自动解决Git冲突?

让我们假设foo/bar.txt在运行时遇到合并冲突:

$ git checkout A
$ git merge B
Run Code Online (Sandbox Code Playgroud)

我想foo/bar.txt从分支A中自动解决冲突.(我知道我在做什么,我确实需要这个.分支B中的版本是错误的,我不关心失去工作中的变化在这种情况下树.)似乎我可以通过运行这些命令来做到这一点:

$ git reset    foo/bar.txt
$ git checkout foo/bar.txt
Run Code Online (Sandbox Code Playgroud)

是否有更简单的单命令解决方案?

不幸的是,foo/bar.txt即使没有冲突,这些命令也会改变,我不希望这样.如果没有冲突,我希望保持foo/bar.txt在任何状态下git merge B都离开它.

所以我需要一个Unix shell命令,它会检测是否存在冲突foo/bar.txt,如果有,它将通过foo/bar.txt从当前分支获取版本来解决冲突.它不会做任何其他事情,即它不会修改其他文件,它不会提交更改,并且foo/bar.txt如果该文件中没有冲突则不会更改.

git merge automation conflict

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

用另一个分支完全替换分支

我有 3 个分支:developmentqastagingdevelopment我在和中都有几乎相同的代码,因此从到qa进行公关不会产生太多更改(和/或冲突)。developmentqa

但现在我把所有的东西都从 搬到qastaging。而且qa代码实际上与 完全不同并且是新的staging,那么最好的选择是什么?我搜索并找到了另一个答案

git checkout qa
git merge -s ours staging
git checkout staging
git merge qa
Run Code Online (Sandbox Code Playgroud)

这对我的情况来说是个好主意吗?提前致谢!

编辑:我不想丢失暂存分支的所有提交。

git

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

GIT:如何合并两个分支而不实际合并文件(普通合并)

有没有办法在git合并两个分支而不合并文件?换句话说就是绘制合并箭头.

假设我有分支A和B.我需要将分支B合并到A,但不需要B中的所有更改,而只需要链接到分支.

git checkout A
git merge B --no need changes
Run Code Online (Sandbox Code Playgroud)

通常有一种方法可以合并两个没有子模块的分支.我想保留分支A中的子模块,仍然需要合并分支B.

更新

git merge -s我们的BRANCH_NAME为我工作.

git git-merge

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

(Git合并)何时使用“我们的”策略,“我们的”选项和“他们的”选项?

git merge文档中提取的递归合并策略的定义。

这只能使用3向合并算法解析两个磁头。当有一个以上的公共祖先可用于三路合并时,它将创建一个公共祖先的合并树,并将其用作三路合并的参考树。据报道,这样做可以减少合并冲突,而不会因对Linux 2.6内核开发历史记录中的实际合并提交进行测试而导致合并错误。此外,这可以检测和处理涉及重命名的合并。当拉或合并一个分支时,这是默认的合并策略。

递归策略可以采用以下选项:

如前所述,递归策略是默认策略,它使用3向递归合并算法(在此处Wikipedia上进行了说明)。

我的理解是冲突的大块必须手动解决,并且通常以这种方式表示

<<<<<<<<<<<
developer 1's code here
============
developer 2's code here
>>>>>>>>>>>
Run Code Online (Sandbox Code Playgroud)

我们的递归合并策略的选择进行了说明如下:

通过支持我们的版本,此选项可以强制自动解决冲突的大块。与另一棵树不冲突的更改会反映到合并结果中。对于二进制文件,全部内容都是从我们这边获取的。

这不应与我们的合并策略混淆,该策略甚至根本不看另一棵树包含的内容。它丢弃另一棵树所做的所有操作,声明我们的历史包含其中发生的所有事件。

现在假设我有两个分支Y和M的头,并且具有一个共同的基本祖先B,如下所示

在此处输入图片说明

当使用默认递归策略合并Y和M时,第30行将变为Print("hello");行,因为在第30行,Y表示从基本祖先开始的更改,而M则不是。但是如果我在M分支上并运行

git merge -s recursive -X ours Y

第30行会成为Print("bye");合并后的输出吗?

对于那些说这很明显的人,请注意我们的选项指出

通过支持我们的版本,此选项可以强制自动解决冲突的大块

但是(据我了解)在第30行没有冲突的块。

为了完整起见,我还将提供他们的选项的文档:

这与我们的相反。


我们的策略文档如下:

这样可以解析任意数量的head,但是合并的结果树始终是当前分支head的树,有效地忽略了所有其他分支的所有更改。它旨在取代侧支的旧开发历史。请注意,这与递归合并策略的-Xours选项不同。

所以回到上面的例子,如果我跑了

git merge -s ours Y

在分支M上,很明显第30行将Print("bye");在合并的输出中。在这种情况下,为什么也没有 …

git version-control merge github

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

Git merge:从"他们的"分支中取出一切

我有两个分支,"私人"和"公共".我在私人和定期工作,我想替换"公共"分支中的所有内容,以在"私人"中拥有一个干净的文件副本.

由于我不希望"私有"的历史转到"公共",我使用git merge --squash,但我仍然手动逐个解决合并文件.有一个更好的方法吗?

git merge git-merge branching-and-merging

6
推荐指数
2
解决办法
4067
查看次数

git 覆盖分支但保留历史记录

我想用另一个开发分支(即 master)覆盖开发分支中的所有内容,但我不想错过开发分支上较旧的提交。

这就是我要的:

我想要的是

我尝试与我们的策略合并进行硬重置,但开发分支不断丢失旧的提交。

我想要获得的是蓝色和红色之间差异为零的提交,以及在蓝色与第一个黑色差异时删除的代码。


只是分享迄今为止尝试过的解决方案的概述。通过做这个:

git checkout master
git merge -s ours dev
git checkout dev
git merge master
Run Code Online (Sandbox Code Playgroud)

我得到了这个(开发人员从主人那里获取了所有历史记录)

合并

通过做这个

git checkout dev
git reset --hard master
Run Code Online (Sandbox Code Playgroud)

我得到了这个(如果我推动开发,我将丢失所有黑色提交):

重置

如果我这样做:

git checkout dev
git merge $(git commit-tree -p dev -m "Align master > dev" master^{tree})
Run Code Online (Sandbox Code Playgroud)

我得到了这个(几乎完美,但我很难回忆起我完成这个技巧的确切时刻):

在此输入图像描述

git

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