1. 查看本地git仓库下的tag
git tag
2. 拉取/克隆代码
- 本地没有仓库
git pull git@xxx.xxx:xxx.git
- 本地有仓库
git clone git@xxx.xxx:xxx.git
3. 切换到某一tag下
git checkout tag_name
4.合并子模块
git submodule update --remote
切换到某一tag下,当前处于一个"detached HEAD"游离状态。
在包含子模块的项目上工作
- 每一个tag就是代码仓库中的一个快照。
若要编辑此tag下的代码,可以把tag快照对应的代码拉取到一个分支上。
如编辑v1.0下的tag代码:
git checkout -b new_branch v1.0
git checkout -b [分支名称][tag标签名称]
或者:
- 1. 进入子模块目录中手动抓取与合并
进入子模块目录
git fetch
git merge origin/master
进入主仓库目录
- 2. 直接在主仓库里抓取与合并子模块
git submodule update --remote
- 3. 在子模块上工作
当运行 git submodule update 从子模块仓库中抓取修改时,Git 将会获得这些改动并 更新子目录中的文件,但是会将子仓库留在一个称作 “游离的 HEAD” 的状态。 这意味着没有本 地工作分支(例如 “master”)跟踪改动。 所以你做的任何改动都不会被跟踪。
git checkout stable 进入子模块并检出相应的工作分支
git submodule update --remote 从上游拉取数据
git submodule update --remote --merge 从上游拉取数据并合并
- 4. 发布子模块改动
如果我们在主项目中提交并推送但并不推送子模块上的改动,其他尝试检出我们修改的人会遇到 麻烦,因为他们无法得到依赖的子模块改动。 那些改动只存在于我们本地的拷贝中。
为了确保这不会发生,可以让 Git 在推送到主项目前检查所有子模块是否已推送。
git push 命令接受可以设置为** check
** 或 on-demand
的--recurse-submodules
参数。 如果任何提交的子模块改动没有推送那么 check
选项会直接使 push 操作失败。
- 提交主项目时自动检测子模块是否有未提交的改动
git push --recurse-submodules=check
- 提交主项目时,尝试自动推送已改动的子模块
git push --recurse-submodules=on-demand
子模块的问题
在有子模块的项目中切换分支可能会造成麻烦。
如果你创建一个新分支, 在其中添加一个子模块,之后切换到没有该子模块的分支上时,你仍然会有一个还未跟踪的子模块目录。