git-基础概念和分支同步

序言

我们先说明几个概念:

  • 原始库:项目原始repository

  • 远程库:从原始库fork得到的成员远程库

  • 本地库:git clone到本地目录下的库

  • 工作区:即本地库对应的本地文件

  • 暂存区:git add file将文件添加到暂存区,下图中index

  • 版本库:即远程库,git commit -m “notes” file将文件从暂存区添加到版本库

    注:代码的各工作区域详解 http://www.jianshu.com/p/898e766d22e1

    各工作区域关系如下图所示:

- git fetch:将远程版本同步到本地版本,不会merge到本地副本(个人理解:这个副本就是工作区)

- git pull:远程库覆盖本地工作区(个人理解:同步远程库有而本地库和本地工作区没有的内容,原有内容不覆盖)

- 在实际使用中,git fetch更安全,因为在merge前,我们可以先查看更新情况,再决定是否要合并。

保持远程库与原始库的同步,以下是基本操作步骤

推荐参考:http://www.linuxdiyf.com/linux/23074.html

1. 配置原始库

  • 进入从远程库clone下来的本地项目目录,查看自己的远程库路径
git remote -v
  • 配置原始库的路径(最初的项目路径)
git remote add upstream 原始库url

//如果添加了不想要的路径,可通过命令删除:git remote remove <name>
  • 再次查看远程库路径
git remote -v

2. 与原始库同步

2.1 方法1:推荐
  • 同步原始库的信息到本地(此时已可以从本地访问原始库的master分支)
git remote update upstream
  • 获取原始库对应分支
git fetch upstream
  • 切换到远程库master分支(如果有其他开发分支的话)
git checkout master
  • 原始库与远程库同步(本地库内容不会丢失)
git merge upstream/master
  • 如果遇到merge冲突(自动合并失败,需要手动合并),按以下步骤解决

    • 可先冲突文件逐个添加

    • 或者查找冲突位置

      • git diff
    • 然后冲突解决

      • 可参考http://blog.csdn.net/afeionepiece/article/details/45695411
    • 最后再进行fetch和merge操作,会提示更新完成

      • git fetch upstream
      • git checkout master
      • git merge upstream/master
  • 本地库修改后可通过:git push推送本地库远程库

git push origin master
2.2 方法2:不推荐
  • 同步原始库的信息到本地
git remote update upstream
  • 切换到远程master分支
git checkout master
  • rebase衍合操作
git rebase upstream/master
  • 推送本地库到远程库
git push origin master
方法2评价
  • 方法2:
    • 使用该方法有一个大前提:

      • 如果本地库分支的commit已经提交到远程库中,就不要对该分支进行rebase衍合操作。
    • rebase操作可参考:

      • rebase为何可能导致commit丢失:http://gitbook.liuhui998.com/4_2.html
    • rebase衍合的问题:

      • 在进行衍合的时候,实际上抛弃了一些现存的提交对象而创造了一些类似但不同的新的提交对象。如果你把原来分支中的提交对象发布出去,并且其他人更新下载后在其基础上开展工作,而稍后你又用 git rebase 抛弃这些提交对象,把新的重演后的提交对象发布出去的话,你的合作者就不得不重新合并他们的工作,这样当你再次从他们那里获取内容时,提交历史就会变得一团糟。
    • rebase导致commit丢失如何解决

      • http://blog.csdn.net/w_xue/article/details/10975719

      • http://ju.outofmemory.cn/entry/149508

Acknowledgements: http://blog.csdn.net/libing403/article/details/51729744 http://blog.csdn.net/afeionepiece/article/details/45695411 http://blog.csdn.net/libing403/article/details/51732204 http://blog.csdn.net/wangbaochu/article/details/49470453

2017.07.08

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值