分支
许多使用 Git 的开发者都喜欢使用这种方式来工作,比如只在 master 分支上保留完全稳定的代码——有可能仅仅是已经发布或即将发布的代码。 他们还有一些名为 develop 或者 next 的平行分支,被用来做后续开发或者测试稳定性——这些分支不必保持绝对稳定,但是一旦达到稳定状态,它们就可以被合并入 master 分支了。 这样,在确保这些已完成的主题分支(短期分支)能够通过所有测试,并且不会引入更多 bug之后,就可以合并入主干分支中,等待下一次的发布。
<!-- 创建一个临时分支,用于开发 -->
git branch name
<!-- 切换分支 -->
git checkout name
<!-- 分支开发完成,提交 -->
git commit -a -m '注释内容'
<!-- 合并分支 -->
git checkout name[并入分支]
git merge name[待合并分支]
<!-- 查看分支合并冲突的文件 -->
git status
<!-- 合并后的分支提交远程分支 -->
git commit
git push origin dev
<!-- 同步远程分支到本地分支 -->
git fetch origin branch.name
<!-- 分支冲突:修改冲突内容,重新提交 -->
git status
git commit -a -m '合并版本冲突解决'
<!-- 删除远程分支 -->
git push origin -d branch.name
<!-- 修复远程分支和本地分支数量不符:本地分支存在远程已删除的分支 -->
git remote update origin --prune
子模块
子模块允许你将一个 Git 仓库作为另一个 Git 仓库的子目录。 它能让你将另一个仓库克隆到自己的项目中,同时还保持提交的独立。
子模块创建
将一个已存在的 Git 仓库添加为正在工作的仓库的子模块。 你可以通过在 git submodule add 命令后面加上想要跟踪的项目的相对或绝对 URL 来添加新的子模块。默认情况下,子模块会将子项目放到一个与仓库同名的目录中,如果你想要放到其他地方,那么可以在命令结尾添加一个不同的路径。
git submodule add url path
<!-- 设置子模块更新指定分支的更新,默认更新master分支的更新 -->
git config -f .gitmodules submodule.子模块名.branch 分支
克隆子模块项目
当你在克隆含有子模块的项目时,默认会包含该子模块目录,但其中还没有任何文件。 你必须运行两个命令:git submodule init 用来初始化本地配置文件,而 git submodule update 则从该项目中抓取所有数据并检出父项目中列出的合适的提交。
git clone url path
git submodule init
git submodule update
或则
git clone url
git submodule update --init --recursive
不过还有更简单一点的方式。 如果给 git clone 命令传递 --recurse-submodules 选项,它就会自动初始化并更新仓库中的每一个子模块, 包括可能存在的嵌套子模块。
git clone --recurse-submodules url path
设置和子模块相关的配置信息
<!-- 默认展示子模块的变更信息 -->
git config --global diff.submodule log
<!-- 显示子模块更改摘要信息 -->
git config status.submodulesummary 1
更新子模块项目
Git 默认会尝试更新 所有 子模块, 所以如果有很多子模块的话,你可以传递想要更新的子模块的名字。
git submodule update --remote
提交子模块项目
实现在子模块中将修改的代码提交到子模块对应的远程仓库
<!-- 进入子模块所在路径 -->
cd /path/to/submodule.path
git commit -a -m '注释'
<!-- 提交到对应的远程仓库分支 -->
git push origin HEAD:branch.name
<!-- 返回项目根目录 -->
cd /path
<!-- 更新该项目远程仓库下子模块的id -->
git commit -a -m '注释'
git push origin branch.name