何时需要在Git中先拉取再推送?

4
如果AB正在同一个git仓库上工作,并且A在功能分支A-feature上推送了更改到仓库,比B先推送,那么B现在需要在推送之前进行拉取操作。
但是,在哪里描述了这个确切的条件呢?例如,它适用于推送到仓库的任何分支上的任何更改吗?还是只有当AB都在推送到同一个分支时才适用?这意味着B即使在A之前推送到B-feature,他也可以推送吗?

2
应该可以在不进行拉取操作的情况下推送到另一个分支。 - Karussell
3个回答

4
意思是B即使在A之后推送到B-feature,也是可以的吗?
是的。您收到的警告仅在您将代码推送到其他人更新过的分支时才会出现:
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
hint: before pushing again.

唯一的替代方法是git push --force(如果BA-feature上推送,它将覆盖由A发布的历史记录,这是不好的。)。请参见“git push --force, behind the scenes”。
如果只有BB-feature上工作,则在B想要将本地B-feature分支推送到上游存储库时,不需要拉取:推送将是快进的:您正在追加新提交到远程分支的顶部。

可能值得一提的是强制推送。 - jub0bs
1
@Jubobs 确实。我已经添加了一个链接到一个旧的答案,它说明了 git push --force 的效果:http://stackoverflow.com/a/23434601/6309 - VonC
很酷。拥有一整个库存的旧答案很方便 :) - jub0bs

3
在B将自己的更改推送到相同分支之前,需要拉取A的更改的原因是,否则B将重写历史记录(删除A的提交以便使用自己的提交),并且A的提交(不在B的本地分支中)将会丢失。
只有在推送到相同分支时才会出现这种情况,因此B可以推送到另一个分支而无需先拉取A的提交。在那种情况下,A和B的提交将在稍后合并它们的分支时进行合并。
如果您确实想将更改推送到包含不在本地分支中的提交的远程分支,则可以指示git不警告您并继续进行推送,使用git push --force(或git push -f)。但是,请小心,因为在大多数情况下(特别是与其他人共同工作时),不建议这样做。不在本地分支中的提交将从远程分支中删除。

3

Git中的每个分支都是一系列按时间排序的提交。

当您想要推送一个不基于该分支最新提交的提交时,您需要首先拉取中间提交(这可能涉及手动合并)。

仅当多个用户向同一分支推送时才存在此问题。 当每个用户在个人分支上单独工作时,他们永远不必在推送之前拉取。 当然,除非他们有意要合并其他人的分支。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接