最近,我被要求cherry-pick提交.
那么,在git中挑选一个提交意味着什么呢?你怎么做呢?
我在一个新项目上使用git,该项目有两个并行 - 但目前是实验性的 - 开发分支:
master:导入现有的代码库加上一些我一般都知道的mod exp1:实验分支#1exp2:实验分支#2exp1并exp2代表两种截然不同的架构方法.直到我走得更远,我无法知道哪一个(如果有的话)会起作用.当我在一个分支中取得进展时,我有时会在另一个分支中进行编辑,并且只想合并那些.
将选择性更改从一个开发分支合并到另一个开发分支而将其他所有内容合并的最佳方法是什么?
我考虑过的方法:
git merge --no-commit 然后手动取消大量编辑,我不想在分支之间做出共同点.
手动将公共文件复制到临时目录,然后git checkout移动到另一个分支,然后更多地手动从临时目录复制到工作树中.
以上的变化.暂时放弃exp分支并使用另外两个本地存储库进行实验.这使得手动复制文件更加简单.
所有这三种方法都显得乏味且容易出错.我希望有更好的方法; 类似于过滤器路径参数的东西会git-merge更具选择性.
我有以下存储库布局:
我想要实现的是从工作分支中挑选一系列提交并将其合并到集成分支中.我是git的新手,我无法弄清楚如何正确地做到这一点(在一次操作中不提取合并的樱桃选择提交范围)而不会弄乱存储库.关于这个的任何指针或想法?谢谢!
我正在研究两个不同的分支:发布和开发.
我注意到我仍然需要将一些提交给发布分支的更改集成到开发分支中.
问题是我不需要所有的提交,只有某些文件中的一些人,所以很简单
git cherry-pick bc66559
Run Code Online (Sandbox Code Playgroud)
没有办法.
当我做的时候
git show bc66559
Run Code Online (Sandbox Code Playgroud)
我可以看到差异,但实际上并不知道将其部分应用于我当前工作树的好方法.
我跑了git cherry-pick <hash>并且发生了合并冲突.我不想解决冲突,我只是想中止樱桃挑选.在进行实际合并时(有git merge),这是方便的git merge --abort.樱桃采摘相当于什么?
我创建了一个名为新的分支newbranch从masterGit的分支.现在我做了一些工作,想要合并newbranch到master; 但是,我已经做了一些额外的更改newbranch,我想合并newbranch到最后一次提交到第四次master.
我用过cherry-pick但它显示了使用正确选项的消息:
git checkout master
git cherry-pick ^^^^HEAD newbranch
Run Code Online (Sandbox Code Playgroud)
我可以用git merge代替它吗?
git merge newbranch <commitid>
Run Code Online (Sandbox Code Playgroud) 我有2个分支,master和dev.
我在dev分公司,我想摘樱桃1从承诺master到dev.所以我做了
$ git cherry-pick be530cec7748e037c665bd5a585e6d9ce11bc8ad
Finished one cherry-pick.
Run Code Online (Sandbox Code Playgroud)
但是,当我做的git status和gitx,我没有看到我的承诺be530cec7748e037c665bd5a585e6d9ce11bc8ad在git的历史.
我怎样才能在dev分支中看到我的提交?
所以我以前做了无数的樱桃选择,似乎我现在必须在生活中失败,我想尝试从一个分支到另一个分支,这应该是容易的,我怎么会得到一个关于它是合并的错误但是不是给了-m?
$ git cherry-pick a8c5ad438f6173dc34f6ec45bddcef2ab23285e0
error: Commit a8c5ad438f6173dc34f6ec45bddcef2ab23285e0 is a merge but no -m option was given.
fatal: cherry-pick failed
Run Code Online (Sandbox Code Playgroud)
那看起来不对.......它应该是:
$ git cherry-pick a8c5ad438f6173dc34f6ec45bddcef2ab23285e0
Run Code Online (Sandbox Code Playgroud)
从什么时候开始我必须提供-m功能?
我怎么能告诉樱桃选择一个被压缩的提交范围?
或者换句话说,将两个提交之间的差异应用于存储库的当前状态?
以下就不能正常工作(摘樱桃没有--squash选项):
git cherry-pick --squash e064480..eab48b59c
Run Code Online (Sandbox Code Playgroud)
注意:我的用例是在一个子树场景中 - 在任何人开始争论我不应该压制之前.
以下工作,但后来我有一系列单独的提交.之后,我可以使用交互式rebase手动压缩它们.
git cherry-pick -X subtree=vendor/package e064480..eab48b59c
Run Code Online (Sandbox Code Playgroud)
有没有什么方法可以挤压作为樱桃挑选的一部分?
当我从另一个分支机构挑选一个提交时,我发现自己做了很多.
$ git log -1 another_branch
commit <commit_sha>
// copy <commit_sha>
$ git cherry-pick <commit_sha>
Run Code Online (Sandbox Code Playgroud)
我可以在一个命令中完成所有这些操作,如果是这样,它是什么?
git ×10
git-cherry-pick ×10
cherry-pick ×3
git-merge ×3
git-branch ×1
git-patch ×1
git-squash ×1
sha ×1