我正在从Subversion过渡到Mercurial,在那里我习惯使用svnmerge.py来跟踪已经合并的更改,或者已经阻止合并的更改:
# Mark change 123 as having already been merged; it will not be merged again, even if a range
# that contains it is subsequently specified.
svnmerge.py merge -M -r123
#
# Block change 326 from being considered for merges.
svnmerge.py merge -X -r326
#
# Show changes that are available for merging from the source branch.
svnmerge.py avail
#
# Do a catchall merge of the remaining changes. Neither change 123 nor change 326 will be
# considered …Run Code Online (Sandbox Code Playgroud) 这有点像我想从分支中挑选所有提交除了一个,但我想在一个命令中做到这一点......
•我们剪切了一个版本,创建了一个分支
•该版本将所有poms中的版本号更改为分支上的版本号,将更改版本号更改为其他编号
•我已经对分支机构进行了许多其他更改,并希望将这些更改复制回主服务器
•我已将分支合并为master,这会导致代码更改,但版本号也会更改,从而在每个pom中产生冲突
有没有简单的方法让我将所有的pom文件还原为合并前的内容,然后将其作为合并的结果提交?
我正在尝试从两个不同的工作分支中挑选更改,即我想挑选从分支linear到分支的最后 5 个提交diagonal。
git cherry-pick -n -x linear~6..linear
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,第一个精心挑选的提交存在一些合并冲突。我把它们找出来,例如用git status,解决它们并用 更新索引git add。现在我想继续剩下的但是
git cherry-pick --continue`
Run Code Online (Sandbox Code Playgroud)
导致(抱歉是翻译的,英文错误信息可能略有不同):
error: Your local changes will be overwritten by "cherry-pick".
Note: Stash your changes by using "stash" in order to continue.
fatal: "cherry-pick" failed.
Run Code Online (Sandbox Code Playgroud)
我做错了什么?如何解决冲突,但仍然只在一次提交中从多个提交中进行挑选?这对我来说很重要,因为其中一些提交将通过跟随提交被撤销。
这可能是“How to do git cherry-pick --continue in SourceTree?”的重复。但我没有看到我的问题在那里得到回答。
我正在尝试进行一些更改,但我不想在这个分支中提交它们,我只想在本地拥有它们。
为此,我正在使用
git cherry-pick <hash> --no-commit
Run Code Online (Sandbox Code Playgroud)
但是,这会自动将它们添加到舞台,然后,我必须使用手动重置它们
git reset HEAD <files>
Run Code Online (Sandbox Code Playgroud)
git 没有选项可以让cherry pick 不提交,也不添加到索引中吗?
就像是:
git cherry-pick <hash> --no-commit --no-stage
Run Code Online (Sandbox Code Playgroud)
我知道这个技巧会做我想要的,但我必须在提交中指定所有文件:
编辑
也试过这个,但它也被添加到索引中。
git checkout hash -- <list of files>
Run Code Online (Sandbox Code Playgroud)
而这些文件,可能不会共享相同的公共路径。我正在尝试使其自动化
我尝试将提交移动到另一个分支之上,忽略目标分支中完成的所有更改。
\n\n目前的情况是:
\n\n master\n \xe2\x86\x93\n--A--B--C\n \\\n D--E\nRun Code Online (Sandbox Code Playgroud)\n\n我想将提交 E 移到 C 前面
\n\n master\n \xe2\x86\x93\n--A--B--C--E\'\n \\\n D--E\nRun Code Online (Sandbox Code Playgroud)\n\nE\' 与 E 相同,只是父级现在是 C 而不是 D(这意味着 E 和 E\' 的树应该相同)。
\n\n更确切地说:
\n\n"git cat-file -p E" shows e.g.\ntree b98c9a9f9501ddcfcbe02a9de52964ed7dd76d5a\nparent D\n\n"git cat-file -p E\'" should show\ntree b98c9a9f9501ddcfcbe02a9de52964ed7dd76d5a\nparent C\nRun Code Online (Sandbox Code Playgroud)\n\n我尝试使用不同的参数进行 rebase 以及cherry-pick,但所有这些最终都尝试将 C 中所做的任何更改合并到新的 E\' 提交中:(
\n\n到目前为止我发现的唯一防止大规模合并的解决方案是
\n\ncheck out C\ncopy over all stuff from E to C\ncommit and get E\'\nRun Code Online (Sandbox Code Playgroud)\n\n现在树是相同的,父对象不同,但必须有一种更简单、更快的方法,因为所要做的就是使用现有的树对象创建一个简单的提交对象。
\n$ git cherry-pick 5de83068
error: Your local changes to the following files would be overwritten by merge:
Components/ApplicationEnums/Application.cs
Please, commit your changes or stash them before you can merge.
Aborting
$ git status
# On branch master
nothing to commit (working directory clean)
更新对不起,我切换到另一个分支,并再次切换回来,不能重现这个:(
我想使用git cherry-pick将提交从一个文件应用到另一个文件而不进行重命名检测(对于许多类似的文件会导致错误的检测).
(主)directory1 /文件
(主)directory2 /文件
但我不知道如何告诉樱桃挑选相应的目录.
我有另一个案例,它工作正常git-1.7.5.rc1,现在支持合并策略又名-Xsubtree=.
(主)directory1 /文件
(分支)文件
我打了电话
git cherry-pick --no-commit -Xsubtree=directory1 branch~95
Run Code Online (Sandbox Code Playgroud)
并且它工作正常,从(branch~95)文件更改为(master)directory1/file而不进行重命名检测.
对于第一个案例,我尝试过调用git cherry-pick- Xsubtree=../directory1但这没有用.我想我必须告诉git cherry-pick以某种方式离开directory2然后转到directory1来应用补丁.
有没有人有这个问题的解决方案?
编辑:我添加了一些我认为不必要的信息,但事实并非如此.我有两个分支,A和B.在A中进行三次提交后更改了file.c我想将它们挑选到B中,还有一个在A~1中更改的file.h
> git cherry-pick A~2
Success
> git cherry-pick A~1
error: could not apply 81e0723...
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'
> git status
You are currently cherry-picking commit 81e0723.
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: some/unrelated/file.txt
both modified: file.c
Run Code Online (Sandbox Code Playgroud)
现在,在查看某些/不相关的/ file.txt时,它包含对中间某处的file.h的更改.所以这看起来像是git中的一个bug.所以我现在将手动撤消一些/不相关/ file.txt的更改并将它们添加到file.h.
我们有一个开发分支,它是我们的主人和一个单独的维护分支.当我修复bug时,我经常需要从主服务器到维护服务器进行提交,反之亦然.通常我通过执行以下程序来实现这一目标......
我遇到的问题是因为分支已经变得非常不同我每次切换时都需要重建整个项目,这需要花费10分钟.这是预期的,但我不想这样做,因为我经常在分支机构之间切换.所以为了避免这种情况,我创建了第二个工作目录,以便为每个分支创建一个目录.这个问题是我无法将原始的主提交选择到维护目录中,直到我将该提交从远程提取到维护目录的主分支.当我这样做时,我必须完全重建.
有没有办法将提交拉入我的维护目录的主分支而不切换?或者,有更好的方法完全这样做吗?我们最近从CVS切换到Git,所以我对它并不熟悉.
我想知道我们/他们的策略是否有任何樱桃采摘方式.换句话说,我想通过以下命令从dev分支中选择多个提交到主分支,
git cherry-pick HASH1 HASH2 HASH3 -n
Run Code Online (Sandbox Code Playgroud)
如果没有冲突,此命令应该接受所有引用的提交并准备未分级的更改.但是,如果发生冲突,我需要解决并继续挑选.对于所有冲突,我的意图是在开发中选择任何东西(这意味着--strategy-option = ours).
樱桃采摘时有没有办法提供这样的选择.