例如,我有一个dev分支和一个stable分支.
如果我有樱桃采摘几个从承诺dev到stable.
有没有什么办法让Git的认识樱桃采摘提交的,并避免双合并,如果我以后合并,重订或摘樱桃的重叠范围,从dev回stable?(这是SVN中的基本合并跟踪功能)
我有两个分支:主干,生产.我在trunk中发现了一个问题,修复并提交了它,推了它.现在它已经过测试,我需要将更改合并到生产分支中作为热修复.我尝试使用樱桃挑选.但是它不起作用,因为修复程序中的更改文件在某些重构期间在先前在主干中重命名,我不想将其投入生产.
我不希望合并所有内容,但只采取此提交.樱桃选择失败了"我们删除"冲突(当然,新文件甚至从未存在于生产分支中).
将更改带入旧文件的正确方法是什么?
我在一个分支机构工作X.我做了一个提交并推了推.
然后我想cherry-pick分支Y.但由于存在一些未合并的文件,我收到以下消息:
error: 'cherry-pick' is not possible because you have unmerged files.
hint: Fix them up in the work tree,
hint: and then use 'git add/rm <file>' as
hint: appropriate to mark resolution and make a commit,
hint: or use 'git commit -a'.
fatal: cherry-pick failed
Run Code Online (Sandbox Code Playgroud)
现在,我只想删除我的分支Y,然后重新创建分支Y,然后想要手动编辑我试图挑选的文件.
目前,我无法删除分支,因为它是我的工作分支.我不能checkout任何其他分支.尝试更改分支时出现以下错误.
mod/assign/locallib.php: needs merge
error: you need to resolve your current index first
Run Code Online (Sandbox Code Playgroud)
我只需要删除分支Y,而不会丢失分支上的任何内容X.
编辑#1
我编辑了这个文件 mod/assign/locallib.php …
我想知道是否可以从藏匿处采摘樱桃.
git stash save "test cherry-pick from stash"
*git cherry-pick stash@{0}* --> Is this possible?
Run Code Online (Sandbox Code Playgroud)
我在exception上面尝试时得到以下内容command:
Error:
~/Documents$ git cherry-pick stash@{0}
error: Commit 4590085c1a0d90de897633990f00a14b04405350 is a merge but no -m option was given.
fatal: cherry-pick failed
Run Code Online (Sandbox Code Playgroud) 假设这是我的git历史
Z / A -- C -- D \ / B
我的HEAD目前在Z.我想樱桃挑选B和C.如果我的理解是正确的,我应该这样做:
git cherry-pick B
git cherry-pick C -m 1
git commit --allow-empty
Run Code Online (Sandbox Code Playgroud)
它在我的情况下工作,因为C是一个无操作(因此之后的空提交,我需要提交其他原因),但我想知道后面的参数是什么-m.以下是我从文档中读到的内容:
-m父号
- 主线父母号码
通常你不能挑选合并因为你不知道合并的哪一边应该被认为是主线.此选项指定主线的父编号(从1开始),并允许cherry-pick重放相对于指定父级的更改.
在我的情况下,C有两个父母,但我怎么知道哪一个是1和2,更重要的是当我选择1或2时什么时候重要?
我准备将trunk中的某些修订版合并到发布分支中.我已经使用mergeinfo检查了有多少修订版本有资格合并,那就是42.虽然确定可能并且不太难以检查每个修订日志并决定是否应该合并.然后我会用TortoiseSVN检查日志并使用命令行svn merge -c rev1,rev2功能或-r当然的范围.
我想知道TortoiseSVN是否有一个工具来使这个樱桃更容易.我已经google了,但发现只有TortoiseGit才有它.
任何其他使这个过程更容易(和更快)的方法也是受欢迎的!
我一直在尝试使用
git log --no-merges --cherry-pick --right-only master...my-branch
Run Code Online (Sandbox Code Playgroud)
生成my-branch中但不在master中的提交列表(根据git-log文档).但是,列表中仍有许多等效的提交.如果我显示它们和它们的补丁,除了commit id之外没有区别.
git show 16cbd0e47406a4f7acbd6dc13f02d74d0b6a7621 >patcha
git show c53c7c32dcd84bfa7096a50b27738458e84536d5 >patchb
diff patcha patchb
1c1
< commit 16cbd0e47406a4f7acbd6dc13f02d74d0b6a7621
---
> commit c53c7c32dcd84bfa7096a50b27738458e84536d5
Run Code Online (Sandbox Code Playgroud)
甚至将git patch-id它们视为等效:
git show c53c7c32dcd84bfa7096a50b27738458e84536d5 | git patch-id
2b5504fb9a8622b4326195d88c7a20f29701e62b c53c7c32dcd84bfa7096a50b27738458e84536d5
git show 16cbd0e47406a4f7acbd6dc13f02d74d0b6a7621 | git patch-id
2b5504fb9a8622b4326195d88c7a20f29701e62b 16cbd0e47406a4f7acbd6dc13f02d74d0b6a7621
Run Code Online (Sandbox Code Playgroud)
怎么不git log --cherry-pick把这些作为重复?
我想知道是否有办法将一个提交复制到另一个分支而不检查该分支.
例如,我有两个分支:master和parallel_version.
我在parallel_version分支机构,我在这些分支机构的常见文件中发现了一个错误.
我已修好并承诺.如果我使用git-svn,如何将此提交复制到另一个分支?
通常我会这样做:
$ git checkout master
$ git cherry-pick parallel_version
$ git checkout parallel_version
Run Code Online (Sandbox Code Playgroud)
有更好的方法吗?
我在 Sourcetree 上使用 git 有一个错误。我创建了一个名为 sprints/Mycompany_sprint_1 的本地分支(因为我希望它属于一个类别),然后我从另一个分支中对该分支进行了多次挑选。之后,我尝试将所有更改推送到我的分支上,但我收到下一个错误:
远程分支 ''(本地分支 = 'sprints/Mycompany_sprint-1')无效。Ref 名称必须遵循 git ref-format 规则:https : //www.kernel.org/pub/software/scm/git/docs/git-check-ref-format.html 已完成,但有错误,见上文。
但是,如果我转到链接,我将遵循(就我所见)所有规则,因为查看第一条规则:
它们可以包含斜杠 / 用于分层(目录)分组,但斜杠分隔的组件不能以点开头。或以序列 .lock 结尾。
我检查问题是否可能是 spring 类别已经存在,但事实并非如此。
谁能告诉我我做错了什么?我恐怕看不到这里的错误......
我有以下git历史:
A --- B --- C --- D' --- E' [master]
\
\ --- D --- E --- F [stable]
Run Code Online (Sandbox Code Playgroud)
我们有一个策略来挑选从稳定到掌握的所有变化; D'和E'是来自稳定分支的樱桃采摘承诺,F不是樱桃采摘(已被遗忘).
我怎样才能得到一个与F绑在一起的差异(这不是樱桃挑选给主人)?
我们不希望使用合并,因为:
cherry-pick ×10
git ×9
branch ×1
diff ×1
git-branch ×1
git-diff ×1
git-log ×1
svn ×1
tortoisesvn ×1