将更改合并到git repo,就好像它们曾经发生过一样

时间:2012-04-11 11:34:10

标签: git

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

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

如何从更新的组件中添加更改,就好像它们在我的更改之前发生一样?或者这是'重写历史'?

我是否从引入组件的旧提交创建分支,添加更新的代码然后合并到master中?子模块?或者我正在咆哮错误的树,这种情况更好地处理另一种方式?

2 个答案:

答案 0 :(得分:4)

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

您需要使用两个分支维护存储库:

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

每次使用组件的新快照更新“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'& '调整'分支

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"

您的主分支现在具有组件的更新历史记录,并为每个快照更新提交。最后 rebase 将'tweaks'分支转移到主分支 - 你的'tweaks'分支上的每个提交将在主分支的新提示之上一个接一个地重放:

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

更多调整?

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

git checkout tweaks
... make your tweaks, commit them

答案 1 :(得分:0)

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

BR, 添