我应该先推还是拉?

时间:2017-07-18 16:10:20

标签: git github git-push git-pull

请想象一下:

我的同事和我正在主分公司工作。我已经更改(添加和删除)了一些代码。与此同时,我的同事做了一些更改,并将commit推送到主分支。

现在我当前的工作目录与master分支不同,我想在主分支和工作目录上保留两个更改。

在这种情况下我该怎么做?

如果我进行推送,主分支将与我的工作目录相同(我的同事的更改将会消失),如果我先进行拉取,自然我所有的更改都会走了无论如何,我该如何处理这种情况?

4 个答案:

答案 0 :(得分:3)

使用Git时,您的更改和同事的更改都不会轻易丢失。一旦提交了某些内容,需要花费一些精力才能再次实际删除这些提交的更改。这是Git的一个美丽方面。

在您描述的情况下,无论如何都无法推送,因为Git会检测到它们是远程存储库中的更改,这些更改在本地存储库中不可用。您将不得不获取这些更改,然后将它们合并或在远程存储库中提取的更改之前重新定义更改。

为了方便起见,你应该做git pull。如果可能的话,Git会自动将您的同事变更合并到您的工作副本中。如果您的同事和您自己的更改以更复杂的方式发生冲突,则您必须手动合并更改。但如果你们两个都遵循结构化的Git工作流程,那么这种情况实际上并不常发生。

答案 1 :(得分:3)

假设您已在本地提交代码,您应首先执行:

git pull origin master --rebase

这将从远程获取代码并重新绑定它。完成后,只需将代码推回到远程。

git push origin master

答案 2 :(得分:0)

git pull使用给定参数运行git fetch并调用git merge以将检索到的分支头合并到当前分支中。

source

先拉。您的贡献不会丢失。这就是版本控制系统的优势。它允许大团队同时在代码团队中工作。

答案 3 :(得分:0)

在我们将更改推送到git-hub中的分支之前,我们需要确保我们的本地存储库具有对git-hub所做的所有更改。正确的下一步是拉。这可以通过以下两种方式之一起作用:

  1. 繁体pull:合并命令将组合远程更改 与我们当地的变化。这将添加一个新的提交,并且 变更清单应该描绘出不同的发展方式 一起回来。

  2. Pull+rebase:如果我们选中re-base选项,Hg/Git将 暂时撤消(“倒回”)来自新本地提交的任何更改, fast-forward所以本地分支与遥控器相同 重做(“重播”)本地changes/commits到新的HEAD 科。这将更改本地提交的时间戳,但是 变更清单应该描述所有变化都是线性发生的。在 无论哪种情况,我们都有可能需要解决冲突 我们碰巧改变了任何重叠的部分 您最近的commits

  3. 中的代码