git remote
添加远程版本库:
git remote add [shortname] [url]
git remote -v
git remote rm name # 删除远程仓库
git remote rename old_name new_name # 修改仓库名
git submodule
git submodule add <仓库地址> <本地路径>
添加成功后,在父仓库根目录增加了.gitmodule文件。
git submodule init
git submodule update
★ git rebase
git checkout feature
git rebase master
//这两条命令等价于git rebase master feature
解释一下:就是说,你要先切到feature分支上,然后再把前面master合到feature上
解释:当在feature分支上执行git rebase master时,git会从master和featuer的共同祖先B开始提取feature分支上的修改,也就是C和D两个提交,先提取到。然后将feature分支指向master分支的最新提交上,也就是M。最后把提取的C和D接到M后面,但这个过程是删除原来的C和D,生成新的C’和D’,他们的提交内容一样,但commit id不同。feature自然最后也是指向D。
再捋一下流程:
-
先切换到自己分支
-
git rebase 其他分支名字
-
如果有冲突,解决冲突
-
然后一定要commit 【git commit】
-
然后再git rebase --continue
★ --continue\ --abort\ --abort
git rebase --continue
执行完$git pull --rebase 之后,本地如果产生冲突,手动解决冲突之后,用"git add"命令去更新这些内容的索引(index),然后只要执行:
$ git rebase --continue 就可以线性的连接本地分支与远程分支,无误之后就回退出,回到主分支上。
注意:一般情况下,修改后检查没问题,使用rebase continue来合并冲突。
git rebase --abort
执行之后,本地内容会回到提交之间的状态,也就是回到以前提交但没有pull是的状态,简单来说就是撤销rebase。
git rebase --skip
git rebase --skip 引起冲突的commits会被丢弃,对于本文应用的例子来说开发者A对c.sh文件的commit无效,开发者A自己修改的部分全部无效,因此,在使用skip时请慎重。
执行:$ vim c.sh
查看本地c.sh文件提交内容,展示如下图所示,执行语句之后开发者A的修改无效。
★ rebase 和 merge的区别
git rebase 与 git merge 解决了相同的问题。都是将一个分支的提交合并到另一分支上,那它们有哪些不同喃
merge
git merge 的优势是它保留了分支的结构与历史提交目录,但同时这也导致了提交历史会被大量的 merge 污染
rebase
rebase 合并往往又被称为 「变基」
它是将把所有的提交压缩成一个 patch 。然后把 patch 添加到目标分支里。rebase 与 merge 不同的是,rebase 通过为原始分支中的每个提交创建全新的 commits 来重写项目历史记录
git rebase 的优势是可以获得更清晰的项目历史。首先,它消除了 git merge 所需的不必要的合并提交;其次,正如你在上图中所看到的,rebase 会产生完美线性的项目历史记录,你可以在 feature分支上没有任何分叉的情况下一直追寻到项目的初始提交。
但是, rebase 会丢失合并提交的上下文, 使我们无法看到真实的更改是何时合并到目标分支上的
★ 总结
特点
rebase 结果之后可以看到完美的线性历史提交记录,而merge只是再当前分支多了一个merge的commit
缺点:
merge的提交记录会被大量的merge污染
rebase会丢失合并提交的上下文, 使我们无法看到真实的更改是何时合并到目标分支上的,,好像是之前的一些commit会丢掉,就剩最后一个,反正有点问题
总结
这种东西主要还是得看个人习惯,我感觉只要用的习惯,能做到合作开发就没有问题