我正在学习git,我已经派生并克隆了一个repo(比方说someRepo),并将mainRepo作为上游添加到我的forked repo中(forkedRepo)在我的本地。两个repo都有一个develop分支。假设有人把一些提交--比如说C1,C2推到了主Repo上,而我有一些本地的,未推的提交,比如说L1,L2,我不打算推送它。我如何得到C1和C2,同时保持L1和L2的干净?我之前试过git merge,但最终创建了一个新的合并提交,我想避免这一点。谢谢!
澄清一下,这是我的git远程控制器的样子
git remote -v
origin git@github.paypal.com:myFork/someRepo.git (fetch)
origin git@github.paypal.com:myFork/someRepo.git (push)
upstream git@github.paypal.com:mainRepo/someRepo.git (fetch)
upstream git@github.paypal.com:mainRepo/someRepo.git (push)
现在,如果有人将C1、C2推到mainRepo的development上,我如何将它们推到myFork的本地development上,同时保持本地development上的提交L1、L2不变
1条答案
按热度按时间yqhsw0fo1#
简要介绍的最佳选项包括
正如你提到的,这将创建一个合并提交,这是一个很好的实践。这将最准确地代表你的历史事件,这将是我个人的首选方式。你为什么要避免合并提交?也许你没有完全意识到的好处,并认为他们“污染”你的历史?如果是这样的话,我会建议与他们合作,并开始阅读更多关于分支和合并的内容。如果你计划定期重复这个动作,我强烈建议将合并作为默认策略。
git rebase L1 --onto C1
https://git-scm.com/docs/git-rebase简而言之,这会获取本地分支,并尝试基于L1重新创建所有提交。如果在此过程中发现合并冲突,您必须修复它们。这模拟了所有更改都在L1之后完成。
git cherry-pick <commit>
https://git-scm.com/docs/git-cherry-pick这需要一次提交,并将放入到你的分支中。如果你只想选择一次修改,这一点特别有用。
你会在官方文档中找到更多的细节和例子。我也可以推荐https://learngitbranching.js.org/来学习。