如何编辑一个分支的历史记录,以保持只从一个提交范围内影响特定子目录的提交(和部分提交)?
基本上,我有一个大回购与一些子目录是公平,但不是完全独立的。在过去,这些都是单独的存储库,但结果却是有问题的,因此我们将它们合并为1个回购。这通常是很好的,但是在RoboCup进行了一周的黑客攻击之后,我们想把一个大分支分成几个小的分支,以便更容易地检查和分离拉请求。
我有一个子challenge_gpsr在分支robocup上,我想为它创建一个独立的分支。robocup是从189bd987中分支的,因为我目前在分支robocup上,所以HEAD指向该分支中的最后提交。
正在运行
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。
如果该方法有效,我将对其他子目录重复此方法,并可以分别对每个子目录进行检查。
发布于 2018-07-26 15:09:17
我以前没有使用过git filter-branch,也不知道它的存在,所以谢谢你:D,但我很确定我能看出这里有什么问题.
只留下
challenge_gpsr,但这不是我想要的。
这就是我希望从筛选器命令中得到的,看看每一步:
# 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。
git filter-branch -f --index-filter " \
git reset -q 189bd987 -- . && \
git reset -q \$GIT_COMMIT -- challenge_gpsr \
" --prune-empty -- "robocup" 189bd987..HEADhttps://stackoverflow.com/questions/51506024
复制相似问题