git pull是否影响远程跟踪分支?
我们知道git pull=git fetch+git merge。但我对git merge的理解是,它只影响要合并到的分支,而不是要合并的分支 所以在git pull的情况下,我想它看起来是这样的:git pull是否影响远程跟踪分支?,git,git-merge,git-pull,Git,Git Merge,Git Pull,我们知道git pull=git fetch+git merge。但我对git merge的理解是,它只影响要合并到的分支,而不是要合并的分支 所以在git pull的情况下,我想它看起来是这样的: git fetch origin git merge origin/master 如果是这种情况,源站的新更改将在主站上重播,但源站/主站不会将更改提交给本地主分支。git pull是否确保远程跟踪分支(origin/master)包含git合并后在master中所做的所有新更改,还是在执行git
git fetch origin
git merge origin/master
如果是这种情况,源站的新更改将在主站上重播,但源站/主站不会将更改提交给本地主分支。git pull是否确保远程跟踪分支(origin/master)包含git合并后在master中所做的所有新更改,还是在执行git push时所做的更改?简单的回答是:不,远程跟踪分支不受影响 考虑像
origin/master
这样的远程跟踪分支的一个好方法是,您的git几乎总是与他们(origin的)git保持独立,除非您告诉您的git调用他们的git和坐标。通过互联网电话呼叫遥控器的命令有git-fetch
和git-push
(当然还有初始的git-clone
)。因此,origin/master
在上次git与之同步时总是“wheremaster
在origin上”
当您获取或推送时,您的git会获得git对其所有分支的了解,并更新远程跟踪分支。它将它们设置为远程设备当时拥有的任何东西,前提是您也拥有这些SHA-1 ID。1您可以限制git更新的分支,但是直接获取git的默认方法是获取远程设备的所有当前信息
还有另外一条命令2可以打电话给遥控器,但不会更新git的远程跟踪分支:git ls remote
执行获取或推送的第一步,然后只显示从遥控器获取的所有引用名称。试试看,这是纯粹的信息,但会让你看到这到底是如何工作的
1您的git无法将您自己的远程跟踪分支指向您没有的SHA-1。由于
git fetch
通常会带来所有东西,因此它是进行主要更新的一个。使用git push
您要求远程设备将其SHA-1 ID更改为git发送的内容,因此如果它说“是”,那么根据定义,您也有这些对象,但这仅保证您发送的分支和/或标记,而不是其他分支
2实际上有好几种,但只有一种可以用来举例说明。为了完整起见,我要提到的是,
git remote show
有时也会给远程设备打电话。如果您将分支B合并到分支A,您需要将更改推送到分支A的远程分支,以便更改显示在那里。对不起,我不是这个意思。我想知道当您执行git fetch+git merge时,远程跟踪分支是否使用本地更改进行更新。如果您有本地更改,您可以执行git stash
存储更改,然后git pull
从远程分支获取更改,然后git stash pop
重新应用更改。执行git pull
不会自动将本地更改应用于远程分支。你必须自己把它们推上去。@JackmeriusTacktheritrix谢谢你的回答-对不起,你的回答不是我要问的。顺便说一句,更准确的说法是,原点/母版上的更改将合并到母版中,而不是在母版上“重放”。另一方面,如果您将fetch设置为使用rebase而不是merge,那么您的更改将被重放(更准确地说,是复制了一个lagit cherry pick
),但是在fetch步骤之后会被复制到新的基本提交上,就像在neworigin/master
上找到的那样。因此我认为在git push之后,如果您再次执行git fetch,远程跟踪分支现在将包含本地?中的新更改。如果git push
成功,则远程跟踪分支将已经匹配您推送的任何内容(因为远程跟踪分支同意将其分支设置为您推送的ID)。例如,如果您说git push origin 1234567:master
,并且您有一个ID为1234567
的提交,并且push
成功,那么您的origin/master
现在将包含1234567
。如果您想确定,您可以再次检查git fetch origin
,或者使用git ls remote origin
查看它。只是为了确保-所以您的答案是,如果我在本地分支中有新的更改,并且服务器有新的更改,那么在git fetch和git merge之后,我的本地分支将与我的跟踪分支(原始/主分支)不同,对吗?你说得对。您尚未将本地更改推送到远程分支,因此它们在这方面会有所不同。@Boon:是的。现在的情况是git喜欢保存几乎所有的内容,因此它拥有您的所有提交,并且fetch
添加所有提交。如果您随后进行新的合并提交,则只有您有新的合并提交(并且只有您有以前的合并提交),但您确实得到了它们的提交,并且您的源代码/master
(仍然)会告诉您“上次检查时它们在哪里”。一旦你推送,你给他们你的提交,并要求他们设置他们的主指向你最近的提交(你刚刚给他们)。如果他们说“好”,你的git知道他们现在拥有你给他们的东西。