当使用主题分支"B"合并到"A"时git merge,我会遇到一些冲突.我知道使用"B"中的版本可以解决所有冲突.
我知道git merge -s ours.但我想要的是类似的东西git merge -s theirs.
它为什么不存在?在与现有git命令冲突合并后,如何获得相同的结果?(git checkout来自B的每个未合并文件)
更新:从分支A(合并提交点到树的B版本)丢弃任何东西的"解决方案"不是我想要的.
假设我通过git存储库与某人合作,并且有一个特定的文件,我永远不想接受任何外部更改.
有没有办法让我设置我的本地仓库,以便每当我拉动时不抱怨冲突的合并?我想在合并此文件时始终选择我的本地版本.
我试图采取一个变化的分支,并将其恢复为与它分离的上游相同.这些变化都是本地的,并且已被推送到github,因此它们都没有git reset或者git rebase真的可行,因为它们改变了历史,这对于已经被推动的分支来说是一件坏事.
我也尝试git merge了各种策略,但没有一个撤消本地更改,即如果我添加了一个文件,合并可能会使其他文件重新排队,但我仍然会有上游没有的文件有.
我可以在上游创建一个新的分支,但我真的很喜欢合并,在修订历史方面应用所有更改来获取我的分支并使其与上游相同,以便我可以安全地推动该更改没有破坏历史.是否有这样的命令或一系列命令?
我在这里读了几个git问题,但找不到这个问题的答案:
我有一个公共和私人分支机构,我想允许某些文件发散.
这些是包含密码和本地自定义的配置文件.
我确实希望能够以两种方式合并分支:从私有到公共和返回,但我不希望自动合并这些特定文件.
有没有办法以这种方式设置git?我很想找到一个自动化解决方案:) - 这样可以像往常一样进行合并.
编辑:这是适合我的解决方案(感谢VonC对gitattribute的建议)
对我来说唯一意想不到的事情是"合并保护"只有在两个分支中的文件分歧后才开始工作,而不是在应用以下配置后立即开始工作
.gitattributes(如果你想分享这个,可以用git跟踪)或.git/info/attributes:
file1 merge=keepmine
path/file2 merge=keepmine
Run Code Online (Sandbox Code Playgroud)
keepmine是一个命名的自定义合并管理器,它只是一个do-nothing命令而不是所选文件的内部合并驱动程序,它在下面设置
从私人分支到公共分支合并时,我通常会这样做git merge --squash private.这样私有编辑就不会进入公共分支的git历史.
的.git /配置:
#public repository
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = <public repo git url>
#private repository
#has to set up with git init and populated with the initial commit to branch mybranch
[remote "private"]
push = +:
url = /path/to/local/private/repo
[merge "keepmine"]
name = dont_merge_selected_files
driver = echo %O %A %B
[branch "master"]
remote = origin
merge …Run Code Online (Sandbox Code Playgroud) 我已经检查了各种问题.第一个提供了一个巨大的问题和答案(相关的?不确定),第二个提供了错误的答案作为最佳答案.
我有一个叫做的分支great-use-this.我有另一个叫做的分支master.我想合并great-use-this到master中,并避免自动合并冲突.
什么是做到这一点最简单和最简单的方法是什么?
注意:我实际上已经想到了这一点(使用第三个分支ours,但是无论如何这对SO来说会很好.
我想知道.gitattributes中的merge = union选项是否适用于.pbxproj文件.
该选项的联机帮助页:
对文本文件运行3向文件级别合并,但从两个版本中获取行,而不是留下冲突标记.这往往会以随机顺序在结果文件中保留添加的行,用户应验证结果.
通常,对于将90%的文件添加到项目中的情况,这应该没问题.有没有人有这方面的经验?
我在my_branch中有一个二进制文件,当我需要对它进行更改时,git当然不会合并它.
所以我现在做的是:
git checkout my_branch
# make a change to gui.bin
mv gui.bin ~/
git commit -a
mv ~/gui.bin .
git commit -a
# git rebase to 1 commit
git checkout master
git merge my_branch
Run Code Online (Sandbox Code Playgroud)
但是有更简单的方法吗?
我维持一个回购的分支.
那个一直跟踪二进制文件(这是一个sqlite3文件)的repo.
每次我从该repo中提取时,由于该二进制文件,我都会遇到合并冲突.
解决这种合并冲突的正确方法是什么?
在git中管理二进制文件(如sqlite3*.db文件)的正确方法是什么?
我需要经常在dev和master之间进行合并.
我还有一个提交,我只需要应用于dev,以便在本地工作.
之前我只从dev合并到master,所以我有一个分支production_changes,其中包含dev特殊提交的"undo commit".从大师那里我合并了这个.习惯工作正常.
现在,每次我从dev合并到master,反之亦然,我必须一次又一次地挑选并应用相同的提交:(.这是UGLY.
我可以调整什么策略,以便可以在两个分支之间无缝合并,但仅在其中一个分支上保留一些更改?
我想用另一个开发分支(即 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的新手.
背景:在我的约8位开发人员小组中,我应该是Git的版本控制大师.由于我没有很多Git经验,这很令人兴奋.我决定需要一个共享存储库,它将是生产代码的权威主数据库和开发代码的主要会合点.当我们为公司工作时,我们确实需要至少显示生产代码的授权来源.
我已经指示开发人员在从共享存储库中提取时进行pull-rebase,然后推送他们想要共享的提交.我们遇到了特定类型文件的问题.
其中一个文件,我目前认为是典型的问题,称为web.config.我们想要一个版本控制的主web.config供开发人员克隆,但是每个开发人员都可以对这个文件进行少量编辑,他们希望在本地保存但不共享.
问题是这样的:我如何告诉git 不考虑本地更改或提交此文件以进行变基和推送的相关性?Gitignore似乎没有解决问题,但也许是因为我把web.config放入.gitignore太晚了?
在一些简单的情况下,我们堆叠了本地更改,重新定位,推送和弹出堆栈,但这似乎并不是一直都有效.我还没有拿起这个模式.
关于pull --rebase的已发布文档倾向于处理更简单的情况.
或者我完全有错误的想法?我们在滥用Git吗?
Dougkiwi
我维护了一小部分我自己的git存储库,有时候,我想更改我存储'master'存储库的机器或目录.不幸的是,这会导致存储库的所有工作副本中断.
有没有办法在"远程"路径中为我的本地工作副本使用环境变量?
如果没有,是否有一种简单的方法可以欺骗Git(除非是一个强力sh脚本扩展变量,在推送之前将其移除并重新分配到远程位置等)在推拉时扩展变量?