English 中文(简体)
如何将具体承诺合并到Gite
原标题:
  • 时间:2009-05-19 05:27:34
  •  标签:

我从Gite Hub的一个存放处挑出一个分处,对我做了一些具体的工作。 现在,我发现原来的存放处有一个良好的特征,即HEAD

我只想把它合并起来,而没有以前的承诺。 我应该做些什么? 我知道如何把所有承诺结合起来:

git branch -b a-good-feature
git pull repository master
git checkout master
git merge a-good-feature
git commit -a
git push
最佳回答

git cherry-pick

适用现有承诺提出的修改。

Do not forget to read bdonlan s answer about the consequence of cherry-picking in this post:
"Pull all commits from a branch, push specified commits to another", where:

A-----B------C
 
  
   D

成为:

A-----B------C
 
  
   D-----C 

这一承诺的问题在于,格恩特认为它承诺将所有历史都纳入其中。

Where C has a different SHA-1 ID.
Likewise, cherry picking a commit from one branch to another basically involves generating a patch, then applying it, thus losing history that way as well.

This changing of commit IDs breaks git s merging functionality among other things (though if used sparingly there are heuristics that will paper over this).
More importantly though, it ignores functional dependencies - if C actually used a function defined in B, you ll never know.

问题回答

您可以使用 g子,将自己的承诺运用到目前的部门。

例:git cherry-pick d42c389f

请允许我说,你想把第X编至主编的“<条码>27af03<>。

git checkout master
git cherry-pick e27af03
git push

让我们努力树立榜样,理解:

我有一个分支,即master/strong>,指X <commit-id>我有一个新分支,指Y <sha1>。

Y <commit-id> = <master> Branch commitments - 少数

现在,我要说的是Y分支,我必须区分总务部门与新分支之间的承诺。 以下是我们可以遵循的程序:

<><>Step>:<>>>>>>>

git checkout -b local origin/new

当地是分支机构名称。 任何名字都可以提供。

<><>Step2:<>>>>>>>

  git merge origin/master --no-ff --stat -v --log=300

将总务部门的承诺合并到新的分支部门,并造成将日志信息与一线描述合并起来,从多数加仑;n>正在合并的实际承诺。

关于吉特合并的更多信息和参数,请参见:

git merge --help

此外,如果你需要合并一项具体承诺,你也可以使用:

git cherry-pick <commit-id>

I used to cherry pick, but found I had some mysterious issues from time to time. I came across a blog by Raymond Chen, a 25 year veteran at Microsoft, that describes some scenarios where cherry picking can cause issues in certain cases.

umb一条规则是,如果你从一个分支部门到另一个分支,那么这些分支部门之间后来又合并起来,你可能更早或更晚地遇到问题。

在此提及雷蒙·陈 s关于这一主题的博客:

我与雷蒙· s格谈的唯一问题是他没有提供充分的工作榜样。 因此,我将试图在这里发言。

以上问题问,如何将欧洲复兴开发银行在a-good-feature分支至master/em>上指明的承诺合并起来。

如何做到这一点:

  1. Find the common ancestor between the master and a-good-feature branches.
  2. Create a new branch from that ancestor, we ll call this new branch patch.
  3. Cherry pick one or more commits into this new patch branch.
  4. Merge the patch branch into both the master and a-good-feature branches.
  5. The master branch will now contain the commits, and both master and a-good-feature branches will also have a new common ancestor, which will resolve any future issues if further merging is performed later on.

这里就是这些指挥的一个例子:

git checkout master...a-good-feature  [checkout the common ancestor]
git checkout -b patch
git cherry-pick a-good-feature  [this is not only the branch name, but also the commit we want]
git checkout master
git merge patch
git checkout a-good-feature
git merge -s ours patch

值得注意的是,并入a-good-feature的最后一行使用了“-s wes的合并战略。 之所以这样做,是因为我们只是需要在a-Good-feature分支中作出承诺,指出新的共同祖先,而且由于该法典已经处于这一部门,我们希望确保没有任何机会出现冲突。 如果你的承诺不是最近的承诺,这一点就变得更加重要。

关于部分合并的情景和细节可能相当深入,因此我建议通过雷蒙·陈词典的所有10个部分进行阅读,以充分了解什么可能是错误的,如何避免,以及为什么这样做。

如果你对总务部门做了改动。 现在,你想要把这一承诺移到释放的图书馆。 (eg:xyzabc123)

现在在指挥下进行审判

git checkout release-branch
git cherry-pick xyzabc123
git push origin release-branch

主要的答案是:,适用对目前事务部门的具体承诺。 如果把你所说的“怎么会合在一起”,那么就象他们所建议的那样,只使用奶粉。

但是,如果你实际上想要一个<<>>>>><>>>>>,即你希望有两个父母的<>新承诺——现分部门的现有承诺,以及你想要实行变革的承诺——那么,一个cher子将不会做到这一点。

例如,如果你的建筑过程利用祖先的财富,根据最新标签(使用<条码>git 描述)自动确定版本的地体,则可能有必要有真正的合并历史。

您可以做的是实际的<代码>git mer-no-commit,然后对指数进行人工调整,以消除你不希望的任何变化。

附录一 B:

git checkout A
git merge --no-commit B

现在,你重新设立,与两个家长共同承担一项义务,即:<代码>A和B。 然而,你可能比你想要的要作更多的改动,包括以前在B部门所做的改动。 你们需要消除这些不必要的变化,然后作出承诺。

(可能很容易确定工作名录和索引的状况,使之回到合并之前,以便你拥有一个清洁的late子,首先珍惜你想要的物品。 但我不知道如何实现这一清理。 giteckout HEADgit reset HEAD将消除合并状态,从而挫败这一方法的目的。

因此,人工排除了不想要的变化。 例如,你可以

git revert --no-commit 012ea56

每一不想要的物体的代码<012ea56。

在你完成调整后,你承诺:

git commit -m "Merge in commit 823749a from B which tweaked the timeout code"

现在,你只想做些改动,而祖传树木显示,你在技术上从B合并。

我们必须使用<代码>git cherry-pick <commit- number>。

场景:我在一个叫做“发布”的分支上,我只想从主分支添加一些变化到发布分支。

步骤1:检查贵部门希望增加变动

第2步:使所承诺的变动数目增加

例如

git cherry-pick 634af7b56ec

第3步:<条码>git 推进

<>说明: 每当你合并时,就有单独的承诺编号。 不要把那些赢得 t工作的人混在一起。 相反,任何经常承诺的承诺数目都希望增加

In my use case we had a similar need for CI CD. We used git flow with develop and master branches. Developers are free to merge their changes directly to develop or via a pull request from a feature branch. However to master we merge only the stable commits from the develop branch in an automated way via Jenkins.

在这种情形下,做cher不错。 然而,我们从承诺中设立了一个地方图书馆,然后把当地图书馆合并起来,以掌握和进行冲淡的清洁核查(我们使用马文)。 如果成功的话,就释放了生产版本的工艺品,使其与当地Checkout=true选择和推介Changes=false相联系。 最后,如果一切都取得成功,就会推动变革和主角。

样本代码:

如果是人工操作的话,就算主。 但是,在jenkins,当你检查你重新签名时,将登在违约部门(如果主编)。

git pull  // Just to pull any changes.
git branch local-<commitd-id> <commit-id>  // Create a branch from the given commit-id
git merge local-<commit-id>  // Merge that local branch to master.
mvn clean verify   // Verify if the code is build able
mvn <any args> release:clean release:prepare release:perform // Release artifacts
git push origin/master  // Push the local changes performed above to origin.
git push origin <tag>  // Push the tag to origin

这将给你带来无畏的合并或冲突损失的全面控制。

如果有更好的选择,可自由发表意见。

我建议回答。 也就是说,通过出口手工改变并致力于目标部门,并且为了使用诸如施肥等工具,出口实际上可以成为实现这一目标的有效途径。 我在特别志愿人员协会中非常了解这项工作,迄今为止,一些来自 g的测试取得了同样的成功,只要它们100%完全相同,就没有必要通过今后将特遣部门合并来解决冲突。

Let me show an example:
c:/git/MyProject_Master/ModuleA/
c:/git/MyProject_FeatureA/ModuleA/

Let s suppose we wanted all the files from ModuleA s FeatureA branch to be in the master branch. Assume for a moment this is a huge project and there are other modules, and we know from experience that ModuleA has no dependencies that would cause a compiler or functional issue from the new changes of the feature branch. Select the ModuleA folder and choose Export from tortoise. Then pick ModuleA of master to export it into. Finally, do a file difference check on each file to review the changes, using the diff tool, be sure that all calls out are still compatible. Make sure it compiles, thoroughly test. Commit, push. This solution is a time-tested and effective for svn.





相关问题