Skip to content

远程相关

参考:https://github.com/geeeeeeeeek/git-recipes/wiki/3.2-%E4%BF%9D%E6%8C%81%E5%90%8C%E6%AD%A5

1. git fetch

将远程仓库的提交存储到本地仓库的远程分支中。此命令可以在将变更整合到本地之前查看其他人的修改。

即将远程仓库master的内容存储到origin/master中,而不是本地的master分支。

可以对origin/master进行正常的git loggit checkout等操作。

git fetch [<options>] [<repository> [<refspec>...]]
git fetch [<options>] <group>
git fetch --multiple [<options>] [(<repository> | <group>)...]
git fetch --all [<options>]
[root@dev git-test]# git fetch
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 1), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From gitee.com:ignorantshr/git-test
   8a52ff8..2b43768  master     -> origin/master

当你相要应用远程的变更时,可以使用git merge <repository>/<refspec>命令合并到本地分支。

[root@dev git-test]# git merge origin/master
Updating 8a52ff8..2b43768
Fast-forward
 pull-test | 1 +
 1 file changed, 1 insertion(+)

git pull是两者的快捷命令。

2. git pull

git pull相当于先执行git fetch,然后执行git merge

git pull [options] [<repository> [<refspec>...]]

-r--rebase选项使你可以将合并变为线性提交,防止合并提交(merge commits)的产生。使用该选项意味着:我想要将自己的提交放在最新的提交之后而不产生一个合并的提交。

例子:

  1. 远程仓库状态

远程仓库状态

  1. 本地提交一个修改
[root@dev git-test]# git log --oneline
6e87ba5 conflict commit
2b43768 test pull --rebase conflic

现在6e87ba5与远程仓库的a9f87ab冲突。

  1. 执行git pull
[root@dev git-test]# git pull -r
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 1), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From gitee.com:ignorantshr/git-test
   2b43768..a9f87ab  master     -> origin/master
First, rewinding head to replay your work on top of it...
Applying: conflict commit
Using index info to reconstruct a base tree...
M       pull-test
Falling back to patching base and 3-way merge...
Auto-merging pull-test

此时自动合并了冲突,还有不能自动合并冲突的状况,根据git的提示来执行操作即可。

  1. 查看本地提交记录
[root@dev git-test]# git log --oneline
fdd2dad conflict commit
a9f87ab pull --rebase 演示
2b43768 test pull --rebase conflic

会发现自己本地的提交在最后一个,并没有merge commits产生,保持了线性提交历史。