存储库包含有关您的项目的所有信息,包括所有更改的历史记录。每个更改都以“提交”的形式输入到存储库中。
为了显示分支和存储库之间的区别,我将描述您提到的过程,并在使用分支和存储库的过程中指出。这不是一个 git 教程,只是一个例子,所以我们可以讨论分支和 repos。
通常存在一个远程存储库,用户可以获取该存储库的副本,并且可以向该存储库提交更改。没有直接在远程仓库中完成实际的开发工作。
用户通过克隆远程存储库获得他们的第一个副本。这将在用户机器上创建一个本地存储库。本地仓库是远程仓库的完整副本。
分支只是指向存储库中的一个提交的指针。
在最简单的情况下,有一个名为“master”的默认分支,master 指向最近的提交。
每个提交都由一个数字标识,该数字是当时存储库的哈希值。例如,在这种情况下,master 可能会指向提交:
2d2cd6cf6f634e88ad19fa454fdcd2e1c26009c7
开发人员可以克隆远程 repo,并签出分支 master。
然后创建并签出开发分支(例如 featureX-dev)。
git checkout -b featureX-Dev
此时,两个分支(master 和 featureX-Dev)都指向同一个提交。
更改您的文件。
将更改提交到分支 featureX-dev 的本地副本。
现在,在您的本地存储库中,分支 featureX-Dev 指向比 master 更新的提交。
将分支 featureX-dev 推送到远程仓库,以便对其进行审查。
git push -u origin featureX-dev
第一次将分支推送到远程时使用 -u 告诉 git 你要跟踪这个分支。
其他开发人员(已经克隆了远程仓库)可以通过执行拉取从远程仓库获取分支 featureX-dev。
在他们审核并告诉您没问题后,您可以将分支 featureX-dev 与您本地 repo 中的 master 副本合并,然后推送 master。
但是等等!如果其他开发人员已经将他们的更改推送到远程主机怎么办?
您在本地 repo 中的结帐大师
git checkout master
然后从远程拉出master
git pull origin master
您拥有其他人所做的新更改,并且 master 指向他们的最后一次提交。
现在您可以将您的 dev 分支合并到 master 的本地副本中
git merge featureX-dev
如果没有人改变主人,就没有伤害。合并只会将您的提交添加到主分支。
如果创建了冲突,请解决冲突,然后将 master 推送回远程。