为什么没有推入git就提交?

Mar*_*o36 6 git git-push git-commit git-commands

我开始学习Git了.我一直在搞乱GitKraken,我希望使用GUI是保存和分享内容的可行途径.我更喜欢GUI到命令行.

现在我明白了,在GUI中,我需要stage的文件,然后commit他们,然后push,上传他们.但为什么pushcommit两个不同的东西?为什么只想commit本地,没有以下上传来保持文件同步?

Mat*_*ith 14

一些(具体)原因.TLDR以粗体显示.

第一个原因是您可能无法推送到遥控器,因为您没有连接到互联网.

第二个原因是有时提交尚未准备就绪.例如,我练习TDD.在我提交了一个失败的测试(我这样做)后,我不想将其推送到远程,因为那时我的团队可能会引入一个失败的测试套件.另一个常见的做法是在推送它们之前压缩这些提交,因此它看起来像是一次提交.

第三个原因是,这是一个你不想与任何人分享的个人项目,所以没有任何遥控器可以推动.您不必拥有带git仓库的遥控器.

第四个原因是你可能有多个遥控器(一般来说,分布式语义会妨碍).所以在你提交之后,git将如何知道你要推送哪个遥控器?他们都是?某一个?七个中有两个?由于git是分布式VCS的语义,因此必须从git的角度明确推送.有关详细信息,请参阅poke的答案.

PS这是问题的主题,但是一旦你学会使用它们,命令行shell(包括bash)就是非常强大的接口.在熟练使用这些工具之后,使用它们比您将要找到的任何GUI快得多.这与您可以使用击键而不是鼠标执行强大动作的事实有关,并且它可以无限量地定制以满足您的需求.

  • @Marko36 是的,你基本上已经明白了。一旦您对每个人都会看到的“新”状态感到满意,那么您就可以推动您的工作。这可能是也可能不是在单次提交之后。压缩提交只是意味着将一堆提交变成单个提交。因此,如果我有 10 个提交,我可能不希望每个人都看到我所做的 10 个提交。也许我在提交日志中发誓,或者某些提交没有意义恢复(例如失败的测试提交)。因此,您可以将提交压缩为 1 个提交(本地),然后推送该单个提交(与 10 个提交的内容相同)。 (2认同)

pok*_*oke 8

Git是一个分布式版本控制系统.因此,没有单一的中央存储库,如Subversion甚至CVS.因此,如果有一个命令提交和推送,那么该提交将在哪里?什么是远程存储库?

在Git中,没有中央存储库.存储库中甚至没有任何层次结构.对于本地存储库,任何其他存储库都是可以与之交互的远程存储库.本地存储库只是任何其他存储库的可能远程存储库.

因此,本地和远程只是相对于当前位置的观点:本地存储库始终是当前存储库,而每个其他存储库都是可以与之交互的远程存储库.

使用Git时,您的本地存储库就是您与之交互的内容:您在本地提交所有更改.这有许多好处和用例,我不会在这里详细介绍,但实际上它是版本控制分布的原因,因为本地存储库具有所有信息,完整的历史记录.

因此,当您拥有具有完整历史记录和所有更改的本地存储库时,您需要一种与其他存储库交互的方法,以便您可以共享历史记录.这样做的两种方法是推拉(或获取).由于使用分布式存储库,每个存储库都是相同的,每个存储库都可以从另一个存储库推送或拉取(假设它们具有访问权限).

最后,提交和推送需要是单独的步骤,因为一个是与(本地)存储库交互,而另一个是与远程存储库共享更改的有意步骤.


Sco*_*ggs 5

另一个答案:没有充分的理由

在过去(比如五年前——按照今天的记忆标准,古代历史)人们有时无法连接到互联网! 他们想继续工作!所以他们只是在工作时承诺。当建立连接时,他们会继续推动他们的所有提交。Git 设计时以此为主要范式。

将所有这些时代闪现到现在,瞧,我们软件的版本机制没有改变(很多)。

有些人争辩说,您将所有提交都保留在本地,直到您对代码的健壮性感到满意为止。我很佩服他们的直觉:保护主存储库代码;尽可能保持完美。是的,当然,请这样做!

但是 Git 提供了一种对不太完美的代码更有效的机制,它被称为分支。创建一个分支,对其进行处理(一直推送提交)直到满意,然后将该分支合并到主分支。这样,如果您的计算机出现问题(硬盘崩溃、咖啡溢出、盗窃等),您的所有工作仍会得到备份。这是版本控制的要点之一,对吧?

还有一些人认为,在高度分布式的开发系统中,需要指定推送提交的位置和方式。这当然是一种选择,但我还没有在实践中看到这一点。我无法想象一家公司会对它的开发人员说:“去那里,你们每个人都保留自己的代码副本。我们会让你们随心所欲地相互推拉,并希望没有任何问题或错误令人困惑。” 是的。设置一个 bitbucket 或 github 帐户并告诉大家:“用它作为你的来源!”

所以坦率地说:每次提交都推送。这样做没有坏处,如果您不这样做,您可能会失去工作。