rebase和merge的区别? fetch和pull的区别?
- merge会找到相同的祖先然后创建一个全新的合并提交,会保留完整的历史,包括签出以及合并的历史
text
A---B---C --------- (feature)
/ \
D---E---F---G---------------H (main)
- rebase会把fearture的提交在main重放一边,就像fearture是从main从新拉出来的一样,会重写历史
text
A'--B'--C' (feature)
/
D---E---F---G--- (main)
GIT如何做到多个仓库共享代码?
- Monorepo
- 使用git submodule
- 相对路径引用
- 打包npm发布
git submodule?
git submodule 允许你将一个 git 仓库作为另一个 git 仓库的子目录,同时保持提交的独立性。
git submodule update更新
sh
# 进入子模块目录
cd shared-lib
# 切换到特定提交
git checkout v1.2.3 # 或特定的commit hash
# 回到主仓库并提交这个更改
cd ..
git add shared-lib
git commit -m "Lock shared-lib to version v1.2.3"
最佳实践
使用特定提交或标签而非分支名:
sh
# 进入子模块目录
cd shared-lib
# 切换到特定提交
git checkout v1.2.3 # 或特定的commit hash
# 回到主仓库并提交这个更改
cd ..
git add shared-lib
git commit -m "Lock shared-lib to version v1.2.3"