• Git分支学习


    1.将本地和远程分支建立映射关系

    转自:https://lhajh.github.io/git/2017/01/20/git-local-branch-and-remote-branch-establish-mapping-relationship.html

    建立本地分支与远程分支的映射关系(或者为跟踪关系 track)。这样使用 git pull 或者 git push 时就不必每次都要指定从远程的哪个分支拉取合并和推送到远程的哪个分支了。

    % git branch -vv
    * dev    594e046 initial commit
      master 594e046 [origin/master] initial commit

    目前dev还没有和远程分支建立关系,先在拉取的裸仓库建立一下dev分支,

    myproj.git % git branch  dev 

     再在本地拉取一下,

    git_test % git pull
     * [new branch]      dev        -> origin/dev

    说明将远程的dev分支拉取后名字变为origin/dev,下面给dev建立映射关系,

    git_test % git branch -a    //查看所有分支,当前所在分支为dev
    * dev
      master
      remotes/origin/HEAD -> origin/master
      remotes/origin/dev
      remotes/origin/master
    
    //将当前分支dev映射到远程的dev分支,设置上游用于pull/push
    git_test % git branch --set-upstream-to origin/dev
    Branch 'dev' set up to track remote branch 'dev' from 'origin'.
    
    //已建立映射关系 git_test
    % git branch -vv * dev 594e046 [origin/dev] initial commit master 594e046 [origin/master] initial commit

     下面可取消映射关系,

    git_test % git branch --unset-upstream

    本地分支和远程分支可以不同名。比如本地的master也可以设置上游映射分支为dev,想怎么映射怎么映射。

    1.1 查看远程分支

    https://www.liaoxuefeng.com/wiki/896043488029600/900375748016320

    要查看远程库的信息,远程仓库的默认名称是origin

    git_test % git remote
    origin

     用git remote -v显示更详细的信息:

    git_test % git remote -v
    origin    git@deMacBook-Pro-2.local:/Users/git/myproj/myproj.git (fetch)
    origin    git@deMacBook-Pro-2.local:/Users/git/myproj/myproj.git (push)

    显示了可以抓取和推送的origin的地址。如果没有推送权限,就看不到push的地址。

    2.查看分支来自哪个分支

    //这个还不太懂。

    git_test % git switch dev
    Switched to branch 'dev'
    
    git_test % git reflog show dev   
    594e046 (HEAD -> dev, origin/master, origin/dev, origin/HEAD, master) dev@{0}: branch: Created from HEAD
    
    git_test % git reflog show master
    594e046 (HEAD -> dev, origin/master, origin/dev, origin/HEAD, master) master@{0}: clone: from MacBook-Pro-2.local:/Users/git/myproj/myproj.gi 

    括号内的都一样?第一项是指当前分支,其他都看不太懂。最后是来源,dev是从HEAD创建的,master是clone的远程仓储。

    3.在不同分支提交 

    git_test % git status
    On branch dev
    Changes to be committed:
      (use "git restore --staged <file>..." to unstage)
        modified:   a.txt

    在dev分支上修改文件,并且add commit,

    git_test % git commit -m 'branch dev'
    git_test % cat a.txt        
    testA
    testB
    202208 在bg2的dev分支做修改:)

    在dev分支上可查看内容如上,切换到master分支,

    git_test % git switch master
    git_test % cat a.txt
    testA
    testB

    是看不到刚才的提交的!可以在master分支下,将dev合并过来,其实就是将master指针dev,

    git_test % git merge dev
    Updating 594e046..8aca4e9
    Fast-forward
     a.txt | 1 +
     1 file changed, 1 insertion(+)

    具体原理参考https://www.liaoxuefeng.com/wiki/896043488029600/900003767775424

    新创建dev并且commit后,形势如下:

    合并之后如下,

     合并之后,可以删除dev分支,删除dev分支就是把dev指针给删掉。

    git branch -d 分支名
    git branch 你的分支名  SHA1值    //删除后恢复分支

    4.分支冲突

    https://www.liaoxuefeng.com/wiki/896043488029600/900004111093344

    git_test % git switch -c feature1    //修改a.txt
    git_test % git add a.txt 
    git_test % git commit -m 'feature1 a.txt'
    
    //在master分支做同样的事情,
    git_test % git switch master    //修改a.txt
    git_test % git add .
    git_test % git commit -m 'master a.txt'
    
    //在master合并feature1分支,有冲突
    git_test % git merge feature1
    Auto-merging a.txt
    CONFLICT (content): Merge conflict in a.txt
    Automatic merge failed; fix conflicts and then commit the result.
    //通过status命令也能看到冲突
    
    //查看a.txt内容
    git_test % cat a.txt 
    testA
    testB
    202208 在bg2的dev分支做修改:)
    <<<<<<< HEAD
    20220820 在bg2的master分支上修改
    =======
    20220820 在bg2的feature1分支上修改:>
    >>>>>>> feature1

    Git用<<<<<<<=======>>>>>>>标记出不同分支的内容,手动修改txt文件后,再次重新add,

    git_test % git add a.txt
    git_test % git commit -m "feature1 master conflict"
    
    git_test % git log --graph    //查看分支合并图
    *   commit 9dbc9cf689a4e7ab3f690186bd1be87677a1d5bb (HEAD -> master)
    |\  Merge: 4d1e39a 6a58ca6
    | | Author: bg <bg@123.com>
    | | Date:   Sat Aug 20 23:35:16 2022 +0800
    | | 
    | |     feature1 master conflict
    | | 
    | * commit 6a58ca69ee3b06d762a63e27aab74c641b6eabde
    | | Author: bg <bg@123.com>
    | | Date:   Sat Aug 20 23:30:38 2022 +0800
    | | 
    | |     feature1 a.txt
    | | 
    * | commit 4d1e39a456d8f54c86ee81f47dc139df32cf3e02
    |/  Author: bg <bg@123.com>
    |   Date:   Sat Aug 20 23:31:42 2022 +0800
    |   
    |       master a.txt
    | 

    可以看到有两次冲突提交了。合并之前,

     合并之后,

    然后在master分支上查看,

    testA
    testB
    202208 在bg2的dev分支做修改:)
    
    20220820 在bg2的master分支上修改
    20220820 在bg2的feature1分支上修改:>

    在feature1分支上查看,

    testA
    testB
    202208 在bg2的dev分支做修改:)
    20220820 在bg2的feature1分支上修改:> 

    master指向的是最新版本,feature1并不会自动更新。

  • 相关阅读:
    使用JDBC连接MySql时出现:The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration
    Mysql Lost connection to MySQL server at ‘reading initial communication packet', system error: 0
    mysql-基本命令
    C# 监听值的变化
    DataGrid样式
    C# 获取当前日期时间
    C# 中生成随机数
    递归和迭代
    PHP 时间转几分几秒
    PHP 根据整数ID,生成唯一字符串
  • 原文地址:https://www.cnblogs.com/BlueBlueSea/p/16608340.html
Copyright © 2020-2023  润新知