当我们在多台电脑上开发一个项目的时候, 需要经常修改提交内容并在另一台电脑上更新远程最新的代码, 今天看了一下如何从远程代码仓库获取更新到本地, 总结了一下网上的文章, 采用如下的方式比较简单.
当我们在多台电脑上或者多人共同开发一个项目的时候, 远程仓库会不时地被修改, 而自己也在不断修改自己的本地仓库, 因此仓库的远程版本与本地版本势必会导致不一致. 比如 A 同学基于版本 1 修改了远程仓库并提交了, 形成了版本 2;B 同学的本地仓库是基于版本 1 的, 并对版本 1 做了自己的修改, 当 B 同学更新本地仓库的时候会自动地将本地仓库与远端版本 2 仓库合并, 这个合并被期望能够保护 B 同学基于版本 1 进行的一些修改.
这里说明这种情况下, Git 的处理机制以及我们保护本地基于旧版本仓库修改的内容的的应对措施.
方法一
查看远程分支
使用如下命令可以查看远程仓库 (我这里有一个 origin 仓库)
- $ Git remote -v
- origin [email protected]:username``/Animations``.git (fetch)``origin [email protected]:username``/Animations``.git (push)`
从远程获取最新版本到本地
使用如下命令可以在本地新建一个 temp 分支, 并将远程 origin 仓库的 master 分支代码下载到本地 temp 分支
- $ Git fetch origin master:temp
- remote: Counting objects: 18, ``done``.``remote: Compressing objects: 100% (6``/6``), ``done``.``remote: Total 11 (delta 3), reused 0 (delta 0)``Unpacking objects: 100% (11``/11``), ``done``.``From github.com:username``/Animations`` ``* [new branch] master -> temp`` ``c07bdc7..40f902d master -> origin``/master`
比较本地仓库与下载的 temp 分支
使用如下命令来比较本地代码与刚刚从远程下载下来的代码的区别:
- $ Git diff temp
- diff --Git a/README.md b/README.md``deleted file mode ``100644``index 76699ed..``0000000``--- a/README.md``+++ /dev/``null``@@ -``1``,``6` `+``0``,``0` `@@``-Animations``-==========``-``...`
合并 temp 分支到本地的 master 分支
对比区别之后, 如果觉得没有问题, 可以使用如下命令进行代码合并:
- $ Git merge temp
- Updating c07bdc7..40f902d``Fast-forward`` ``README.md | 6 ++++++`` ``src``/cn/exercise/animations/MainActivity``.java | 4 ++--`` ``2 files changed, 8 insertions(+), 2 deletions(-)`` ``create mode 100644 README.md`
删除 temp 分支
如果 temp 分支不想要保留, 可以使用如下命令删除该分支:
- $ Git branch -d temp
- Deleted branch temp (was 40f902d).`
如果该分支的代码之前没有 merge 到本地, 那么删除该分支会报错, 可以使用 Git branch -D temp 强制删除该分支.
方法二
Git pull 的作用是, 从远程库中获取某个分支的更新, 再与本地指定的分支进行自动 merge. 完整格式是:
$ Git pull < 远程库名 > < 远程分支名 >:< 本地分支名 >
比如, 取回远程库中的 develop 分支, 与本地的 develop 分支进行 merge, 要写成:
Git pull origin develop:develop
如果是要与本地当前分支 merge, 则冒号后面的 < 本地分支名 > 可以不写.
Git pull origin develop
通常, Git 会将本地库分支与远程分支之间建立一种追踪关系. 比如, 在 Git clone 的时候, 所有本地分支默认与远程库的同名分支建立追踪关系. 也就是说, 本地的 master 分支自动追踪 origin/master 分支. 因此, 如果当前处于本地 develop 分支上, 并且本地 develop 分支与远程的 develop 分支有追踪关系, 那么远程的分支名可以省略:
Git pull origin
其实, Git pull 命令等同于先做了 Git fetch , 再做了 Git merge. 即:
- Git fetch origin develop
- Git checkout develop
- Git merge origin/develop
或者
- Git fetch origin master:tmp
- Git diff tmp
- Git merge tmp
- Git branch -d tmp
好多人不建议使用 Git pull, 喜欢自己 merge, 以便万一自动 merge 出错的时候可以解决冲突
来源: http://www.bubuko.com/infodetail-3650125.html