假设我通过git存储库与某人合作,并且有一个特定的文件,我永远不想接受任何外部更改.
有没有办法让我设置我的本地仓库,以便每当我拉动时不抱怨冲突的合并?我想在合并此文件时始终选择我的本地版本.
假设我想从发布分支合并到主分支,并且在发布分支中有一些我不希望包含在主分支中的提交.有没有办法进行合并,以便一个或多个提交不会合并?
到目前为止,我的策略是执行以下操作(在掌握中):
git merge --no-commit release-branch
# Resolve conflicts and apply reverse patch of the commits that I don't want included
git commit # Edit commit message so that it lists the commits that have been reverse-patched
Run Code Online (Sandbox Code Playgroud)
有一个更好的方法吗?
git merge使用以下选项执行a 时:
git merge -X theirs master
偶尔会有冲突的文件:
CONFLICT(修改/删除):在master中删除File_A.java并在HEAD中修改.File_A.java的版本HEAD留在树中.
但是,我希望-X theirs在这些情况下识别该选项,并使用theirs更改的版本,该版本用于删除该文件.
是否有原因导致此类冲突无法自动解决,特别是因为我提供了一个特定的合并策略,建议它应该删除该文件?
此外,如何(如果可能)我可以更新我的merge命令以使用theirs此类冲突的版本?
我有一个主人和我的(网络)应用程序的测试分支.这些项目几乎相同,只有一个设置应用程序的文件,比如说"setup".
每当我将一个分支合并到另一个分支时,我希望该分支保持其版本的设置.也就是说,git不应该尝试将更改合并到该文件.
我按照Pro Git书中的指导创建了一个.gitattributes文件,其中包含"setup merge = ours"行.但是,这不起作用 - 如果我引入冲突,也不能快速合并.
(确切地说:
$: mkdir gitest
$: cd gittest
$: git init
$: echo "setup merge=ours" >> .gitattributes
$: echo "master" >> setup
$: git add setup .gitattributes
$: git commit -a -m ...
$: git branch test
$: git checkout test
$: echo "test" >> setup
$: git commit -a -m ...
$: git checkout master
$: git merge test
Run Code Online (Sandbox Code Playgroud)
预期结果:setup包含单词"master",而git执行ff merge并且setup是"test".)
我需要排除dist/合并错误的文件夹,我不在乎它是否theirs,ours或其他策略,但我需要将其保留在修订控件中,因为这是部署到Heroku的方法..gitattributes脚本似乎是要走的路.但我似乎无法做到这一点.
我读了这个规范的答案和这个类似的答案,但无法找出我做错了什么.
我的.gitattributes配置:
* text=auto
dist/ merge=keepMine
Run Code Online (Sandbox Code Playgroud)
我的相关部分 .git/config:
[merge "keepMine"]
name = always keep mine dist during merge
driver = keepMine.sh %O %A %B
Run Code Online (Sandbox Code Playgroud)
和keepMine.sh(在我的项目根文件夹中,没有文件夹不在路径中,但复制到路径中的文件夹没有帮助,并且不是一个好的解决方案,因为脚本应该是修订控制的一部分所以所有开发人员都会得到它):
# copied as is from the SO answer
# I want to keep MY version when there is a conflict
# Nothing to do: %A (the second parameter) already contains my version
# Just indicate the merge …Run Code Online (Sandbox Code Playgroud) 我正在尝试合并,我有冲突,一个文件大量分歧.eclipse git merge工具非常适合小的更改,但我的一个文件很大,并且有数百个明确标记的冲突部分.我不能为我的生活找到一个简单的方法来使用我们的"我们的"策略只使用我的版本并放弃远程版本进行合并.
在Linux或Mac上,我很容易从命令行执行此操作,但我在公司的Windows计算机上并且没有命令行git.我甚至尝试了从包资源管理器中的文件的上下文菜单中执行"替换为" - >"头部修订"的解决方法,但由于存储库处于合并冲突模式,因此该操作被禁用.这将是一个很好的解决方案,但是仍然可以更好地将"我们的"或"他们的"策略应用于合并工具中的整个文件.
我不得不求助于硬复位,复制我的文件,进行合并,然后用我的干净副本替换合并版本.我错过了一个更简单的方法吗?
我有一个主题分支(关闭master)有很多变化.在本主题分支的历史中,对某个文件进行了大量更改.如何在我的主题分支的历史记录中删除对此文件的所有更改?
补充说明:
git filter-branch以某种方式用于此吗?