Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 如何将更改从骨架子存储库拉入生产超级存储库_Git_Aurelia - Fatal编程技术网

Git 如何将更改从骨架子存储库拉入生产超级存储库

Git 如何将更改从骨架子存储库拉入生产超级存储库,git,aurelia,Git,Aurelia,我使用的是包含各种项目设置的,用于不同的目的,但更多的是一个关于如何使用git的一般问题,如下面所述 我希望能够将GitHub骨架存储库中发布的更新合并到我实际从事的项目中。你会怎么做 目前,我刚刚在skeleton typescript项目(我正在使用)中初始化了一个新的本地存储库,并将其连接到一个私有远程repo以推动我的更改。但是,通过这种设置,我的项目特定更改会污染父存储库(远程指向Github上的aurelia skeleton) 最好是进行某种单向跟踪,因为aurelia skele

我使用的是包含各种项目设置的,用于不同的目的,但更多的是一个关于如何使用git的一般问题,如下面所述

我希望能够将GitHub骨架存储库中发布的更新合并到我实际从事的项目中。你会怎么做

目前,我刚刚在skeleton typescript项目(我正在使用)中初始化了一个新的本地存储库,并将其连接到一个私有远程repo以推动我的更改。但是,通过这种设置,我的项目特定更改会污染父存储库(远程指向Github上的aurelia skeleton)

最好是进行某种单向跟踪,因为aurelia skeleton远程存储库通常只用于引入更改


作为第二步,您将感兴趣地了解如何使用这种设置创建一个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

我通常的工作流程是创建一个专门的分支来跟踪上游项目。您可以在该分支上选择您想要的内容,并创建一个请求,而无需将模板与您的项目细节混为一谈


第一件事,继续并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
的一个值得注意的特性是,您将拥有完全相同的哈希提交历史记录