多台主机共同开发时git更新远程仓库代码到本地
场景:当我们在多台电脑上开发一个项目的时候,需要经常修改提交内容并在另一台电脑上更新远程最新的代码,今天看了一下如何从远程代码仓库获取更新到本地
方法一:
查看远程分支
使用如下命令可以查看远程仓库(假如这里有一个origin仓库)
1 $ git remote -v 2 origin git@github.com:username/Animations.git (fetch) 3 origin git@github.com:username/Animations.git (push)
从远程获取最新版本到本地
使用如下命令可以在本地新建一个temp分支,并将远程origin仓库的master分支代码下载到本地temp分支
1 $ git fetch origin master:temp 2 remote: Counting objects: 18, done. 3 remote: Compressing objects: 100% (6/6), done. 4 remote: Total 11 (delta 3), reused 0 (delta 0) 5 Unpacking objects: 100% (11/11), done. 6 From github.com:username/Animations 7 * [new branch] master -> temp 8 c07bdc7..40f902d master -> origin/master
比较本地仓库与下载的temp分支
使用如下命令来比较本地代码与刚刚从远程下载下来的代码的区别:
1 $ git diff temp 2 diff --git a/README.md b/README.md 3 deleted file mode 100644 4 index 76699ed..0000000 5 --- a/README.md +++ /dev/ null 6 @@ - 1 , 6 + 0 , 0 @@ 7 -Animations -========== - 。。。
合并temp分支到本地的master分支
对比区别之后,如果觉得没有问题,可以使用如下命令进行代码合并:
1 $ git merge temp 2 Updating c07bdc7..40f902d 3 Fast-forward 4 README.md | 6 ++++++ src/cn/exercise/animations/MainActivity.java | 4 ++-- 5 2 files changed, 8 insertions(+), 2 deletions(-) 6 create mode 100644 7 README.md
删除temp分支
如果temp分支不想要保留,可以使用如下命令删除该分支:
1 $ git branch -d temp 2 Deleted branch temp (was 40f902d).
如果该分支的代码之前没有merge到本地,那么删除该分支会报错,可以使用git branch -D temp强制删除该分支。
方法二
git pull的作用是,从远程库中获取某个分支的更新,再与本地指定的分支进行自动merge。完整格式是:
1 $ git pull <远程库名> <远程分支名>:<本地分支名>
比如,取回远程库中的develop分支,与本地的develop分支进行merge,要写成:
1 $ git pull origin develop:develop
如果是要与本地当前分支merge,则冒号后面的<本地分支名>可以不写。
1 $ git pull origin develop
通常,git会将本地库分支与远程分支之间建立一种追踪关系。比如,在git clone的时候,所有本地分支默认与远程库的同名分支建立追踪关系。也就是说,本地的master分支自动追踪origin/master分支。因此,如果当前处于本地develop分支上,并且本地develop分支与远程的develop分支有追踪关系,那么远程的分支名可以省略:
1 $ git pull origin
其实,git pull 命令等同于先做了git fetch ,再做了git merge。即:
1 git fetch origin develop 2 git checkout develop 3 git merge origin/develop
或者
1 git fetch origin master:tmp 2 git diff tmp 3 git merge tmp 4 git branch -d tmp
好多人不建议使用git pull,喜欢自己merge,以便万一自动merge出错的时候可以解决冲突
以上两个方法经常用于多台主机协同开发,但是在实际开发中,我们常常遇到一些复杂的应用场景,不单单是pull
,commit
,push
就能解决
比如当主机A的本地仓库进行了代码修改或新增之后,有时会没有及时提交到远程仓库中,而主机B又已经commit了一次,这时两台主机的仓库不是同步的。
如果此时主机A需要同步远程仓库,则会使用到git stash来存储主机A后面未commit的代码,从而回滚到主机A上一次t的commit
具体方法参考:git pull报错及解决办法------git stash - 你本无意丶穿堂风 - 博客园 (cnblogs.com)