正如我在这里所关注的那样,我在另一个本地分支中有旧提交[包含abc.cpp,def.cpp].
几个月后我想要使用这些更改,但在我目前的分支中,abc.cpp已升级.那么如果我挑选那么它会将旧的abc.cpp的变化整合到新的abc.cpp [最近的工作目录副本]中吗?
什么是简单的方式来请求"樱桃选择从另一个分支只有触摸特定文件的提交"?即该命令git log ..other-branch afile给出了触摸"afile"的其他分支中的未合并提交列表; 如何请求在当前分支上重播同一组提交?
在发布时,我检查了以前发布的标签,并在其中挑选了新项目(使用git cherry-pick <commit-id>)。然后,我使用git tag <tag-name>.
这会影响我精心挑选的旧标签吗?
从Merge、update 和 pull Git 分支上接受的答案中而不使用 checkouts,
如果分支 B 会导致非快进合并,则不能在不先检查 A 的情况下将分支 B 合并到分支 A 中。这是因为需要一个工作副本来解决任何潜在的冲突。
我推断并说您也git cherry-pick不能到达未结账的目的地是否正确?
注意:这是对我之前的帖子(现已删除)的改写。重新措辞旨在为帖子提供不同的重点。
运行后git cherry-pick,git报告有冲突。我解决了冲突,然后跑了git cherry-pick --continue。此时,$GIT_EDITOR弹出一个COMMIT_EDITMSG缓冲区,其中预先填充了精选提交的原始消息以及一些附加信息,其中包括警告:
# It looks like you may be committing a cherry-pick.
# If this is not correct, please remove the file
# .git/CHERRY_PICK_HEAD
# and try again.
Run Code Online (Sandbox Code Playgroud)
我检查了如果我“删除”(实际上只是暂时重命名).git/CHERRY_PICK_HEAD文件会发生什么。这产生的直接外部影响是|CHERRY-PICKING从我的git-aware 提示中删除指示。
除了我的提示中的这一变化,以及COMMIT_EDITMSG缓冲区中预先填充的信息可能存在一些差异之外,在有或没有.git/CHERRY_PICK_HEAD文件的情况下执行提交会有什么区别?
更准确地说,我试图在这里比较两种情况。
在第一个场景中,我运行
% git cherry-pick --continue
Run Code Online (Sandbox Code Playgroud)
...并且(无视前面引用的警告)我像往常一样继续提交。
在第二种情况下,我运行
% rm .git/CHERRY_PICK_HEAD
% git commit
Run Code Online (Sandbox Code Playgroud)
...并像往常一样继续提交。
(假设我在两种情况下都使用相同的提交消息。)
这两种情况的最终结果会有什么不同?
根据doc,在 的三个音序器子命令中cherry-pick,我们有这两个,对我来说,奇怪地相似:
--quit
Run Code Online (Sandbox Code Playgroud)
忘记当前正在进行的操作。可用于在樱桃挑选或恢复失败后清除音序器状态。
--abort
Run Code Online (Sandbox Code Playgroud)
取消操作并返回前序状态。
到目前为止,我一直在使用--abort,而且效果很好。什么--quit是不同/优选的用例?
我从我不再需要的分支中精心挑选了一个提交。
如果我精心挑选了一个在删除分支后将不再存在的提交,这是否是不好的形式/是否会出现任何问题?
我经常变本加厉。有时,这rebase特别有问题(很多合并冲突),在这种情况下,我的解决方案是cherry-pick将单个提交提交到master分支上。我这样做是因为几乎每次我所做的冲突数量都大大减少了。
我的问题是为什么会这样。
为什么合并时的合并冲突cherry-pick比合并时的冲突少rebase?
在我的心理模型中,a rebase和a cherry-pick在做同样的事情。
变基示例
A-B-C (master)
\
D-E (next)
git checkout next
git rebase master
Run Code Online (Sandbox Code Playgroud)
产生
A-B-C (master)
\
D`-E` (next)
Run Code Online (Sandbox Code Playgroud)
然后
git checkout master
git merge next
Run Code Online (Sandbox Code Playgroud)
产生
A-B-C-D`-E` (master)
Run Code Online (Sandbox Code Playgroud)
樱桃精选示例
A-B-C (master)
\
D-E (next)
git checkout master
git cherry-pick D E
Run Code Online (Sandbox Code Playgroud)
产生
A-B-C-D`-E` (master)
Run Code Online (Sandbox Code Playgroud)
根据我的理解,最终结果是相同的。(D和E现在掌握了干净的(直线)提交历史记录。)
为什么后者(樱桃采摘)产生的合并冲突会比前者(变基)产生的合并冲突少?
更新更新更新
我终于能够重现此问题,现在我意识到我可能已经简化了上面的示例。这就是我能够复制的方式...
说我有以下内容(请注意额外的分支)
A-B-C (master)
\
D-E (next)
\
F-G (other-next)
Run Code Online (Sandbox Code Playgroud)
然后我执行以下操作
git checkout next
git rebase master …Run Code Online (Sandbox Code Playgroud) 我在这里遇到了一些问题,我想从我的系统本地不存在的 git 存储库中挑选一个提交。
例如:https : //github.com/DespairFactor/N6/commit/ecea4ab6d3d8bb4122522398200f1cd2a06af6d5
通常的樱桃采摘程序包括做
1) git remote add <RepoName> <repoURL>
2)git fetch <RepoName>它会下载一个副本,但不会合并到您自己的本地存储库中。
3)git cherry-pick <commit SHA>樱桃挑选完成。
我的下载速度非常慢(1 mbps),而且我没有足够的时间为 1 次提交下载整个 repo。对不起,如果这个问题已经被问过并回答过。
在从一个分支到另一个分支挑选一些提交之后,我仍然会在稍后创建拉取请求时看到提交。
比如说,有一个 git 项目,它有两个分支: Dev , Release 。
并且提交历史按以下顺序排列。
DEV : a1, a2, a3, a4, a5, a6
释放:a1,a2
现在,如果我单独从 Dev 到 Release 挑选提交 a3 和 a5。现在提交历史将如下所示。精选的提交将具有新的 SHA(b1 和 b2)。
释放:a1、a2、b1、b2。
稍后,如果我尝试创建从 Dev 到 Release 分支的拉取请求,我仍然会看到提交 a3 和 a5。
但是在这种情况下,我如何才能找到这两个分支之间提交的差异?
我看到一些文章说“rebase”,但无法理解其背后的逻辑。