0

我对 git 很陌生,所以如果这很明显(或不可能),请原谅我!

我将它用于 CMS 网站。我经常遇到这样的情况,即我对第三方组件进行了修改,然后又进行了更新。

如何添加更新组件中的更改,就好像它们发生在我的更改之前一样?还是这是“改写历史”?

我是否从引入组件的旧提交创建分支,添加更新的代码,然后合并到 master 中?子模块?还是我叫错了树,这种情况最好用另一种方式处理?

4

2 回答 2

4

(最初这个答案假设第 3 方组件来自公共 git 存储库,@jacob-dorman 澄清说他通过从较大项目的快照中复制组件的代码来获取更新)

您需要维护一个包含两个分支的存储库:

  • master:每次获得组件的新快照时,将其提交到此分支
  • tweaks:基于分支的master分支,其中包含构成您的自定义调整的提交

每次使用组件的新快照更新“主”分支时,将分支重新设置在tweaks分支之上master

$ git rebase master tweaks

这将使您的调整有效地成为最后发生的事情

所以,从一开始,这就是它在命令行上的样子......

获取第一个快照并将其存储在“主”分支上

mkdir my-fork-of-shinything
cd my-fork-of-shinything
git init
cp -R /tmp/shinything-snapshot-1 .  # copy the snapshot of code into your repo
git add -A    // stages ALL directory contents for commit
git commit -m "V1 snapshot of the shinything component"

这将设置您的“主”分支。

在新的“tweaks”分支上添加你的调整

git checkout -b tweaks   // creates your new branch
... make your tweaks, commit them

后来,当对原始组件进行了一些有趣的更新时......

获取新组件快照,更新“master”和“tweaks”分支

git checkout master
rm -Rf * // delete the contents of the old snapshot
cp -R /tmp/shinything-snapshot-2 . // get the brand new snapshot in place
git add -A
git commit -m "V2 snapshot of shinything, brings fix for #234"

您的主分支现在拥有组件的更新历史记录,每个快照更新都有一个提交。最后将 ' tweaks ' 分支重新设置到 master 分支上 - 你的 'tweaks' 分支上的每个提交都将在 master 分支的新提示之上一个接一个地重播:

git rebase master tweaks // re-bases the commits from your tweaks branch

更多调整?

如果您需要添加更多调整,只需检查分支并添加它们:

git checkout tweaks
... make your tweaks, commit them
于 2012-04-11T11:48:57.227 回答
0

给你一个简单的命令,git pull --rebase

兄弟,蒂姆

于 2012-04-11T13:36:07.243 回答