Git 如何将更改从骨架子存储库拉入生产超级存储库
我使用的是包含各种项目设置的,用于不同的目的,但更多的是一个关于如何使用git的一般问题,如下面所述 我希望能够将GitHub骨架存储库中发布的更新合并到我实际从事的项目中。你会怎么做 目前,我刚刚在skeleton typescript项目(我正在使用)中初始化了一个新的本地存储库,并将其连接到一个私有远程repo以推动我的更改。但是,通过这种设置,我的项目特定更改会污染父存储库(远程指向Github上的aurelia skeleton) 最好是进行某种单向跟踪,因为aurelia skeleton远程存储库通常只用于引入更改Git 如何将更改从骨架子存储库拉入生产超级存储库,git,aurelia,Git,Aurelia,我使用的是包含各种项目设置的,用于不同的目的,但更多的是一个关于如何使用git的一般问题,如下面所述 我希望能够将GitHub骨架存储库中发布的更新合并到我实际从事的项目中。你会怎么做 目前,我刚刚在skeleton typescript项目(我正在使用)中初始化了一个新的本地存储库,并将其连接到一个私有远程repo以推动我的更改。但是,通过这种设置,我的项目特定更改会污染父存储库(远程指向Github上的aurelia skeleton) 最好是进行某种单向跟踪,因为aurelia skele
作为第二步,您将感兴趣地了解如何使用这种设置创建一个pull请求。在这种情况下,我希望使用我在子存储库中所做的更改合并到aurelia remote的分支中…我通常的工作流程是创建一个专用分支,从中跟踪上游项目。您可以在该分支上选择您想要的内容,并创建一个请求,而无需将模板与您的项目细节混为一谈
第一件事,继续并fork
aurelia/skeleton-navigation
,这样您就可以轻松地通过Github的GUI发出pull请求
在名为skeleton-typescript
git clone -o upstream git@github.com:YOUR_GITHUB_USERNAME/skeleton-navigation.git skeleton-typescript
cd skeleton-typescript
echo "notable contribution" >> file.txt
git add .
git commit -m "backport test commit"
git push origin master
重命名主分支
git branch -m asmaster
为skeleton typescript
git clone -o upstream git@github.com:YOUR_GITHUB_USERNAME/skeleton-navigation.git skeleton-typescript
cd skeleton-typescript
echo "notable contribution" >> file.txt
git add .
git commit -m "backport test commit"
git push origin master
提示:您可以在命令行中使用
添加遥控器
git remote add origin git@github.com:YOUR_GITHUB_USERNAME/skeleton-typescript.git
将repo拆分为一个子树(),该子树将包含一个新树,其中包含前缀
目录中文件的所有提交历史记录
git subtree split --prefix=skeleton-typescript
这将打印出一个提交ID,它是子树的头
539D913A8CF9B34B644273B5CDB4805953247C
从该提交创建主分支
git checkout -b master 539d913a8cf9b34b644273b5cdb480359553247c
推动并跟踪您的新回购协议
git push -u origin master
后传
提交一些关于骨架类型脚本的工作
git clone -o upstream git@github.com:YOUR_GITHUB_USERNAME/skeleton-navigation.git skeleton-typescript
cd skeleton-typescript
echo "notable contribution" >> file.txt
git add .
git commit -m "backport test commit"
git push origin master
签出上游超级项目分支,并选择子树提交
git checkout asmaster
git cherry-pick -x --strategy=subtree master
git push upstream asmaster:master
git rebase 095c0c9f7ed06726e9413030eca4050a969ad0af
现在,您可以从上游分支your\u GITHUB\u USERNAME/skeleton-navigation:master
分支向其aurelia/skeleton-navigation:master
分支发出拉取请求
更新
现在,上游的上游(aurelia/skeleton-navigation:master
)无疑会有更新,其中包括子树的skeleton-typescript
文件夹的更新
添加另一个遥控器以跟踪原始项目
git remote add upupstream git@github.com:aurelia/skeleton-navigation.git
请注意,您的本地存储库中现在有3个遥控器
git remote -v
下拉更新
git checkout asmaster
git pull upupstream master
再次拆分子树并抓住头部提交
git subtree split --prefix=skeleton-typescript
095c0c9f7ed06726e9413030eca4050a969ad0af
切换回子项目
git checkout master
如果您从未对更改进行过后端口,那么git subtree split
的一个显著属性是,您将拥有完全相同的哈希提交历史记录,因此您可以在不重写历史记录的情况下快速进行合并。发件人:
完全相同历史记录的重复拆分保证是相同的(即生成相同的提交ID)。因此,如果添加新的提交,然后重新拆分,新的提交将作为提交附加到上次生成的历史记录之上,因此git merge和friends将按预期工作
但是,如果您已经对cherry Pick更新或子树历史记录的任何其他更改进行了后端口,那么您将需要重新设置更改的基础,否则将有重复的提交
git checkout asmaster
git cherry-pick -x --strategy=subtree master
git push upstream asmaster:master
git rebase 095c0c9f7ed06726e9413030eca4050a969ad0af
我通常的工作流程是创建一个专门的分支来跟踪上游项目。您可以在该分支上选择您想要的内容,并创建一个请求,而无需将模板与您的项目细节混为一谈
第一件事,继续并forkaurelia/skeleton-navigation
,这样您就可以轻松地通过Github的GUI发出pull请求
在名为skeleton-typescript
git clone -o upstream git@github.com:YOUR_GITHUB_USERNAME/skeleton-navigation.git skeleton-typescript
cd skeleton-typescript
echo "notable contribution" >> file.txt
git add .
git commit -m "backport test commit"
git push origin master
重命名主分支
git branch -m asmaster
为skeleton typescript
git clone -o upstream git@github.com:YOUR_GITHUB_USERNAME/skeleton-navigation.git skeleton-typescript
cd skeleton-typescript
echo "notable contribution" >> file.txt
git add .
git commit -m "backport test commit"
git push origin master
提示:您可以在命令行中使用
添加遥控器
git remote add origin git@github.com:YOUR_GITHUB_USERNAME/skeleton-typescript.git
将repo拆分为一个子树(),该子树将包含一个新树,其中包含前缀
目录中文件的所有提交历史记录
git subtree split --prefix=skeleton-typescript
这将打印出一个提交ID,它是子树的头
539D913A8CF9B34B644273B5CDB4805953247C
从该提交创建主分支
git checkout -b master 539d913a8cf9b34b644273b5cdb480359553247c
推动并跟踪您的新回购协议
git push -u origin master
后传
提交一些关于骨架类型脚本的工作
git clone -o upstream git@github.com:YOUR_GITHUB_USERNAME/skeleton-navigation.git skeleton-typescript
cd skeleton-typescript
echo "notable contribution" >> file.txt
git add .
git commit -m "backport test commit"
git push origin master
签出上游超级项目分支,并选择子树提交
git checkout asmaster
git cherry-pick -x --strategy=subtree master
git push upstream asmaster:master
git rebase 095c0c9f7ed06726e9413030eca4050a969ad0af
现在,您可以从上游分支your\u GITHUB\u USERNAME/skeleton-navigation:master
分支向其aurelia/skeleton-navigation:master
分支发出拉取请求
更新
现在,上游的上游(aurelia/skeleton-navigation:master
)无疑会有更新,其中包括子树的skeleton-typescript
文件夹的更新
添加另一个遥控器以跟踪原始项目
git remote add upupstream git@github.com:aurelia/skeleton-navigation.git
请注意,您的本地存储库中现在有3个遥控器
git remote -v
下拉更新
git checkout asmaster
git pull upupstream master
再次拆分子树并抓住头部提交
git subtree split --prefix=skeleton-typescript
095c0c9f7ed06726e9413030eca4050a969ad0af
切换回子项目
git checkout master
如果您从未对更改进行过后端口,那么git subtree split
的一个值得注意的特性是,您将拥有完全相同的哈希提交历史记录