【问题标题】:Should I do either push or pull first?我应该先推还是拉?
【发布时间】:2017-12-23 15:16:45
【问题描述】:

请想象一下:

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

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

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

如果我做一个push,master分支会和我的工作目录一样(我同事的更改会消失),如果我先做一个pull,我所有的更改自然会消失。无论如何,我该如何处理这种情况?

【问题讨论】:

  • 如果您拉取,您的更改不会丢失,而是合并
  • @Edmundo 真的吗?!所以我必须先拉一下?
  • git pull origin (或任何其他 repo 名称)。 git-scm.com/docs/git-pull
  • @Edmundo 我明白了,谢谢。 (但我仍然害怕运行该命令,因为我无法重写所有更改)
  • 取决于您的设置 pull 等于 fetch+merge (默认)或 fetch+rebase - 所以默认情况下它会从 master 获取新的东西,然后合并它与你的东西,如果有冲突,你可能会发生冲突。

标签: git github git-push git-pull


【解决方案1】:

在使用 Git 时,无论是您的更改还是您同事的更改都不会那么容易丢失。一旦提交了某些内容,需要付出一些努力才能再次真正删除那些提交的更改。这是 Git 的美妙之处之一。

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

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

【讨论】:

    【解决方案2】:

    假设你已经在本地提交了代码,你首先应该这样做:

    git pull origin master --rebase
    

    这将从远程获取代码并对其进行变基。完成后,只需将代码推回远程即可。

    git push origin master
    

    【讨论】:

    • 是否必须使用--rebase?如果我不使用它会怎样?它到底是做什么的?
    • @MartinAJ 不,--rebase 不是强制性的。 git pullgit fetch 后跟 git merge 的组合。 --rebase 只是使用 rebase 而不是 merge。因此,最后,这完全取决于您对合并与变基的偏好。就我个人而言,当有很多提交和冲突时,我更喜欢合并,而当分支仅因几个简单的提交而分歧时,我更喜欢 rebase。
    【解决方案3】:

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

    source

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

    【讨论】:

      【解决方案4】:

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

      1. 传统pull:合并命令将合并远程更改 随着我们当地的变化。这将添加一个新的提交,并且 变更列表应该描述不同的开发线有 一起回来。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-22
        • 2016-09-14
        • 2022-11-05
        • 2017-07-18
        • 1970-01-01
        • 1970-01-01
        • 2018-05-08
        • 2010-11-02
        相关资源
        最近更新 更多