git 学习
pull (拉取)和fetch(获取)
- pull 获取远程修改 并与本地合并
- fetch 获取但不会与本地合并
- 所以,fetch更安全
git 使用常见流程
step 1 合并之前先确保与远程库同步
- 合并是git sync 操作
step2 合并
- fetch
step3 合并提交
- fetch & rebase
- 此时会要求你是否merge
- merge 完成
- 此时,对方的修改就合并到了本地
解决冲突
- 提交时(commit & push)发现仓库与本地有冲突
双击冲突文件
- merge工具(tortoiseMerge)打开看冲突哪里
- 编辑
冲突图标
- 增加了一行
- 已经删除了一行
= 曾经修改但是现在一样了
- 修改后重新提交 commit & push
查看修改
- 单个文件右键 diff with previous version
- 或者查看多个文件: 文件夹空白处点击右键 git sync 同步窗口里查看
- commit 按钮可以查看所有修改
- 还有一个 compare with base ,比较新旧文件的差异
- compare with working tree 可以看到远程库中别人的修改
- blame 是文件所有修改者
commit 和push
- commit 提交到本地的git 仓库
- 最后一次性的push 提交到远程
gitignore 规则
合并分支的办法除了merge还是rebase
- rebase 变基
c3和c4 合并 为c2
- merge 最简单,他是把c3 c4 和 共同祖先 c2 三方合并。
- 合并后得到一个新的快照 并提交。
变基
- 变基是将一系列提交按照原有次序依次应用到另一分支上,而合并是把最终结果合在一起。
- https://git-scm.com/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E5%8F%98%E5%9F%BA
- 提取c4的修改,然后在c3上应用。这个叫做变基
- 如下:
通过合并操作来整合分叉的历史
- 把对分支a的修改挪到分支b上,好像重新播放一样。
- 上图中
- git checkout experiment 当前分支
- git rebase master 目标分支
- 俩分支有共同祖先c2
- 上面的操作原理: 将 C4 中的修改变基到 C3 上
- 它的原理是首先找到这两个分支(即当前分支 experiment、变基操作的目标基底分支 master) 的最近共同祖先 C2,然后对比当前分支相对于该祖先的历次提交,提取相应的修改并存为临时文件, 然后将当前分支指向目标基底 C3, 最后以此将之前另存为临时文件的修改依序应用。
- 对比c4 对c2的修改,村委临时文件c4plus
- 然后将当前分支 指向目标基底c3
master 分支的快进合并
- 一般我们这样做的目的是为了确保在向远程分支推送时能保持提交历史的整洁——例如向某个其他人维护的项目贡献代码时。 在这种情况下,你首先在自己的分支里进行开发,当开发完成时你需要先将你的代码变基到 origin/master 上,然后再向主项目提交修改。 这样的话,该项目的维护者就不再需要进行整合工作,只需要快进合并便可。