[英]git pull a branch within the same local repository
如何将更改从一个分支拉到同一本地存储库中的另一个分支?
背景:在开发功能的过程中,我开始在另一个分支上开发第一个功能所需的功能。 但是,第二个功能实际上不能按原样推送到开发分支,因为它包含未使用的代码。 因此,我想将更改从另一个分支的第二个功能拉到另一个分支的第一个功能。
我可能更喜欢完全在本地处理这个问题。 你可以试试:
# from feature-child
git rebase feature-mother
git checkout feature-mother
git merge feature-child
git push origin feature-mother
该策略使用 rebase 来使您不小心在其中完成所有工作的feature-child
分支与最新feature-mother
更改保持同步,至少在本地是这样。 然后,我们将feature-child
快速合并到feature-mother
中,以将您的工作引入后一个分支。 最后,如果需要,我们可以将feature-mother
推送到存储库。
git pull
= git fetch
然后git merge
(或其他一些 Z0BCC70105AD279503E531FE7B3FZ7 命令)git fetch
意味着从另一个 Git 获取提交。git merge
意味着合并我的存储库中已有的提交。 如果您还没有提交,则需要第 2 步。在您的情况下,您确实有提交 - 所以您所需要的只是git merge
(或您将要让git pull
作为第二个运行的其他命令两个命令)。
让我们添加到这个git push
:
git push
意味着将提交发送到另一个 Git 。 它与git fetch
的反面一样接近。 它的对面不是git pull
: git pull
是一个组合命令; git push
和git fetch
是两个基本的从一个存储库到另一个存储库的传输提交命令。 请注意,当您使用git fetch
时,您会从他们的 Git(另一个origin/master
,通常称为origin
)中获取提交,然后将它们放入您的存储库中,然后origin/feature
ZD304BA20E96D874111588EEABAC850E3等名称的提交. 这些标签,我们可以称之为远程跟踪名称,记住他们的Git—— origin
的那个——使用名称master
或名称feature
来记住那些特定的提交。
git push
的不同之处在于,在将新提交发送到他们的存储库之后,您的 Git 要求他们的 Git 设置他们的分支名称。 That is, if you run git push origin master
, you have your Git send their Git any new commits you have that they don't (and that they need), and then your Git says: now that you have commit a123456...
——或者不管它的 hash ID 是什么——现在你有了提交,设置你的master
来识别那个提交。 不涉及远程跟踪名称:您的 Git 告诉他们的 Git 设置其分支名称。
运行git fetch
总是安全的。 这要么获取一些新的提交(并且不涉及任何分支),要么不获取任何新的提交(并且仍然不涉及任何分支)。
由另一个Git 来决定它是否喜欢您的git push
:如果需要,您发送它提交,然后要求它设置其分支名称,如果他们认为它是安全的,它会这样做。 您可以向他们发送命令——设置您的分支名称! —如果他们认为它不安全并且您认为自己知道得更多,则使用--force
覆盖它,但是首先确保您确实知道得更好是明智的。
何时以及是否安全运行git merge
是您应该自行决定的事情。 不幸的是,如果您使用git pull
,那么无论在git fetch
步骤中发生什么,您都认为它是安全的。 有时它仍然是安全的——特别是如果你也控制其他 Git 存储库——但我更喜欢避免git pull
。 我更喜欢把它分成两个组成部分。 这让我有机会查看git log
实际获取的git fetch
的内容,然后再决定合并、变基或其他完全(甚至可能是强制推送,尽管这种情况非常罕见)。
我将本地更改推送到包含另一个功能的依赖代码的功能分支上,为简洁起见,我将前者称为feature-mother
,后者称为feature-child
,即: git checkout feature-mother; git push
git checkout feature-mother; git push
。 然后我跑了:
git pull origin feature-mother:feature-child
。
这对我有用。 我不知道第一段是否必要,或者是否有办法从本地分支中提取更改。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.