网上的一个挺系统的图:

1、远程库相关的操作命令

1.1、git remote :为了便于管理,Git要求每个远程主机都必须指定一个主机名。git remote命令就用于管理主机名。

git remote 命令即可,就会列出远程库的名字。在我们clone了刚才的项目之后,默认会看到一个origin的远程仓库。
  1. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/TestTwo (test)
  2. $ git remote
  3. origin
           显示出详细的url地址名和对应的别名.
git remote -v/--verbose
  1. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/TestTwo (test)
  2. $ git remote -v
  3. origin git@github.com:zhaoJoeyuan/TestTwo.git (fetch)
  4. origin git@github.com:zhaoJoeyuan/TestTwo.git (push)
添加远程仓库,一旦添加以后别名就代表远程库的版本库地址,可以直接使用。
git remote add name url 
git remote add joey git@github.com:zhaoJoeyuan/Test.git

  1. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/TestTwo (test)
  2. $ git remote add joey git@github.com:zhaoJoeyuan/Test.git
  3. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/TestTwo (test)
  4. $ git remote -v
  5. joey git@github.com:zhaoJoeyuan/Test.git (fetch)
  6. joey git@github.com:zhaoJoeyuan/Test.git (push)
  7. origin git@github.com:zhaoJoeyuan/TestTwo.git (fetch)
  8. origin git@github.com:zhaoJoeyuan/TestTwo.git (push)
删除添加的远程库
git remote remove name 
git remote remove joey
  1. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/TestTwo (test)
  2. $ git remote remove joey
  3. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/TestTwo (test)
  4. $ git remote -v
  5. origin git@github.com:zhaoJoeyuan/TestTwo.git (fetch)
  6. origin git@github.com:zhaoJoeyuan/TestTwo.git (push)
重命名远程库
git remote rename 原名字 新名字
git remote rename origin joey

  1. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/TestTwo (test)
  2. $ git remote rename origin joey
  3. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/TestTwo (test)
  4. $ git remote -v
  5. joey git@github.com:zhaoJoeyuan/TestTwo.git (fetch)
  6. joey git@github.com:zhaoJoeyuan/TestTwo.git (push)
查看指定主机的详细信息:
git remote show 主机名
git remote show joey
  1. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/TestTwo (test)
  2. $ git remote show joey
  3. * remote joey
  4. Fetch URL: git@github.com:zhaoJoeyuan/TestTwo.git
  5. Push URL: git@github.com:zhaoJoeyuan/TestTwo.git
  6. HEAD branch: master
  7. Remote branches:
  8. TestTTT new (next fetch will store in remotes/joey)
  9. master tracked
  10. zhaoJoeyuan-patch-1 tracked
  11. Local branch configured for 'git pull':
  12. master merges with remote master
  13. Local ref configured for 'git push':
  14. master pushes to master (fast-forwardable)
总的来说就是git  remote +各种不同的参数来做不同的操作。
1.2、git push:从本地向指定的远程库推送。
git分支推送/拉取顺序的写法是<来源地>:<目的地>所以push和pull肯定是相反的,push来源地是本机,pull的来源地是
     远程。
git push <远程主机名>   <本地分支名>:<远程分支名>。
  1. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/remote_test (master)
  2. $ git remote -v
  3. joey git@github.com:zhaoJoeyuan/RemoteForTest.git (fetch)
  4. joey git@github.com:zhaoJoeyuan/RemoteForTest.git (push)
  1. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/remote_test (master)
  2. $ git push joey master:master
  3. Counting objects: 3, done.
  4. Writing objects: 100% (3/3), 301 bytes | 0 bytes/s, done.
  5. Total 3 (delta 0), reused 0 (delta 0)
  6. To git@github.com:zhaoJoeyuan/RemoteForTest.git
  7. * [new branch] master -> master
将本地的master分支推送到了远程库的master分支,如果远程分之不存在将会被创建。

如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支。注意第一个分
支是不可以被删除的,我第一个创建的分支是joey/master
  1. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/remote_test (master)
  2. $ git push joey :joey/master
  3. To git@github.com:zhaoJoeyuan/RemoteForTest.git
  4. ! [remote rejected] joey/master (refusing to delete the current branch: refs/heads/joey/master)
  5. error: failed to push some refs to 'git@github.com:zhaoJoeyuan/RemoteForTest.git'
  6. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/remote_test (master)
  7. $ git push joey :master
  8. To git@github.com:zhaoJoeyuan/RemoteForTest.git
  9. - [deleted] master
等同于git push joey--delete maste (没试)

如果省略远程分支名,则表示将本地分支推送到与之存在Tracking的远程分支。 (后面的:和远程分支名字省略)
        比如常见的
git push origin master  
将本地的 master 分支推送到 origin 主机的属于本地master分支的upstream的分支,不存在的时候会自动创建。
没想到都可以推送成功,只要本地分支没出错.
以上是当前分支与远程分支没存在追踪关系,就是谁也不是谁upstream/downstream。此时接着调用
git push joey : 省略本地分支和远程分支的时候就会报错,提示。
  1. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/remote_test (master)
  2. $ git push joey
  3. fatal: The current branch master has no upstream branch.
  4. To push the current branch and set the remote as upstream, use
  5. git push --set-upstream joey master
提示当前分支没有upstream 分支,我们先了解一下什么是upstream分支
如果某一个库如joey库中的分支test被push到另一个库比如远程服务库server库中的分支main,那么main就是test的
upstream,而test就是main的downstream。其实就是网谁那push,想象成在你的上面。此时:
1)、对于从远程库中clone或fetch得到的本地分支,都在远程库中有一个upstream分支。
2)、对于在本地新建的本地分支,如果执行git push origin branch_name是不会为本地分支branch_name设定远程的
              upstream的。
              此时就需要我们自己设定了,有命令:git branch --set-upstream-to=xxx (upstream分支的名称)不过那暂时还没搞
清楚。一定要注意后面的名字要正确,是远程的时候需要主机名/远程分支名字.
  1. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/remote_test (master)
  2. $ git branch --set-upstream-to=joey/test
  3. Branch master set up to track remote branch test from joey.
但是在push的时候通过-u参数来设置更为方便,一旦设置成功以后就可以直接用git push命令来推送了,此时会遵循一
个推送规则。(如果当前分支与多个主机存在追踪关系,则可以使用-u选项指定一个默认主机)
至于那个推送规则由 git config中的push.default属性决定。在Git 2.0之前,这个属性的默认被设为'matching',2.0之后
则被更改为了'simple'。
  1. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/remote_test (master)
  2. $ git push -u joey master
  3. Counting objects: 3, done.
  4. Delta compression using up to 4 threads.
  5. Compressing objects: 100% (2/2), done.
  6. Writing objects: 100% (3/3), 307 bytes | 0 bytes/s, done.
  7. Total 3 (delta 0), reused 0 (delta 0)
  8. To git@github.com:zhaoJoeyuan/RemoteForTest.git
  9. 5a53d5f..8b609e8 master -> master
  10. Branch master set up to track remote branch master from joey.
从英文也能看出把远程的master设置成了当前master的upstream。
push.default 有几个可选值:nothing, current, upstream, simple, matching
其用途分别为:
nothing :push操作无效,除非显式指定远程分支。
current :push当前分支到远程同名分支,如果远程同名分支不存在则自动创建同名分支。
upstream : push当前分支到它的upstream分支上。
simple :simple和upstream是相似的,只有一点不同,simple必须保证本地分支和它的远程upstream分支同名,否
                             则会拒绝push操作。(注意必须同名)
matching : push所有本地和远程两端都存在的同名分支。
             因此如果我们使用了git2.0之前的版本,push.default = matching,git push后则会推送当前分支代码到远程分支,而
        2.0之后,push.default = simple,如果没有指定当前分支的upstream分支,就会收到上文的fatal提示。
  1. fatal: The current branch master has no upstream branch.
  2. To push the current branch and set the remote as upstream, use
  3. git push --set-upstream joey master
接下来你就可以直接用git push了,不加任何参数它会直接把本地当前所在的分支推送到远端对应的upstream
  1. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/remote_test (master)
  2. $ git push
  3. Counting objects: 3, done.
  4. Delta compression using up to 4 threads.
  5. Compressing objects: 100% (2/2), done.
  6. Writing objects: 100% (3/3), 313 bytes | 0 bytes/s, done.
  7. Total 3 (delta 0), reused 0 (delta 0)
  8. To git@github.com:zhaoJoeyuan/RemoteForTest.git
  9. 8b609e8..07d9e62 master -> maste
这样就推送成功了。

          git push --all 主机名 (奶奶的自己玩的时候还真有点用,不然就得自己一个个分支切换然后提交)
$ git push --all joey :将所有本地分支都推送到joey主机,本地种所有的分支以及上面的修改都推送上去了,此时假如
服务器上的版本更新了,可能就push不成功需要我们先更新代码。
$ git push origin --tags:git push不会推送标签(tag),除非使用--tags选项。
后面这两个都没有尝试。
1.3、git fetch :此命令会到远程仓库中拉取对应你本地仓库中还没有的数据。
git fetch <远程主机名>  将某个远程主机的更新,全部取回本地.但注意它只是把远程分支在你本地对应的分支上的
数据更新了,你本地的库里面还是没有任何数据的。比如:我已在远程库修改了Test.txt
注意:所取得的远程分支在本地主机上要用"远程主机名/分支名"的形式读取。比如origin主机的master,就要用
                      origin/master读取。
  1. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (joey/master)
  2. $ git fetch origin
  3. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (joey/master)
  4. $ git status
  5. On branch joey/master
  6. Your branch is behind 'origin/joey/master' by 1 commit, and can be fast-forwarded.
  7. (use "git pull" to update your local branch)
  8. nothing to commit, working directory clean
本地看不到任何的变化,但其实本地库对应的远程库的代码都已经更新了
  1. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (joey/master)
  2. $ git branch -a
  3. * joey/master
  4. remotes/origin/HEAD -> origin/joey/master
  5. remotes/origin/joey/master
  6. remotes/origin/master
  7. remotes/origin/next
  8. remotes/origin/re
  9. remotes/origin/server
  10. remotes/origin/test
就是如上待remote的已经更新成服务器上最新的代码了。此时再接着执行merge的操作把,远程库的代码merge到你
    本地库版本当中就会有数据了
  1. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (joey/master)
  2. $ git merge origin/joey/master
  3. Updating 255a3b2..1d07ddc
  4. Fast-forward
  5. Test.txt | 1 +
  6. 1 file changed, 1 insertion(+)
通过cat看(这是我本地实验的在远程库中更新了"远程更新"这几个字,一开始fetch完的时候cat Test.txt完全没变化的)
  1. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (joey/master)
  2. $ cat Test.txt
  3. 第一个文件!
  4. 修改的enen
  5. 远程更新
取回特定分支的更新,可以指定分支名。
git fetch <远程主机名> <分支名>。此时我再去操纵远程库,打算修改next分支和 master分支。然后只拉取master分
支然后把next的分支和master的分支全都合入看看变化是否符合预期。(前面显示了我这边远程的所有分支)助于怎么
修改我还是在原先内容加了远程更新。
  1. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (joey/master)
  2. $ git fetch origin master
  3. remote: Counting objects: 3, done.
  4. remote: Compressing objects: 100% (1/1), done.
  5. remote: Total 3 (delta 1), reused 3 (delta 1), pack-reused 0
  6. Unpacking objects: 100% (3/3), done.
  7. From github.com:zhaoJoeyuan/RemoteForTest
  8. * branch master -> FETCH_HEAD
  9. 07d9e62..a040ffb master -> origin/master
  1. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (master)
  2. $ cat Test.txt
  3. 第一个文件!
  4. 修改的enen
  5. 第三次修改
  6. 第五次修改
  7. 第六次修改
  8. 远程更新
  1. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (next)
  2. $ cat Test.txt
  3. 第一个文件!
  4. 修改的enen
  5. 第三次修改
  6. 第五次修改
可以看到只有master分支的改变了,符合预期。不一样的诗词史我们有merge也变了,可能是因为这个本地分支相当
于是新建的通过远程分支,所以才这样。要是本来就有应该就需要merge了。正好用next试验一下

  1. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (next)
  2. $ git fetch origin next
  3. remote: Counting objects: 3, done.
  4. remote: Compressing objects: 100% (2/2), done.
  5. remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0
  6. Unpacking objects: 100% (3/3), done.
  7. From github.com:zhaoJoeyuan/RemoteForTest
  8. * branch next -> FETCH_HEAD
  9. 8b609e8..5267571 next -> origin/next
  10. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (next)
  11. $ cat Test.txt
  12. 第一个文件!
  13. 修改的enen
  14. 第三次修改
  15. 第五次修改
  16. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (next)
  17. $ git merge origin/next
  18. Updating 8b609e8..5267571
  19. Fast-forward
  20. Test.txt | 1 +
  21. 1 file changed, 1 insertion(+)
  22. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (next)
  23. $ cat Test.txt
  24. 第一个文件!
  25. 修改的enen
  26. 第三次修改
  27. 第五次修改
  28. next远程更新
如上同样符合我们的预期。  注意前面之所以fetch这么顺利,我是直接clone的远程的分支,这样就不用设置再设置
跟踪分支了,还有一点是我修改的都是没有冲突的地方。入门先了解到这。
其实取得远程分支以后有两种处理方式:
1)、基于次分支创建一个新的分支。 然后你就在新分支上开发即可。
git checkout -b newBrach origin/master(远程分支名字)
这样执行玩这个就不用再merge 了,远程更新直接到本地了,也能理解毕竟这个新分支是基于你拉取下来的完整的
远程分支来创建的。
2)、git merge命令或者git rebase 命令,在本地分支上合并远程分支。
git merge origin/master     git rebase origin/master 
       小结:拉取下来的远程分支的更新一定注意是很本地当前的分支不是直接联系的,就是说不是直接拉取到本地的相应
                 的分支上的,这个概念的装换一下和svn update不一样。git pull才和 svn update以昂扬。
git 下的分支简单的两种:
“本地分支(local branches)” ,当你输入“git branch”时显示的
“远程跟踪分支(Remote-tracking branches)” ,当你输入“git branch -r”是显示的
跟踪分支的名称前有一个“远程的”标记名称(如 :origin, )后面跟一个“/”,然后远程仓库里分支的真正名称
分支索引的存放目录:
.git/refs/head/[本地分支]
.git/refs/remotes/[正在跟踪的分支]
也就是说fetch操作将会更新本地仓库的remote tracking,也就是refs/remotes中的代码,并不会对refs/heads中本
              地当前的代码造成影响
另外两种用法:
1)、 git fetch <远程主机名>   <远程分支名>:<本地分支名>: 抓取对应主机名称的远程分支的相应分支的更新,
                      并且新建一个本地分支来存放它。
  1. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (newmaster)
  2. $ git fetch origin next:local
  3. From github.com:zhaoJoeyuan/RemoteForTest
  4. * [new branch] next -> local
  1. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (local)
  2. $ cat Test.txt
  3. 第一个文件!
  4. 修改的enen
  5. 第三次修改
  6. 第五次修改
  7. next远程更新
确实成功了,那么假如是已经存才的本地分支那?也可以,有冲突解决冲突即可.

2)、git fetch  将更新git remote 中所有的远程库所包含分支的最新commit-id, 并且将其记录到.git/FETCH_HEAD文件
             中。
貌似所有的fetch都会修改.git/FETCH_HEAD文件,然后把最新的fetch修改的commitID放进去。如下:
  1. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (local)
  2. $ git fetch origin next:re
  3. From github.com:zhaoJoeyuan/RemoteForTest
  4. * [new branch] next -> re
此时FETCH_HEAD文件
  1. 52675714d0117f6732ad744ecaaf2dce7389b5f branch 'next' of github.com:zhaoJoeyuan/RemoteForTest
再执行git fetch (看样子一般不要这么用啊,全部都拉取下来了)
  1. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (local)
  2. $ git fetch
  3. remote: Counting objects: 12, done.
  4. remote: Compressing objects: 100% (8/8), done.
  5. remote: Total 12 (delta 3), reused 0 (delta 0), pack-reused 0
  6. Unpacking objects: 100% (12/12), done.
  7. From github.com:zhaoJoeyuan/RemoteForTest
  8. 1d07ddc..73fdfc0 joey/master -> origin/joey/master
  9. aba261d..5104d8b master -> origin/master
  10. 5267571..80d333e next -> origin/next
  11. 57c77bc..04a30ff server -> origin/server
此时FETCH_HEAD
  1. 73fdfc040d33b24d893a2b686385da5a0adc3425 not-for-merge branch 'joey/master' of github.com:zhaoJoeyuan/RemoteForTest
  2. 5104d8b4e3cd4875284faad0a2c8365441032c71 not-for-merge branch 'master' of github.com:zhaoJoeyuan/RemoteForTest
  3. 80d333e36ead0f32e6ec174cd70e0e8a69ab5667 not-for-merge branch 'next' of github.com:zhaoJoeyuan/RemoteForTest
  4. 57c77bc1e20931001e8268bbb4e2fb870041aeac not-for-merge branch 're' of github.com:zhaoJoeyuan/RemoteForTest
  5. 04a30ff3d362be74fcf39627cfbc115fb172bb7b not-for-merge branch 'server' of github.com:zhaoJoeyuan/RemoteForTest
  6. 5a53d5f5c7cbc39685cea1a20be91d49112cfc54 not-for-merge branch 'test' of github.com:zhaoJoeyuan/RemoteForTest
可见FETCH_HEAD是一个寿命很短的引用,用来跟踪刚刚从远程库中fetch下来的分支的最新的commitid。其实就是
来代替远程分支的名字的,其实是远程分支的最新的这一次的提交的commitid对应的指针。
此时就能理解git merge FETCH_HEAD 。当仅仅是fetch一个分支的时候 如下:
  1. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (joey/master)
  2. $ git fetch origin joey/master
  3. remote: Counting objects: 3, done.
  4. remote: Compressing objects: 100% (2/2), done.
  5. remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
  6. Unpacking objects: 100% (3/3), done.
  7. From github.com:zhaoJoeyuan/RemoteForTest
  8. * branch joey/master -> FETCH_HEAD
  9. 73fdfc0..64f26f9 joey/master -> origin/joey/master
从Log也能看出FETCH_HEAD 对应的分支。
  1. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (joey/master)
  2. $ cat Test.txt
  3. 第一个文件!
  4. 修改的enen
  5. 远程更新
  6. TTTTTTTTTTTTTTTT
  7. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (joey/master)
  8. $ git merge FETCH_HEAD
  9. Updating 73fdfc0..64f26f9
  10. Fast-forward
  11. Test.txt | 1 +
  12. 1 file changed, 1 insertion(+)
  13. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (joey/master)
  14. $ cat Test.txt
  15. 第一个文件!
  16. 修改的enen
  17. 远程更新
  18. TTTTTTTTTTTTTTTT
可以看到git merge FETCH_HEAD 就相当于 git merge original/joey/master

     1.4、git pull  取回远程主机某个分支的更新,再与本地的指定分支合并
完整命令,注意此时的数据源就是远程分支了.
git pull <远程主机名> <远程分支名>:<本地分支名>
注意这个远程分支名是不带origin/的前缀的(别名的前缀),有冲突的时候修改冲突即可,修改完毕add、commit。
  1. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (master)
  2. $ cat Test.txt
  3. 第一个文件!
  4. 修改的enen
  5. 第三次修改
  6. 第五次修改
  7. 第六次修改
  8. 远程更新
  9. 远程更新2
  10. TTTTTTTTTTTTTTTTTTTTTT
  11. PULL的修改
  12. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (master)
  13. $ git pull origin master:master
  14. remote: Counting objects: 3, done.
  15. remote: Compressing objects: 100% (2/2), done.
  16. Unpacking objects: 100% (3/3), done.
  17. remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
  18. From github.com:zhaoJoeyuan/RemoteForTest
  19. d2f5ef2..ee244d0 master -> master
  20. d2f5ef2..ee244d0 master -> origin/master
  21. warning: fetch updated the current branch head.
  22. fast-forwarding your working tree from
  23. commit d2f5ef264938919adc6e43459551397eaf96ef11.
  24. Already up-to-date.
  25. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (master)
  26. $ cat Test.txt
  27. 第一个文件!
  28. 修改的enen
  29. 第三次修改
  30. 第五次修改
  31. 第六次修改
  32. 远程更新
  33. 远程更新2
  34. TTTTTTTTTTTTTTTTTTTTTT
  35. PULL的修改
  36. PULL的修改2
此时实际操作的时候发现一个问题,它还会尝试往当前所在的分支合并。不知道为啥?
  1. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (next)
  2. $ git pull origin master:master
  3. remote: Counting objects: 3, done.
  4. remote: Compressing objects: 100% (2/2), done.
  5. remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
  6. Unpacking objects: 100% (3/3), done.
  7. From github.com:zhaoJoeyuan/RemoteForTest
  8. ee244d0..e4b44b4 master -> master
  9. ee244d0..e4b44b4 master -> origin/master
  10. Auto-merging Test.txt
  11. CONFLICT (content): Merge conflict in Test.txt
  12. Automatic merge failed; fix conflicts and then commit the result.
然后当前分支就处于merge状态并要求合并分支不知道为啥??????此处直接abort了。

  1. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (next|MERGING)
  2. $ git merge --abort
然后切换到master分支查看有没有成功。

  1. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (master)
  2. $ cat Test.txt
  3. 第一个文件!
  4. 修改的enen
  5. 第三次修改
  6. 第五次修改
  7. 第六次修改
  8. 远程更新
  9. 远程更新2
  10. TTTTTTTTTTTTTTTTTTTTTT
  11. PULL的修改
  12. PULL的修改2
  13. PULL的修改3
如果远程分支是与当前分支合并,则冒号后面的部分可以省略。后面是本地分支吗。

git pull origin next 。表示取回 origin/next 分支,再与当前分支合并。等同于先做git fetch,再做git merge。 
也就是 git fetch origin    it merge origin/next  注意此处是origin/next。
       到此为止我这边pull的都很顺利,同样是由于我是用git clone的,自动生成了跟踪分支,如果没有跟踪分支需要你提前
手动的设定跟踪分支。如果当前分支与远程分支存在追踪关系。
       git pull origin 就可以省略远程分支名。相当于把当前分之自动与它的upstream合并。
只有一个追踪分支的时候可省略主机名字   git pull  。
当我们进行pull的第二个行为merge时,对git来说如果我们没有指定upstream,git在merge时会访问git config中当前分支
如(master)merge的默认配置,我们可以通过配置下面的内容指定某个分支的默认merge操作
  1. Administrator@9GPBSPCCTFQXEUX MINGW64 /e/gits/RemoteForTest (master)
  2. $ cat .git/config
  3. [core]
  4. repositoryformatversion = 0
  5. filemode = false
  6. bare = false
  7. logallrefupdates = true
  8. symlinks = false
  9. ignorecase = true
  10. hideDotFiles = dotGitOnly
  11. [remote "origin"]
  12. url = git@github.com:zhaoJoeyuan/RemoteForTest.git
  13. fetch = +refs/heads/*:refs/remotes/origin/*
  14. [branch "joey/master"]
  15. remote = origin
  16. merge = refs/heads/joey/master
  17. [branch "master"]
  18. remote = origin
  19. merge = refs/heads/master
  20. [branch "next"]
  21. remote = origin
  22. merge = refs/heads/next
  23. [branch "newmaster"]
  24. remote = origin
  25. merge = refs/heads/master
[branch "master"]
remote = origin  //远程的版本库地址
merge = refs/heads/master    //一定要注意是refs/heads/master而不是refs/remotes/master
命令行的设置:git config branch.master.merge refs/heads/master。
这样当我们在master分支git pull时,如果没有指定upstream分支,git将根据我们的config文件去merge origin/develop;如
果指定了upstream分支,则会忽略config中的merge默认配置。
为什么merge = refs/heads/develop 而不是refs/remotes/develop? (我还是不太理解)
因为这里merge指代的是我们想要merge的远程分支,是remote上的refs/heads/develop,文中即是origin上的refs/heads/dev
elop,这和我们在本地直接执行git merge是不同(本地执行git merge origin/develop则直接merge refs/remotes/develop)。
注意有时候会有很多冲突的需要你手动解决
看网上说一般不要用git pull。

git入门-----远程操作相关命令(remote 、push、fetch 、pull)相关推荐

  1. git分支(branch)操作相关命令

    分支(branch)操作相关命令 查看本地分支:$ git branch 查看远程分支:$ git branch -r 创建本地分支:$ git branch [name] ----注意新分支创建后不 ...

  2. linux重命名tar命令,linux常用操作指令4 —— 文件操作相关命令(mkdir、touch、rm、mv、cp、cat 、 find 、tar、chmod)...

    文件操作相关命令 文件操作相关命令 1.创建文件夹mkdir 2.创建文件touch 3.移动文件夹mv(类似于剪切) 4.删除rm 5.重命名mv 6.复制cp 7.查看文件(cat.head.ta ...

  3. git 远程仓库相关命令

    1.远程仓库配置 -- 配置验证信息 ssh-keygen -t rsa -C "注册GitHub的邮箱"-- 如果出现生成路径乱码执行 chcp 65001 然后一路回车.最后根 ...

  4. git查看远程仓库地址命令:

    it查看远程仓库地址命令: $git remote -v

  5. Git提交远程代码时出现remote Incorrect username or password ( access token )

    在使用Git进行项目代码提交的最后一步操作的时候,出现了一个问题,remote: Incorrect username or password ( access token ) git出错截图: 造成 ...

  6. kvm linux重置密码,kvm虚拟机操作相关命令及虚拟机和镜像密码修改

    虚拟机生命周期管理 1)查看kvm虚拟机状态 #virsh list --all 2)KVM虚拟机开机 # virsh start oeltest01 3)KVM虚拟机关机或断电 关机 默认情况下vi ...

  7. git本地库(操作具体命令)

    在任何盘符下创建本地仓库repository(除git目录下) 在项目目录创建新的本地仓库,并把项目里的所有文件全部添加.提交到本地仓库中去: $ git init #在当前的目录下创建一个新的空的本 ...

  8. virsh命令 查看虚拟机镜像_kvm虚拟机操作相关命令及虚拟机和镜像密码修改

    虚拟机生命周期管理 1)查看kvm虚拟机状态 #virsh list --all 2)KVM虚拟机开机 # virsh start oeltest01 3)KVM虚拟机关机或断电 关机 默认情况下vi ...

  9. unix 命令 vi操作 相关命令总结

    学习unix命令 一.os的组成   计算机组成硬件和软件   软件分为系统软件和应用软件   系统软件就是操作系统   1.kernel 内核      1.管理硬件      2.管理内存(内存分 ...

  10. git删除远程分支报错:remote ref does not exist

    问题描述 在视图删除某个远程分支的时候显示: remote ref does not exist 操作流程 查看全部分支情况 删除远程分支报错 解决方案 解决方案是首先清除远程分支的本地缓存:git ...

最新文章

  1. 信道编码之差错控制方式
  2. 磁盘管理命令:du df
  3. python【蓝桥杯vip练习题库】ALGO-77 斜率计算
  4. 拖尾因子大怎么调整_乳房松弛下垂怎么改善?怎么快速调整乳房松弛下垂?
  5. 145. Binary Tree Postorder Traversal 二叉树的后序遍历
  6. 什么是Cortex、ARMv8、arm架构、ARM指令集、soc
  7. 使用React Native和Spring Boot构建一个移动应用
  8. 如何判断两个IP地址是不是处于同一网段?
  9. 国字号遥感算法大赛!涵盖主流视觉任务,头奖10万人民币!
  10. 43个实例xHTML+CSS(DIV+CSS)网页及导航布局教程
  11. 汉王考勤 连接mysql_汉王考勤管理软件打开时出现:连接数据错误, 请确认数据库服务器信息是否有误.这样该怎样解决?, 大师请进来...
  12. m3u8手机批量转码_M3U8批量转换app-M3U8批量转换MP4软件下载v1.0 安卓版-西西软件下载...
  13. android 修改cpu信息,从Android源码修改cpu信息
  14. 计算机公式max值怎么设置,Excel 计算最大值:MAX函数详解
  15. 色彩心理学在网站设计中的运用
  16. 国内直接下载google play谷歌商店apk安装包的网站【https://apkpure.com/】
  17. jsp text 水印_java实现图片上加文字水印(SpringMVC + Jsp)
  18. 博通wifi驱动详解
  19. 网易考拉海购:电商高并发架构设计的铁律
  20. 当下中国的十二种孤独

热门文章

  1. Adobe Premiere基础-介绍,配置,快捷键,创建项目,创建序列(一)
  2. 西部世界:生存(WestLand Survival) 游戏攻略
  3. CC2530——点对点通信
  4. STM32F407VG晶振与主频配置
  5. 树的最小表示法 UVA 12489 - Combating cancer
  6. Harvard (name and date) 论文引用格式
  7. php radio是什么意思,radio是什么意思_radio在线翻译_英语_读音_用法_例句_海词词典...
  8. SQLite用户权限
  9. 卓有成效的管理者(珍藏版) (德鲁克管理经典)
  10. 阿里巴巴校招内推简历筛选方案