美文网首页
Git 远程仓库及分支管理

Git 远程仓库及分支管理

作者: 宇宙小神特别萌 | 来源:发表于2019-10-15 15:29 被阅读0次
    Git 远程仓库及分支管理目录.png

    前提:已有远程仓库项目

    远程仓库信息:

    来源:github
    远程仓库(YOUR_FORK)地址: https://github.com/zhengjiaao/YOUR_FORK.git
    YOUR_FORK仓库已有分支: master、dev、pro

    电脑安装:git (可以百度"git 安装")

    1、下载远程仓库、切换分支、新增文件上传到远程分支

    流程:复制远程仓库地址-->git 克隆远程仓库项目到本地-->创建本地dev分支与远程dev分支关联并切换至本地dev分支-->修改dev分支的文件内容-->git add .:保存缓存中-->commit:提交到本地-->git push:上传到远程dev分支上

    下拉远程仓库到本地(默认master分支):

    Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub
    #下拉仓库到本地
    $ git clone https://github.com/zhengjiaao/YOUR_FORK.git
    

    进入YOUR_FORK项目-->打开git bash:

    Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (master)
    #创建本地dev分支与远程dev分支关联并切换至本地dev分支
    $ git checkout -b dev origin/dev
    Switched to a new branch 'dev'
    Branch 'dev' set up to track remote branch 'dev' from 'origin'.
    
    Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (dev)
    $
    
    

    新增文件-->推送到远程dev分支上

    添加一个文件测试:在项目根目录下添加 "这是dev新增文件.txt" 的文件,也可以是修改的文件内容。

    Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (dev)
    #把本地所有untrack(修改、新增)的文件都加入暂存区
    $ git add .
    
    Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (dev)
    #将暂存区内容保存到本地仓库 并注释
    $ git commit -m "dev:新增 这是dev新增文件.txtx 的文件"
    [dev 2a0c785] dev:新增 这是dev新增文件.txt 的文件
     1 file changed, 0 insertions(+), 0 deletions(-)
     create mode 100644 "\350\277\231\346\230\257dev\346\226\260\345\242\236\346\226\207\344\273\266.txt"
    
    Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (dev)
    #将刚刚保存到本地的内容 提交到远程仓库,这里提交的是远程仓库的dev分支上
    $ git push
    Enumerating objects: 3, done.
    Counting objects: 100% (3/3), done.
    Delta compression using up to 4 threads
    Compressing objects: 100% (2/2), done.
    Writing objects: 100% (2/2), 325 bytes | 65.00 KiB/s, done.
    Total 2 (delta 1), reused 0 (delta 0)
    remote: Resolving deltas: 100% (1/1), completed with 1 local object.
    To https://github.com/zhengjiaao/YOUR_FORK.git
       030464a..2a0c785  dev -> dev
    
    Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (dev)
    #查看提交日志
    $ git log
    commit 2a0c78535c80e1cafb325ad5d0de05b4d4b97ae0 (HEAD -> dev, origin/dev)
    Author: Zhengjiaao <1263598336@qq.com>
    Date:   Tue Oct 15 14:18:51 2019 +0800
        dev:新增 这是dev新增文件.txt 的文件
    #键盘在英文输入法下 按 Q 退出日志查看
    
    

    具体代码:方便查看

    #把本地所有untrack(修改、新增)的文件都加入暂存区
    $ git add .
    
    #将暂存区内容保存到本地仓库 并注释
    $ git commit -m "dev:新增 这是dev新增文件.txtx 的文件"
    
    #将刚刚保存到本地的内容 提交到远程仓库,这里提交的是远程仓库的dev分支上
    $ git push
    
    #查看提交日志
    $ git log
    
    #键盘在英文输入法下 按 Q 退出日志查看
    

    去github上查看:发现此时dev分支根目录下-->多了一个文件 “这是dev新增文件.txt”

    2、下载远程仓库、创建本地分支推送到远程仓库、删除分支

    流程:复制远程仓库地址-->git 克隆远程仓库项目到本地-->创建一个本地test分支-->推送到远程仓库里-->删除创建的test本地分支和远程分支

    下拉远程仓库到本地(默认master分支):

    Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub
    #下拉仓库到本地
    $ git clone https://github.com/zhengjiaao/YOUR_FORK.git
    

    进入YOUR_FORK项目-->打开git bash:

    Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (master)
    #查看所有分支,现在是在master分支上
    $ git branch -a
    * master
      remotes/origin/HEAD -> origin/master
      remotes/origin/dev
      remotes/origin/master
      remotes/origin/pro
    
    Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (master)
    #根据master分支 创建本地仓库test分支
    $ git branch test
    
    Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (master)
    #查看所有分支,可以看出,新增了一个本地分支test,但远程还没有test分支
    $ git branch -a
    * master
      test
      remotes/origin/HEAD -> origin/master
      remotes/origin/dev
      remotes/origin/master
      remotes/origin/pro
    
    Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (master)
    #切换至本地test分支
    $ git checkout test
    Switched to branch 'test'
    
    Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (test)
    #将本地test分支推送至github的远程仓库中
    $ git push origin test
    Total 0 (delta 0), reused 0 (delta 0)
    remote:
    remote: Create a pull request for 'test' on GitHub by visiting:
    remote:      https://github.com/zhengjiaao/YOUR_FORK/pull/new/test
    remote:
    To https://github.com/zhengjiaao/YOUR_FORK.git
     * [new branch]      test -> test
    
    Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (test)
    #查看所有分支,可以看出,远程仓库中新增了一个远程分支remotes/origin/test
    $ git branch -a
      master
    * test
      remotes/origin/HEAD -> origin/master
      remotes/origin/dev
      remotes/origin/master
      remotes/origin/pro
      remotes/origin/test
    
    Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (test)
    #切换至master分支
    $ git checkout master
    Switched to branch 'master'
    Your branch is up to date with 'origin/master'.
    
    Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (master)
    #删除本地test分支
    $ git branch -d test
    Deleted branch test (was 4d38ead).
    
    Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (master)
    #查看所有分支:发现已找不到本地的test分支
    $ git branch -a
    * master
      remotes/origin/HEAD -> origin/master
      remotes/origin/dev
      remotes/origin/master
      remotes/origin/pro
      remotes/origin/test
    
    Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (master)
    #删除github上的远程test分支
    $ git push origin :test
    To https://github.com/zhengjiaao/YOUR_FORK.git
     - [deleted]         test
    
    Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/YOUR_FORK (master)
    #查看所有分支:发现已找不到远程仓库中的test分支
    $ git branch -a
    * master
      remotes/origin/HEAD -> origin/master
      remotes/origin/dev
      remotes/origin/master
      remotes/origin/pro
    
    

    具体代码:方便查看

    #查看所有分支,现在是在master分支上
    $ git branch -a
    
    #根据master分支 创建本地仓库test分支
    $ git branch test
    
    #查看所有分支,可以看出,新增了一个本地分支test,但远程还没有test分支
    $ git branch -a
    
    #切换至本地test分支
    $ git checkout test
    
    #将本地test分支推送至github的远程仓库中
    $ git push origin test
    
    #查看所有分支,可以看出,远程仓库中新增了一个远程分支remotes/origin/test
    $ git branch -a
    
    #切换至master分支
    $ git checkout master
    
    #删除本地test分支
    $ git branch -d test
    
    #查看所有分支:发现已找不到本地的test分支
    $ git branch -a
    
    #删除github上的远程test分支
    $ git push origin :test
    
    #查看所有分支:发现已找不到远程仓库中的test分支
    $ git branch -a
    
    

    3、创建本地仓库->关联单个远程仓库->下拉远程仓库中的指定分支

    流程: 创建本地仓库-->关联远程仓库-->下拉远程仓库的指定分支-->修改文件内容-->git add .:保存缓存中-->commit:提交到本地-->git push:上传到远程分支上

    创建一个test_Pro文件夹,只下拉远程的pro分支,没有master、dev分支

    #创建一个文件夹,并进入文件夹
    Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/test_Pro
    #初始化git,会在文件夹中出现 .git文件
    $ git init
    Initialized empty Git repository in J:/IdeaTestProject/GitHub/test_Pro/.git/
    
    Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/test_Pro (master)
    #查看所有远程仓库
    $ git remote -v
    
    Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/test_Pro (master)
    #添加远程仓库地址
    $ git remote add origin https://github.com/zhengjiaao/YOUR_FORK.git
    
    Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/test_Pro (master)
    #查看所有远程仓库,可以看出已经添加了远程仓库地址
    $ git remote -v
    origin  https://github.com/zhengjiaao/YOUR_FORK.git (fetch)
    origin  https://github.com/zhengjiaao/YOUR_FORK.git (push)
    
    Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/test_Pro (master)
    #查案所有分支:发现没有任何分支,也没有远程的分支,但是远程仓库里是有分支的:pro、master、dev
    $ git branch -a
    
    Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/test_Pro (master)
    #下拉远程仓库pro分支信息:只是拉取分支信息,并没有拉取代码下来
    $ git fetch origin pro
    remote: Enumerating objects: 61, done.
    remote: Counting objects: 100% (61/61), done.
    remote: Compressing objects: 100% (45/45), done.
    remote: Total 61 (delta 25), reused 48 (delta 12), pack-reused 0
    Unpacking objects: 100% (61/61), done.
    From https://github.com/zhengjiaao/YOUR_FORK
     * branch            pro        -> FETCH_HEAD
     * [new branch]      pro        -> origin/pro
    
    Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/test_Pro (master)
    #查案所有分支:发现已有远程的pro分支
    $ git branch -a
      remotes/origin/pro
    
    Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/test_Pro (master)
    #创建本地pro分支和远程pro分支关联,并切换至本地pro分支上
    $ git checkout -b pro origin/pro
    Switched to a new branch 'pro'
    Branch 'pro' set up to track remote branch 'pro' from 'origin'.
    
    Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/test_Pro (pro)
    #查看所有分支:多了一个本地pro分支
    $ git branch -a
    * pro
      remotes/origin/pro
    
    #修改pro分支中的"your_fork-fork10.txt"文件内容-->提交到远程分支上
    Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/test_Pro (pro)
    $ git add .
    
    Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/test_Pro (pro)
    $ git commit -m "pro分支:修改了your_fork-fork10.txt 文件内容"
    [pro 263c33d] pro分支:修改了your_fork-fork10.txt 文件内容
     1 file changed, 1 insertion(+)
    
    Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/test_Pro (pro)
    $ git push
    Enumerating objects: 5, done.
    Counting objects: 100% (5/5), done.
    Delta compression using up to 4 threads
    Compressing objects: 100% (2/2), done.
    Writing objects: 100% (3/3), 324 bytes | 324.00 KiB/s, done.
    Total 3 (delta 1), reused 0 (delta 0)
    remote: Resolving deltas: 100% (1/1), completed with 1 local object.
    To https://github.com/zhengjiaao/YOUR_FORK.git
       68cfab5..263c33d  pro -> pro
    
    Administrator@ZhengJiaAo MINGW64 /j/IdeaTestProject/GitHub/test_Pro (pro)
    $
    
    

    4、创建本地仓库->关联多个远程仓库->与每个仓库的分支做关联

    这里举个例子:两个远程仓库的分支同步部分数据:

    仓库信息:A远程仓库和B远程仓库的分支,github:B仓库是从A仓库Fork出来的,且删除了B仓库的dev分支

    A远程仓库地址:https://github.com/zhengjiaao/YOUR_FORK.git
    A远程仓库所有分支:
    remotes/origin/dev
    remotes/origin/master
    remotes/origin/pro

    B远程仓库地址:https://github.com/zhengjiaao/YOUR_FORK_pro.git
    B远程仓库所有分支:
    remotes/origin/master
    remotes/origin/pro

    假如:A远程仓库的pro分支commit 10次,B远程仓库pro分支commit 5次

    要求:
    1、A远程仓库的pro分支commit 第2次提交的内容 同步到B远程仓库的pro分支中
    2、B远程仓库的pro分支第3次commit内容提交到 A远程仓库的pro分支中

    思路:创建本地仓库,且与多个远程仓库关联,再关联远程分支

    方式:创建一个本地仓库YOUR_FORK_AB_pro文件夹,git init初始化并分别关联'B远程仓库的pro分支和关联A远程仓库的pro分支',B_pro,A_pro

    #初始化your_fork_AB_pro本地仓库
    $ git init
    #关联多个远程仓库
    $ git remote add A https://github.com/zhengjiaao/YOUR_FORK.git
    $ git remote add B https://github.com/zhengjiaao/YOUR_FORK_pro.git
    
    #查看本地仓库关联的所有远程仓库地址
    $ git remote -v
    
    #更新远程仓库数据信息到本地仓库your_fork_AB_pro,不是将远程仓库代码下拉到本地
    $ git fetch A pro
    $ git fetch B pro
    
    #分别创建本地分支且关联的远程分支 A_pro 和 B_pro
    $ git checkout -b A_pro A/pro
    $ git checkout -b B_pro B/pro
    
    #查看所有分支
    $ git branch -a
      A_pro
    * B_pro
      remotes/A/dev
      remotes/A/master
      remotes/A/pro
      remotes/B/pro
    
    

    现在本地仓库有两个分支A_pro和B_pro,我们就可以对这两个分支进行操作,例如:合并操作-->合并某次的commit,合并某个文件或文件夹等

    例如:合并本地分支的某个文件或文件夹
    #合并本地分支的某个文件或文件夹
    
    #如:想要将分支B_pro下public文件下所有文件和view下index.html文件合并到分支A_pro
    #首先切换到A仓库的分支A_pro
    $ git checkout A_pro
    #合并B仓库的B_pro分支, 注意:因为public下可能有多层目录,所有不能使用public/*
    $ git checkout B_pro public/** view/index.html
    
    例如:合并某次的commit提交内容
    #合并某次的commit提交内容
    
    #例如:将A_pro分支某次commit提交的内容合并到B_pro
    #切换到A_pro分支 
    $ git checkout A_pro
    #查看A_pro分支 commit提交的日志
    $ git log
    commit 68cfab5b9c4b536b6d42117d476308685fbef7ad (HEAD -> A_pro, A/pro)
    Author: Zhengjiaao <1263598336@qq.com>
    Date:   Tue Oct 15 09:53:16 2019 +0800
        your_fork:新增fork10文件
    
    commit 3c03d1c376ccc8c58d1f232c5e0f57cdeba8df53
    Author: Zhengjiaao <1263598336@qq.com>
    Date:   Tue Oct 15 09:52:46 2019 +0800
        your_fork:新增fork9文件
        
    commit a1ad40b91d87e4ec30c869e404fabca56a7e47ea
    Author: Zhengjiaao <1263598336@qq.com>
    Date:   Tue Oct 15 09:52:23 2019 +0800
    
        your_fork:新增fork8文件
    
    #退出日志 英文状态下按Q
    
    #将A_pro分支 ‘新增fork9文件’这次commit提交的内容 合并到B_pro
    #切换到B_pro分支 
    $ git checkout B_pro
    #选择A_pro分支 ‘新增fork9文件’这次commit的id合并到B_pro分支上,当然不会把A_pro分支 ‘新增fork9文件’commit之前的,也就是‘新增fork8文件’这次commit所提交的文件包含在内,仅合并"新增fork9文件"的commit。
    $ git cherry-pick 3c03d1c376ccc8c58d1f232c5e0f57cdeba8df53
    
    

    B仓库的B_pro分支合并A仓库的A_pro分支某次commit的效果图:

    git合并分支效果.png

    相关文章

      网友评论

          本文标题:Git 远程仓库及分支管理

          本文链接:https://www.haomeiwen.com/subject/stysmctx.html