git场景操作学习教程(三)

栏目: 编程工具 · 发布时间: 4年前

内容简介:我们将这种情况分为两种:执行第二步的时候发现问题,而我们期望的提示应该是这样的:

我们将这种情况分为两种:

git update-ref -d HEAD
git reset commit_id
git revert -m 1 commit-id

2、场景二

2.1、预置条件

git branch -c feature/test
git push

2.2、问题

执行第二步的时候发现问题, feature/test 分支的 upstream 不是 origin/feature/test ,而是之前fork出来的分支 master ,这是为啥?怎么修复这个问题?而且在push的时候报下面的这个提示:

git场景操作学习教程(三)

而我们期望的提示应该是这样的:

fatal: The current branch feature/test1 has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream origin feature/test1
复制代码

2.3、原因

首先执行这个命令查看当前git的配置: git config --list

git场景操作学习教程(三)

关注红圈圈的两个配置,这俩配置就是导致问题的原因

查看当前分支的关联分支: git branch -vv

git场景操作学习教程(三)

可以看到新建的分支默认的关联分支错乱了。

2.4、解决以及原理

修改配置如下:

git config --global branch.autoSetupMerge true
git config --global push.default upstream
复制代码

即可恢复到之前的提示状态。那么接下来说一下这俩配置吧。

2.4.1、branch.autoSetupMerge

该属性决定了当执行 git branchgit checkout 的时候如何设置新分支以便执行 git pull 的时候可以恰当地和起始点分支进行合并。即使该选项没有设置,该行为也可以在每个分支上使用 --track--no-track 进行设置。该配置有以下几个可选值:false/true/always

false: 不会自动设置新分支
true: 当以一条远程分支为起始分支进行新建分支的时候,会自动设置新分支
always: 无论起始分支是本地的分支还是远程的分支,都会自动设置该新分支
复制代码

怎么解释这些配置呢?举个例子:

假设当前本地有master分支,远程有 master(origin/master) 分支和 feature/B(origin/feature/B) 分支:

1. 当设置为false的时候,无论新建的分支是否在远端存在,都不会设置该分支的track,也就是你查看分支的upstream的时候是这样的:

❯ git checkout feature/B
Switched to a new branch 'feature/B'

❯ git branch -vv
* feature/B 7255919 feat(B): 添加featureBB文件
  master    1ab9353 [origin/master] fixssssss
复制代码

从上图打印可以看出,虽然不会设置 feature/B ,但是确实是以 feature/B 这个远端分支进行fork的。

2. 当设置为true的时候,如果新建的分支在远端存在,那么自动设置该分支的upstream为远端分支,如果不存在,就不设置,如下:

❯ git checkout feature/B
Branch 'feature/B' set up to track remote branch 'feature/B' from 'origin'.
Switched to a new branch 'feature/B'

❯ git branch -vv
* feature/B 7255919 [origin/feature/B] feat(B): 添加featureBB文件
  master    1ab9353 [origin/master] fixssssss

❯ git checkout -b feature/A
Switched to a new branch 'feature/A'

❯ git branch -vv
* feature/A 7255919 feat(B): 添加featureBB文件
  feature/B 7255919 [origin/feature/B] feat(B): 添加featureBB文件
  master    1ab9353 [origin/master] fixssssss
复制代码

可以看到切换到新分支的时候,如果新分支在远端存在,那么会自动track该分支的upstream为远端分支。

但是如果切换到的新分支远端和本地都不存在,那么该新分支不会自动设置

3. 当设置为always的时候,如下:

❯ git checkout feature/B
Branch 'feature/B' set up to track remote branch 'feature/B' from 'origin'.
Switched to a new branch 'feature/B'

❯ git branch -vv
* feature/B 7255919 [origin/feature/B] feat(B): 添加featureBB文件
  master    1ab9353 [origin/master] fixssssss

❯ gc -b feature/A
Branch 'feature/A' set up to track local branch 'master'.
Switched to a new branch 'feature/A'

❯ git branch -vv
* feature/A 1ab9353 [master] fixssssss
  feature/B 7255919 [origin/feature/B] feat(B): 添加featureBB文件
  master    1ab9353 [origin/master] fixssssss

❯ git branch feature/B
Branch 'feature/B' set up to track local branch 'master'.

❯ git branch -c feature/X

❯ git branch -vv
  feature/B 1ab9353 [master] fixssssss
* feature/X 1ab9353 [origin/master] fixssssss
  master    1ab9353 [origin/master] fixssssss
复制代码

设置为always的时候,如果新分支在远端有的话,那么自动track,如果没有那就自动track到你当前所处的分支。所以大家可以看到feature/B和feature/A的upstream分别是远端的和本地的master。

另外使用 git branch 的时候,也会这样,因为等价于 git checkout -b 。这里有一个小小的知识点:

当使用git branch -c的时候,因为-c是copy的含义,所以feature/X是整个复制了master分支,于是连master的upstream都是复制过来的,所以这个时候feature/X的upstream是随master一样的,都是origin/master

最后,个人倾向的配置是 true ,这样提交代码的时候不会乱设置upstream。

2.4.2、push.default

该属性决定了 git push 操作的默认行为。 push.default 有以下几个可选值: nothing, current, upstream, simple, matching

nothing: 直接push会出错,需要显式的指出推送的远程分支,例如:git push origin <remote_branch>;
current: 推送时只会推送当前所在的分支到远程同名分支,如果远程分支不存在相应的同名分支,则创建该分支;
upstream: 推送当前分支到它的upstream分支上,这个模式只适用于推送到与拉取数据相同的仓库(比如central workflow);
simple(默认): simple和upstream是相似的,只有一点不同,simple必须保证本地分支和它的远程 upstream分支同名,否则会拒绝push操作。
matching:推送本地和远程都存在的同名分支。
复制代码

这个个人倾向的配置是 upstream ,这样push的时候都是push到自己本仓库的远端。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

计算机程序设计艺术(第2卷)

计算机程序设计艺术(第2卷)

Donald E. Knuth / 苏运霖 / 国防工业出版社 / 2002-8 / 98.00元

本书是国内外业界广泛关注的7卷本《计算机程序设计艺术》第2卷的最新版。本卷对半数值算法领域做了全面介绍,分“随机数”和“算术”两章。本卷总结了主要算法范例及这些算法的基本理论,广泛剖析了计算机程序设计与数值分析间的相互联系,其中特别值得注意的是作者对随机数生成程序的重新处理和对形式幂级数计算的讨论。 本书附有大量习题和答案,标明了难易程度及数学概念的使用。 本书内容精辟,语言流畅,引人入胜,可供从......一起来看看 《计算机程序设计艺术(第2卷)》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具