我只是想澄清一下特定分支的提交方式。
我们说我正在一个名为" Metro"的分支机构工作。我对一些文件进行了一些更改,但我还没准备好将它们推送到远程存储库。
我需要尽快修复一个修复程序。我需要切换到名为" Master"的干净分支,但我不能,因为我会覆盖我已更改的文件。我需要在切换之前提交这些内容。
我的问题是,如果我在" Metro"分支,然后切换到干净"大师"分支机构,将在" Metro"被推到遥控器" Master" repo因为我已经提交了它们,即使我正在推动另一个分支?
为了简洁起见,将提交隔离到分支,还是在推送到远程仓库时添加所有提交?
答案 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
时,您(可能)在树的另一侧进行操作。您现在创建的所有提交只会移动当前分支指针 - 主 - 但不会影响任何其他分支。
如果你推动一个分支,所有发生的事情就是你告诉远程分支指向的提交,然后你给远程提供完成树所需的所有对象。