• git推送分支学习


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

    https://www.runoob.com/git/git-push.html

    1.push命令

    推送分支,就是把该分支上的所有本地提交(commit)推送到远程库。

    推送时,要指定本地分支,Git就会把该分支推送到远程库对应的远程分支上:

    git push <远程主机名> <本地分支名>:<远程分支名>
    //如果本地分支名与远程分支名相同,则可以省略:
    git push <远程主机名> <本地分支名>

    例如:

    git push origin master    //将本地的 master 分支推送到 origin 主机的 master 分支

    不同名:

    git push origin test:cz/test

    将本地的test分支推送到远程作为cz/test分支。

    可以通过git branch --set-upstream-to master origin/master 设置分支上游,进行本地与远程分支的关联,方便pull和push。

    2.尝试

    当push时,如果已经有了其他人先push了同样的文件,会有冲突,那么会有以下问题:

    % git push origin master
    To deMacBook-Pro-2.local:/Users/git/myproj/myproj.git
     ! [rejected]        master -> master (fetch first)
    error: 无法推送一些引用到 'deMacBook-Pro-2.local:/Users/git/myproj/myproj.git'
    提示:更新被拒绝,因为远程仓库包含您本地尚不存在的提交。这通常是因为另外
    提示:一个仓库已向该引用进行了推送。再次推送前,您可能需要先整合远程变更
    提示:(如 'git pull ...')。
    提示:详见 'git push --help' 中的 'Note about fast-forwards' 小节。

    那么需要首先pull一下, 

    myproj % git pull  
    提示:您有偏离的分支,需要指定如何调和它们。您可以在执行下一次
    提示:pull 操作之前执行下面一条命令来抑制本消息:
    提示:
    提示:  git config pull.rebase false  # 合并
    提示:  git config pull.rebase true   # 变基
    提示:  git config pull.ff only       # 仅快进
    提示:
    提示:您可以将 "git config" 替换为 "git config --global" 以便为所有仓库设置
    提示:缺省的配置项。您也可以在每次执行 pull 命令时添加 --rebase、--no-rebase,
    提示:或者 --ff-only 参数覆盖缺省设置。
    fatal: 需要指定如何调和偏离的分支。

    但仍然有上述问题,https://juejin.cn/post/7116098741857157157

    git pull 相当于 git fetch(拉取代码) + git merge/ git rebase (将提交应用到当前分支)。在拉取代码之后,执行git merge还是git rebase,要根据配置来定。

    myproj % git config pull.rebase false

    之后pull,

    myproj % git pull
    自动合并 a.txt
    冲突(内容):合并冲突于 a.txt
    自动合并失败,修正冲突然后提交修正的结果。
    bigo@192 myproj % cat a.txt 
    testA
    testB
    <<<<<<< HEAD
    0820 bg修改一下
    =======
    202208 在bg2的dev分支做修改:)
    
    20220820 在bg2的master分支上修改
    20220820 在bg2的feature1分支上修改:>
    >>>>>>> 9dbc9cf6

    <<<<<<< HEAD 和 ======= 之间的是本地的最新提交,======= 和9dbc9cf6是远程分支的提交。修改文件后,提交,

    myproj % cat a.txt
    testA
    testB
    0820 bg修改一下
    202208 在bg2的dev分支做修改:)
    
    20220820 在bg2的master分支上修改
    20220820 在bg2的feature1分支上修改:>
    
    20220823 在bg的master分支上合并冲突
    myproj % git add a.txt 
    myproj % git commit -m '处理a.txt冲突'
    myproj % git push

    3.rebase变基

    https://juejin.cn/post/7116098741857157157

    git rebase 可以把分支的提交放到另一个分支的最新提交的后面(最新)。

     C、D、E 依次对应本地dev分支上的提交“新增b.txt文件”、"新增b222"、"新增b333",F、G 依次对应远程dev分支上的提交"新增a444"、"新增a555"。

    git rebase origin/dev将dev分支上的提交放到了origin/dev分支上的提交的后面,C‘、D‘、E’和C、D、E提交包含相同的修改内容,但是它们是不同的提交。

     在dev分支执行git merge origin/dev会将origin/dev分支的代码合并到dev分支。并且会产生一个合并提交H,合并之后,dev分支就会包含A、B、C、D、E、F、G、H的提交内容。

     https://www.jianshu.com/p/6960811ac89c

    https://blog.csdn.net/nrsc272420199/article/details/85555911

    git checkout master
    git pull
    git checkout local
    git rebase -i HEAD~2  //合并提交 --- 2表示合并两个
    git rebase master---->解决冲突--->git rebase --continue
    git checkout master
    git merge local
    git push

    rebase -i HEAD~2真能合并两个提交?表示怀疑,好象不行,还是不会用rebase。。还是尽量每次只有一个commit吧。。。

    https://www.cnblogs.com/wangiqngpei557/p/6056624.html

    https://juejin.cn/post/6844903895160881166

    git pull rebase 基本上就是为了解决merge时多出一个无用的commit的问题,那样分支历史不好看。

    多人基于同一个远程分支开发的时候,如果想要顺利 push 又不自动生成 merge commit,建议在每次提交都按照如下顺序操作:

    # 把本地发生改动的文件贮藏一下
    $ git stash
    
    # 把远程最新的 commit 以变基的方式同步到本地
    $ git pull --rebase
    
    # 把本地的 commit 推送到远程
    $ git push
    
    # 把本地贮藏的文件弹出,继续修改
    $ git stash pop
  • 相关阅读:
    Conda 使用笔记
    个人日志笔记软件比较
    CMD 命令笔记
    Joplin 资源汇总
    【NAS】Hexo+Github 搭建博客&基础配置
    【NAS】群晖 WordPress 使用记录
    哈工大计组mooc 第四章 中 测试
    下列软件包有未满足的依赖关系:
    安装ubuntu用Ultraiso制作引导盘便捷启动提示:找到多余一个分区
    ros安装caffe anaconda2之后roscore无法执行
  • 原文地址:https://www.cnblogs.com/BlueBlueSea/p/16614672.html
Copyright © 2020-2023  润新知