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

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

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

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

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到自己本仓库的远端。


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

查看所有标签

猜你喜欢:

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

Spring Into HTML and CSS

Spring Into HTML and CSS

Molly E. Holzschlag / Addison-Wesley Professional / 2005-5-2 / USD 34.99

The fastest route to true HTML/CSS mastery! Need to build a web site? Or update one? Or just create some effective new web content? Maybe you just need to update your skills, do the job better. Welco......一起来看看 《Spring Into HTML and CSS》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具