如何使用Git提交和推送更改

时间:2013-02-27 17:15:32

标签: git git-branch git-commit

我只是想澄清一下特定分支的提交方式。

我们说我正在一个名为" Metro"的分支机构工作。我对一些文件进行了一些更改,但我还没准备好将它们推送到远程存储库。

我需要尽快修复一个修复程序。我需要切换到名为" Master"的干净分支,但我不能,因为我会覆盖我已更改的文件。我需要在切换之前提交这些内容。

我的问题是,如果我在" Metro"分支,然后切换到干净"大师"分支机构,将在" Metro"被推到遥控器" Master" repo因为我已经提交了它们,即使我正在推动另一个分支?

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

3 个答案:

答案 0 :(得分:3)

在通过git checkout master将分支切换到主分区之前,您必须先git commit -m 'some message',否则,git会尝试将您当前分支的更改与您一起转移到主分支。

  

将“Metro”中的更改推送到远程“Master”   回购,因为我已经承诺了,即使我正在努力   另一个分支?

绝对不是。如果你告诉它,git只会将Metro中提交的更改合并到master。这是设计的(注意:请阅读git遥控器,因为使用遥控器,您实际上可以通过“默认”设置您的推动,这将是您需要小心的情况。 )。

答案 1 :(得分:2)

  

使它简洁,提交被隔离到分支,或者做所有   推送到远程仓库时,是否会添加提交?

简明扼要:第一部分是: - )。

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

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

git config push.default current

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

答案 2 :(得分:1)

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

因此,分支完全独立于彼此,并且以同样的方式,它们并不真正意义重大。它们只是指针。

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

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