【问题标题】:How to commit and push changes using Git如何使用 Git 提交和推送更改
【发布时间】:2013-02-13 14:49:12
【问题描述】:

我只是想澄清在特定分支上提交的工作原理。

假设我正在开发一个名为“Metro”的分支。我对一些文件进行了一些更改,但我还没有准备好将它们推送到远程存储库。

我需要尽快修复一个修补程序。我需要切换到一个名为“Master”的干净分支,但我不能,因为我会覆盖我已更改的文件。我需要先提交这些,然后才能切换。

我的问题是,如果我在“Metro”分支上提交这些更改,然后切换到干净的“Master”分支,在“Metro”中所做的更改是否会因为我已经提交而被推送到远程“Master”存储库他们,即使我正在推到另一个分支?

为了简洁起见,提交是与分支隔离的,还是在推送到远程仓库时添加所有提交?

【问题讨论】:

    标签: git git-branch git-commit


    【解决方案1】:

    在你通过git checkout master切换分支到master之前,你必须先git commit -m 'some message',否则,git会尝试把你当前分支的变化和你一起带到master分支。

    在“Metro”中所做的更改会被推送到远程“Master” 回购,因为我已经提交了它们,即使我正在推动 另一个分支?

    绝对不是。如果您告诉 git 这样做,git 只会将提交的更改从 Metro 合并到 master 。这是设计使然(注意:请阅读 git 遥控器,因为使用遥控器,您实际上可以将推送设置为“默认”执行此操作,在这种情况下您需要小心。 )。

    【讨论】:

      【解决方案2】:

      为了简洁起见,将提交隔离到分支,或者全部执行 推送到远程仓库时添加提交?

      为了简洁:第一部分是的:-)。

      从技术上讲,git 中的分支是一个提交链,以及一个名称。如果你推送一个分支,你将推送属于它的所有提交(除非远程仓库已经有它们),但没有别的。所以不,git 不会以某种方式推送所有提交。

      但是请注意,您必须注意只推送您想要推送的分支 - git push 可以配置为推送所有您的分支。为避免这种情况,请设置配置变量 push.default:

      git config push.default current
      

      这确保git push 只会推送当前分支(而不是所有分支,这曾经是默认的)。

      【讨论】:

        【解决方案3】:

        要了解分支在 Git 中的工作方式,我认为重要的是要改变思维方式,始终牢记提交树。您有一个提交的非循环树,其中每个提交都有许多父提交,没有别的。分支现在只是指向该树中特定提交的简单指针。如果您对分支进行新的提交,那么真正发生的事情就是您创建了一个新的提交对象,其中包含以前版本作为其父版本的更改,并且您的分支指针移动到现在添加到整个树中的新提交.

        因此,分支之间是完全独立的,同样,它们并没有多大意义。它们只是指针。

        在您的情况下,当您从 metro 切换到 master 时,您(可能)在树的另一侧进行操作。您现在创建的所有提交只会移动当前分支指针——master——但不会影响任何其他分支。

        如果你推送一个分支,所有发生的事情就是你告诉远程分支指向的提交,然后你给远程它完成树所需的所有对象。

        【讨论】:

          猜你喜欢
          • 2017-07-04
          • 2016-01-19
          • 2012-04-28
          • 2014-07-13
          • 1970-01-01
          • 2013-06-09
          • 2011-06-29
          • 2013-07-28
          • 2022-05-31
          相关资源
          最近更新 更多