首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Git过滤器-分支:只在subdir中保持提交

Git过滤器-分支:只在subdir中保持提交
EN

Stack Overflow用户
提问于 2018-07-24 19:14:49
回答 1查看 245关注 0票数 4

如何编辑一个分支的历史记录,以保持只从一个提交范围内影响特定子目录的提交(和部分提交)?

基本上,我有一个大回购与一些子目录是公平,但不是完全独立的。在过去,这些都是单独的存储库,但结果却是有问题的,因此我们将它们合并为1个回购。这通常是很好的,但是在RoboCup进行了一周的黑客攻击之后,我们想把一个大分支分成几个小的分支,以便更容易地检查和分离拉请求。

我有一个子challenge_gpsr在分支robocup上,我想为它创建一个独立的分支。robocup是从189bd987中分支的,因为我目前在分支robocup上,所以HEAD指向该分支中的最后提交。

正在运行

代码语言:javascript
复制
git filter-branch -f --index-filter "git rm --ignore-unmatch --cached -qr -- . && git reset -q \$GIT_COMMIT -- challenge_gpsr" --prune-empty -- "robocup" 189bd987..HEAD

只留下challenge_gpsr,但这不是我想要的,它也有其他目录,但是它们的状态应该是在189bd987,而下面的提交只会影响子目录challenge_gpsr

如果该方法有效,我将对其他子目录重复此方法,并可以分别对每个子目录进行检查。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-26 15:09:17

我以前没有使用过git filter-branch,也不知道它的存在,所以谢谢你:D,但我很确定我能看出这里有什么问题.

只留下challenge_gpsr,但这不是我想要的。

这就是我希望从筛选器命令中得到的,看看每一步:

代码语言:javascript
复制
# 1 Remove everything from root-tree (from the new revision)
git rm --ignore-unmatch --cached -qr -- .

# 2 Restore challenge_gpsr sub-tree (from original revision)
git reset -q \$GIT_COMMIT -- challenge_gpsr    

这对于189bd987..HEAD之间的每个修订都会运行,这将导致在189bd987删除challenge_gpsr之外的所有内容之后进行第一次提交,之后所有提交都将只修改challenge_gpsr下的对象。

...have的其他目录,但它们的状态在本质上应该是在189bd987

与其删除所有内容,不如将整个树还原为189bd987,然后从$GIT_COMMIT恢复子树challenge_gpsr

代码语言:javascript
复制
git filter-branch -f --index-filter " \
    git reset -q 189bd987 -- . && \
    git reset -q \$GIT_COMMIT -- challenge_gpsr \
" --prune-empty -- "robocup" 189bd987..HEAD
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51506024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档