git - 使用 git rebase 跳过一些目录或文件
问题描述
我希望您能在 git rebase 命令方面提供帮助。我有一个目录ParentDir,其中包含UI、SEVER和其他文件。所以,我在工作,develop branch
但我想结帐gh-pages
并从develop
分支获取更新的代码。
我知道如何使用git rebase命令,但它附带了开发分支中的所有目录和文件。
有什么方法可以忽略/跳过其他文件和目录,只需将UI目录从中抓取?谢谢。develop
gh-pages
解决方案
好吧,您问如何获取一组文件,出于某种原因,人们一直在用“如何从特定提交中获取更改”来回答这个问题。
但这仍然会让您从这些提交中对所有文件进行所有更改。根据您的历史,您可能会也可能无法做到这一点;但只有在非常特定的情况下才是最简单的方法。
更具体地说,cherry-pick
将是一个好的解决方案的案例是rebase
可以运作良好的案例的一个子集。由于您说您知道rebase
并且无法以这种方式获得所需的结果,因此我假设您遇到的情况既不是rebase
也不cherry-pick
是一个好的选择[1]。
如果您想要的更改与同一提交中的其他更改混合在一起,那么对提交进行操作的命令(如 rebase 或 cherry-pick)将不会执行您想要的操作。在这种情况下,有几种非常不同的方法,这是否有意义取决于你真正想要完成的事情。
从字面上看你问的最直接的方法是
git checkout gh-branch
git checkout develop -- ./UI
(如果更改包括删除,您可能需要一个额外的步骤,例如
git checkout gh-branch
rm -r ./UI
git checkout develop -- ./UI
删除被“看到”。)
然后你的工作树处于你想要的状态,你可以提交它。但这将再次使您的分支与开发发生冲突,并且由于它不是基于精确的重复提交,因此 git 以后将很难帮助自动解决。
[1] 我会指出,以防万一,解决问题的最通用方法rebase
是进行交互式 rebase。您会将提交从develop重新定位到 gh-branch
.
git checkout --detach develop
git rebase -i gh-branch
# edit the todo list to `pick` the commits with the changes you want
# and once the rebase is done, update gh-branch in any of a number of ways; one of the "safest" being
git tag gh-branch-temp
git checkout gh-branch
git merge --ff-only gh-branch-temp
git tag -d gh-branch-temp
如果您还没有尝试过这种方法,您可以研究一下,因为它是一种更容易/不易出错的方法,效果与cherry-pick
;相同。cherry-pick
这是我认为被过度推荐的主要原因。
但请注意 - 如果您尝试“好像”在分支上完成 UI 工作一样工作,那么 rebase 和 cherry-pick 都不会让您到达那里;分支develop
保持原样。仍然存在的更改develop
将与您的分支发生冲突(尽管 git 会在冲突出现时自动解决冲突,但它可能无法做到)。
推荐阅读
- javascript - 如何在用户加入时自动为用户分配角色?
- java - 在 maven-compiler-plugin 中设置 annotationProcessor 然后@Slf4j 不起作用:找不到符号
- python - 如何在熊猫中删除选定的列?
- android - Android TextView 不会用多行紧紧地拥抱文本,而是坚持使用 maxWidth
- cookies - 如何在浏览器控制台中显示有关 HttpOnly、Secure Flag 和 SameSite 的 cookie 问题?
- java - 如何使用 spring session 为多个请求初始化一个对象?
- scala - How to convert list with full name to a tuple of (name,surname) using map
- javascript - 如何在我的角度应用程序中为每个模块制作不同的自定义滚动条
- java - 如何在 Springboot 中格式化日期
- sql - 如何在没有分组依据的情况下选择具有最大技能属性的 ID