【git使用三】git工作机制与命令用法

目录

git工作机制和相关概念

四个重要区域

分支的概念

上传代码到远程分支的基本流程

克隆代码

仓库同步

开发者如何提交代码到远程仓库分支

1.初始化本地仓库

2.关联本地仓库和远程仓库

创建关联

查看关联情况

如何解除关联

3.推送代码到远程仓库

3.1先下拉远程分支代码合并到本地分支

(1)使用"git branch -a"查看所有分支和当前所在分支

(2)使用"git fetch"拉取远程仓库所有分支来更新本地仓库

3.2在指定本地分支上工作

(1)使用"git branch -a"查看当前所在分支

(2)使用"git checkout"切换到要工作的本地仓库分支

(3)进行开发

3.3 提交代码到远程分支

(1)使用"git status"命令查看当前目录下所有文件的变化状态

(2)使用"git add ."命令提交文件到缓存区

(3)使用git commit命令从缓存区到本地仓库分支

(4)使用"git push"命令从本地仓库到远程仓库上面

Git如何提交本地代码到远程分支

git代码分支合并(pull->merge->push)

第一种:合并全部分支到master

第二种:合并指定分支到master

第三种:合并master到指定分支

开发者如何查看全部提交历史

开发者如何克隆仓库:git clone

开发者如何进行git版本回退:git reset

第一种:回退到当前版本(放弃所有修改)

第二种:放弃某一个文件的修改

第三种:回退到某一版本但保存自该版本起的修改

第四种:回退到某一版本并且放弃自该版本起的所有修改

第五种:回退远程仓库的版本

第六种:如何以当前版本为基础,回退指定个commit

第七种:如何回退到和远程版本一样

git错误记录

git pull因unrelated histories失败

git中出现”the requested upstream branch ‘origin/master‘ does not exist“问题的解决


git工作机制和相关概念

四个重要区域

  1. 工作区:工作项目所在目录,就是写开发者写代码的地方,比如可以是"D:/projects/test"。
  2. 缓存区:在".git"文件夹下的某个位置,".git"文件夹后面会讲怎么创建,通常是创建在工作区下,比如工作区为"D:/projects/test",则".git"目录创建在"D:/projects/test/.git"。缓存区在".git"目录下具体哪个位置你不需要关心,只需要知道有这个区域就好,后面会讲这个区域扮演的角色。
  3. 本地仓库:在".git"目录下的某个位置,有的也称呼为"版本库","仓库区"。本地仓库在".git"目录下具体哪个位置你不需要关心,只需要知道有这个区域就好,后面会讲这个区域扮演的角色。
  4. 远程仓库:gitee上的仓库

分支的概念

是基于仓库而言的。通常创建好一个仓库后,默认自带master这个分支,我们还可以创建多个分支。通常工作模式都是创建多个分支,不同分支对项目进行不同的新开发或者修改,测试通过以后,然后合并到master分支。

不同的分支就是在进行不同的代码版本管理,每个分支有一个自己的代码版本,master分支也有一个代码版本,通常项目运行的代码版本以master为准。分支代码合并到master的意思就是将master这个分支的代码版本更新到分支最新版本。

通常远程仓库有多个分支,往往取决于开发任务如何划分,开发者的本地仓库通常也可以存在多个分支,取决开发需求,本地分支和远程分支之间需要建立"追踪"关系,如何创建后面会讲,在本地分支将代码等开发完成后,就可以提交到具有关联关系的远程分支。

当存在多个开发者时,每个开发者有一个本地仓库,如果多个开发者需要提交代码到同一个远程分支,往往不建议直接提交,而是先下拉远程分支的代码合并到本地分支,然后进行代码开发,开发完成后再进行提交。

分支深度掌握可以参考:【git使用四】git分支理解与操作(详解)-CSDN博客

上传代码到远程分支的基本流程

当自己的项目代码有所更新时,需要上传代码等文件到远程仓库的某个分支,流程大致是:本地工作目录 -> 缓存区 -> 本地仓库某个分支 -> 对应的远程仓库某个分支。如何一步步传递后面会讲。通常本地仓库的各个分支与远程仓库的各个分支需要建立"追踪"关系,才能进行上传,如何建立"追踪"关系后面会讲。

克隆代码

克隆代码就是下载代码的意思,当别人上传了新的代码或其它文件到远程仓库某个分支时,自己需要下载下来查看,或者自己在另一台主机上,想查看仓库的项目代码,就可以从gitee上的仓库直接下载代码到本地某个目录了,这个动作叫clone,具体怎么操作后面会讲。

仓库同步

有两种情况:

  • 一是用远程仓库更新本地仓库,比如对于远程仓库,有其他的开发者上传了新的文件,远程仓库是新的一个版本,但自己电脑的本地仓库还是上一个版本,因此需要用远程仓库更新本地仓库。
  • 二是用本地仓库更新远程仓库,比如本地项目目录的代码有所变化后,上传到缓存区,再到本地仓库,此时本地仓库更新了,但是远程仓库还是上一个版本,因此需要用本地仓库更新远程仓库。

开发者如何提交代码到远程仓库分支

1.初始化本地仓库

同步远程仓库之前,需要在本地工作区初始化创建一个本地仓库,进而与Gitee上的仓库建立联系。比如我们这里的工作目录是"D:/projects/test"文件夹,在命令行进行如下操作。

cd /d D:/projects/test
git init

我们在初始化项目时,在工作区目录运行此命令,会在更目录生成一个.git文件夹。表示这个项目已经被git接管。如果不想被git接管,直接删除.git文件夹即可。那样这个项目就和git没一点关系了。缓存区和本地仓库等都在.git目录下,具体在.git目录下的哪个位置,可以不用过多关心。

2.关联本地仓库和远程仓库

创建关联

将本地仓库与Gitee的仓库关联起来,在你的工作目录处("D:/projects/test")右键打开git bash,输入"git remote add 给远程仓库取的名字 远程SSH仓库地址",比如这里给远程仓库取名为origin,可以用"git remote add origin 远程SSH仓库地址"

Administrator@hutao MINGW64 /d/projects/test (master)
$ git remote add origin git@gitee.com:hhtaotao/zhuiguang.git

查看关联情况

使用git remote -v 查看是否关联(每一行两项信息,左边是远程仓库的名字,右边是远程仓库的SSH地址)

Administrator@hutao MINGW64 /d/projects/test (master)
$ git remote -v
origin  git@gitee.com:hhtaotao/zhuiguang.git (fetch)
origin  git@gitee.com:hhtaotao/zhuiguang.git (push)

如何解除关联

git remote rm 之前给仓库取的名字。比如

Administrator@hutao MINGW64 /d/projects/test (master)
$ git remote rm originAdministrator@hutao MINGW64 /d/projects/test (master)
$ git remote -vAdministrator@hutao MINGW64 /d/projects/test (master)
$

3.推送代码到远程仓库

3.1先下拉远程分支代码合并到本地分支

(1)使用"git branch -a"查看所有分支和当前所在分支

"git branch -a"命令,可以看到本地仓库和远程仓库的所有分支,并且知道当前工作所在的本地分支是哪个。

Administrator@hutao MINGW64 /d/projects/test (master)
$ git branch -aAdministrator@hutao MINGW64 /d/projects/test (master)
$

从上面结果显示来看,是空的,这是因为还没有拉取远程仓库所有分支来更新本地仓库。

(2)使用"git fetch"拉取远程仓库所有分支来更新本地仓库

"git branch -a"命令不仅会显示本地仓库的所有分支,而且还会显示远程仓库的所有分支,但是从刚才的结果中,并没有看到所有远程分支,需要使用"git fetch"拉取远程仓库所有分支来更新本地仓库,这样就会知道有哪些远程分支,并且在本地仓库建立同名分支与之关联。

Administrator@hutao MINGW64 /d/projects/test (master)
$ git fetch
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 4 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (4/4), 1.80 KiB | 131.00 KiB/s, done.
From gitee.com:hhtaotao/zhuiguang* [new branch]      master     -> origin/masterAdministrator@hutao MINGW64 /d/projects/test (master)
$ git branch -aremotes/origin/masterAdministrator@hutao MINGW64 /d/projects/test (master)
$

从git fetch的结果来看,识别到了远程仓库的分支origin/master,并且自动建立了同名的本地分支与之关联。

但是进一步从git branch -a的结果来看,并没有显示本地分支名称,但是本地仓库确实是有master这个分支的,这个是显示bug,需要切换切换一下分支再查看就出来了。切换分支的命令是"git checkout 分支名称"。从下面的结果可以看到本地分支名称为master,远程仓库分支名称为remotes/origin/master,其中origin为我们刚才关联远程仓库为远程仓库取的名字。

Administrator@hutao MINGW64 /d/projects/test (master)
$ git branch -aremotes/origin/masterAdministrator@hutao MINGW64 /d/projects/test (master)
$ git checkout master
Already on 'master'
branch 'master' set up to track 'origin/master'.Administrator@hutao MINGW64 /d/projects/test (master)
$ git branch -a
* masterremotes/origin/masterAdministrator@hutao MINGW64 /d/projects/test (master)
$

使用"git fetch"后,将会把远程仓库里的代码更新到本地仓库,切换分支后,本地工作目录里的文件将为该分支的代码版本。

另外也可以只拉取指定远程仓库分支来更新本地分支

先git checkout 分支名,然后git pull

3.2在指定本地分支上工作

(1)使用"git branch -a"查看当前所在分支
D:\projects\test>git branch -a
* bran_testdeal_datamasterremotes/origin/bran_testremotes/origin/deal_dataremotes/origin/masterD:\projects\test>

从结果可以看到,当前工作所在的本地分支是bran_test,但是我们现在想在deal_data这个分支上进行开发,因此需要切换分支。

(2)使用"git checkout"切换到要工作的本地仓库分支

假设我们要工作的分支名称是deal_data,使用如下命令切换分支

# 切换分支
git checkout deal_data# 如果本地仓库没有该分支,则需要创建再切换,该命令的作用是创建并切换本地分支
git checkout -b deal_data

示例结果

D:\projects\test>git checkout deal_data
Switched to branch 'deal_data'
Your branch is up to date with 'origin/deal_data'.D:\projects\test>

注意切换分支后工作区的内容会自动变为相应分支的文件内容。比如我这里处于bran_test分支时,工作区的文件是这样的

切换到deal_data分支后,工作区的文件就变成了deal_data分支对应的文件内容

(3)进行开发

切换到deal_data分支后,工作区的文件就变成了deal_data分支对应的文件内容

我们修改main.cpp这个文件内容,然后删除readme.md,然后新建一个data.txt文件

3.3 提交代码到远程分支

(1)使用"git status"命令查看当前目录下所有文件的变化状态

查看在你上次提交之后是否有对文件进行再次修改等信息

D:\projects\test>git branch -abran_test
* deal_datamasterremotes/origin/bran_testremotes/origin/deal_dataremotes/origin/masterD:\projects\test>git status
On branch deal_data
Your branch is up to date with 'origin/deal_data'.Changes not staged for commit:(use "git add/rm <file>..." to update what will be committed)(use "git restore <file>..." to discard changes in working directory)modified:   main.cppdeleted:    readme.mdUntracked files:(use "git add <file>..." to include in what will be committed)data.txtno changes added to commit (use "git add" and/or "git commit -a")D:\projects\test>

从上面结果可以看到我们刚才所做的全部操作

(2)使用"git add ."命令提交文件到缓存区
  • "git add ." 这里的点是将所有文件进行提交
  • "git add main.cpp" 只将main.cpp这个文件进行提交
D:\projects\test>git add .D:\projects\test>
(3)使用git commit命令从缓存区到本地仓库分支

-m 参数用来说明自己为什么要上传,一般显示版本更新信息,方便以后自己查阅

D:\projects\test>git commit -m "版本v1.0.3 删除readme.md 修改main.cpp 新增data.txt"
[deal_data dc173a9] 版本v1.0.3 删除readme.md 修改main.cpp 新增data.txt3 files changed, 2 insertions(+)create mode 100644 data.txtdelete mode 100644 readme.mdD:\projects\test>

每次提交都对应一个commitID,像上面结果这里就是dc173a9,也可以通过"git log"查看提交历史,来查看对应的commitID。

(4)使用"git push"命令从本地仓库到远程仓库上面

git push语法格式:git push [远程库名] [本地分支名]  [远程分支名]

  • 省略远程分支名时,比如"git push 远程库名 本地分支名",默认向具有关联关系的远程分支提交
  • 省略远程分支名和本地分支名时,比如"git push 远程库名",默认将当前所在分支向具有关联关系的远程分支提交
  • 省略远程库名、远程分支名和本地分支名时,比如"git push",默认将当前所在分支向具有唯一关联关系的远程分支提交,如果当前分支与多个远程仓库的分支具有关联关系,则使用"git push"会被拒绝

现在我们位于本地仓库的deal_data这个分支上(可以使用git branch -a查看所在分支,使用"git checkout 分支名称"切换分支)

如果是第一次从本地仓库的deal_data这个分支提交到远程仓库的deal_data分支,用以下命令,其中参数-u的作用是用来设置本地分支与远程分支之间的关联关系,如果已经设置过可以不用加 -u 这个参数

# 首次提交
git push -u origin deal_data# 非首次提交,不在需要加  -u
git push origin deal_data# 强制提交:强制提交可能会把之前的commit注释信息,不会改变修改的代码,慎用)。都是提交到master分支
git push -f deal_data

示例

D:\projects\test>git push -u origin deal_data
Enumerating objects: 6, done.
Counting objects: 100% (6/6), done.
Delta compression using up to 16 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 375 bytes | 375.00 KiB/s, done.
Total 4 (delta 0), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-6.4]
To gitee.com:hutao_gitee/zhongtian.git02b8e6b..dc173a9  deal_data -> deal_data
branch 'deal_data' set up to track 'origin/deal_data'.D:\projects\test>

提交后上gitee上查看仓库对应分支的变化,可以看到已经更新为最新版本

Git如何提交本地代码到远程分支

假设正在使用 Git 管理一个名为 "my_project" 的项目,假设要修改feature_branch这个分支的代码,并且提交到远程分支。操作流程一般如下:

先拉取远程分支来更新本地分支,因为可能你的本地仓库该分支所指向的提交版本可能不是最新的版本,要保证自己是在最新版本基础上进行修改

git checkout feature_branch
git pull

然后修改后的代码如果通过了测试,想提交到名为 "feature_branch" 的远程分支。可以按照以下步骤提交修改后的代码: 

1. 首先,使用  git branch  命令检查当前所在的分支。如果不在 "feature_branch" 分支上,可以使用  git checkout feature_branch  命令切换到该分支。 

2. 然后,使用  git add <file_name>  命令将修改后的文件添加到暂存区。例如,如果修改了 "main.py" 文件,可以使用  git add main.py  命令将其添加到暂存区。 如果想添加所有修改的文件,可以使用  git add .  命令。 

3. 接下来,使用  git commit -m "commit message"  命令提交修改并添加提交信息,将提交到本地仓库分支。例如,可以使用  git commit -m "Update main.py"  命令提交修改,并在提交信息中描述所做的更改。 

4. 最后,使用  git push origin feature_branch  命令将修改后的代码推送到名为 "feature_branch" 的远程分支。这将把的本地分支与远程分支同步。如果是第一次推送到该分支,需要使用  git push -u origin feature_branch  命令来设置 "feature_branch" 分支的跟踪关系。

git代码分支合并(pull->merge->push)

第一种:合并全部分支到master

Git 合并分支到 master 分支的步骤如下:

  1. 首先使用"git branch"命令查看本地和远程所有分支名称
  2. 然后将所有分支代码和master拉取到本地:
    1. 切换到 master 分支:git checkout master
    2. 拉取远程 master 分支最新版本:git pull origin master
    3. 使用分支代码:先git checkout 分支,然后git pull
    4. 重复将所有分支代码拉取完毕
  3. 合并所有分支到master
    1. 切换到需要合并的分支:git checkout master
    2. 将需要合并的分支合并到当前分支即 master :git merge 分支名称
    3. 重复将所有分支代码合并完毕
  4. 提交合并:
    1. git push origin master

如果在合并分支过程中出现冲突,需要手动解决冲突并重新提交。

第二种:合并指定分支到master

开发分支(dev)上的代码达到上线标准后,合并到 master 分支

git checkout dev
git pull
git checkout master
git pull
# merge  --no-ff参数,表示禁用Fast forward;
# 可以保存之前的分支历史。能够更好的查看merge历史,以及branch状态.
# 保证版本提交、分支结构清晰
git merge --no-ff  dev
git push -u origin master

当master 分支为保护分支时,执行git push -u origin master会提示远程服务器拒绝,此时需要在浏览器登录远程仓库地址进行远程仓库merge操作。

第三种:合并master到指定分支

当master代码改动,需要更新开发分支(dev)上的代码

git checkout master 
git pull 
git checkout dev
# merge  --no-ff参数,表示禁用Fast forward;
# 可以保存之前的分支历史。能够更好的查看merge历史,以及branch状态.
# 保证版本提交、分支结构清晰
git merge --no-ff  master
git push -u origin dev

开发者如何查看全部提交历史

  • 第一种:使用"git log"命令
  • 第二种:gitk --all  执行gitk --all命令会弹出一个图形化界面,显示详细的提交信息

示例

D:\projects\test>git log
commit 34c3529e4787ecbd4383607dc499d261f75248de (HEAD -> master, origin/master)
Author: hutao <676178795@qq.com>
Date:   Fri Sep 22 16:24:38 2023 +0800第二次提交,添加了readme文档commit b043a19032795d00e506e3c85f6d6bcc5105e3c5
Author: hutao <676178795@qq.com>
Date:   Fri Sep 22 16:15:31 2023 +0800第一次提交D:\projects\test>

开发者如何克隆仓库:git clone

克隆仓库的含义:下载仓库某个分支全部内容到本地某个目录下,不建议下载到git所在的工作区。

比如要下载自己或别人的仓库到本地工作区。语法格式

# 将远程仓库的branch_name的内容全部下载到当前所在目录
git clone -b branch_name repository_url# 不指定参数-b branch_name时默认是从master克隆到本地当前所在目录
git clone url

举个例子,下载远程仓库master分支下的所有内容到"D:\test"目录下。在当前目录("D:\test")中右击打开git bush,输入git clone 远程SSH仓库地址(同上),这样就能将Gitee上的仓库里的所有东西下载到该当前目录下以仓库名命名的一个文件夹里。

D:\projects\test>cd /d D:\testD:\test>git clone git@gitee.com:hutao_gitee/zhongtian.git
Cloning into 'zhongtian'...
remote: Enumerating objects: 34, done.
remote: Counting objects: 100% (34/34), done.
remote: Compressing objects: 100% (22/22), done.
Receiving objects: 100% (34/34), done.delta 0), pack-reused 0Receiving objects:   2% (1/34)Resolving deltas: 100% (3/3), done.D:\test>

然后就可以看到"D:\test"下多了个文件夹zhuiguang,其中zhuiguang为远程仓库的名字

开发者如何进行git版本回退:git reset

官网参考链接:如何进行版本回退 | Gitee 产品文档

第一种:回退到当前版本(放弃所有修改)

场景描述:我们在本地工作目录下进行了一些文件的操作,添加到了缓存区(必须要有这步),下一步就是提交到了本地仓库的某个分支,然后提交到远程仓库某个分支进行更新,但是突然不想提交到本地仓库了,同时也要放弃对文件的操作,即让工作目录回到原来的状态,可以使用"git reset --hard"命令。

比如我这里工作目录为"D:\gitspace",目前处于deal_data这个开发分支上,内容如下

我先修改了main.cpp文件,然后创建了data.txt

然后使用命令撤销这些操作

D:\gitspace>git status
On branch deal_data
Your branch is up to date with 'origin/deal_data'.Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git restore <file>..." to discard changes in working directory)modified:   main.cppUntracked files:(use "git add <file>..." to include in what will be committed)data.txtno changes added to commit (use "git add" and/or "git commit -a")D:\gitspace>git add .D:\gitspace>git reset --hard
HEAD is now at c1128a7 首次测试提交D:\gitspace>

再次查看"D:\gitspace",可以看到恢复到原来的状态了

第二种:放弃某一个文件的修改

场景:我们对工作目录下的main.cpp做了大量的修改,但是突然不想要这些修改,手动还原是很麻烦的,可能还无法还原。

放弃对指定文件的修改:git checkout 文件名

操作如下:

先对main.cpp进行一些修改

然后

D:\gitspace>git status
On branch deal_data
Your branch is up to date with 'origin/deal_data'.Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git restore <file>..." to discard changes in working directory)modified:   main.cppno changes added to commit (use "git add" and/or "git commit -a")D:\gitspace>git checkout main.cpp
Updated 1 path from the indexD:\gitspace>git status
On branch deal_data
Your branch is up to date with 'origin/deal_data'.nothing to commit, working tree cleanD:\gitspace>

然后此时再次查看main.cpp内容,可以发现已经是原来的内容了

第三种:回退到某一版本但保存自该版本起的修改

使用"git reset 版本号",版本号也被称做commitID,如下面"commit c1128a7e1ca4a5bc382aafa0c1231cfab04a6b23"中的c1128a7e1ca4a5bc382aafa0c1231cfab04a6b23就是commitID

D:\gitspace>git status
On branch deal_data
Your branch is up to date with 'origin/deal_data'.nothing to commit, working tree cleanD:\gitspace>git log
commit c1128a7e1ca4a5bc382aafa0c1231cfab04a6b23 (HEAD -> deal_data, origin/deal_data)
Author: hutao <676178795@qq.com>
Date:   Sat Sep 23 16:16:09 2023 +0800首次测试提交commit ae6376e636bac09180f1d21d6646f75175b7bf40
Author: hutao <676178795@qq.com>
Date:   Sat Sep 23 15:06:26 2023 +0800xxxx
D:\gitspace>git reset ae6376e636bac09180f1d21d6646f75175b7bf40
Unstaged changes after reset:
D       README.md
M       main.cpp
D       test.txt
D       yyyy.txtD:\gitspace>git status
On branch deal_data
Your branch is behind 'origin/deal_data' by 1 commit, and can be fast-forwarded.(use "git pull" to update your local branch)Changes not staged for commit:(use "git add/rm <file>..." to update what will be committed)(use "git restore <file>..." to discard changes in working directory)deleted:    README.mdmodified:   main.cppdeleted:    test.txtdeleted:    yyyy.txtno changes added to commit (use "git add" and/or "git commit -a")D:\gitspace>

从上面最后的git status的结果来看,其显示了所有版本的修改。

如果此时不想回退版本了,这里可以使用git add、git commit使得本地仓库分支变为之前的最新版本。

D:\gitspace>git status
On branch deal_data
Your branch is behind 'origin/deal_data' by 1 commit, and can be fast-forwarded.(use "git pull" to update your local branch)Changes not staged for commit:(use "git add/rm <file>..." to update what will be committed)(use "git restore <file>..." to discard changes in working directory)deleted:    README.mddeleted:    test.txtdeleted:    yyyy.txtno changes added to commit (use "git add" and/or "git commit -a")D:\gitspace>git add .D:\gitspace>git commit -m "撤销回退"
[deal_data a4ddafc] 撤销回退3 files changed, 4 deletions(-)delete mode 100644 README.mddelete mode 100644 test.txtdelete mode 100644 yyyy.txtD:\gitspace>git status
On branch deal_data
Your branch and 'origin/deal_data' have diverged,
and have 1 and 1 different commits each, respectively.(use "git pull" to merge the remote branch into yours)nothing to commit, working tree cleanD:\gitspace>git checkout deal_data
Already on 'deal_data'
Your branch and 'origin/deal_data' have diverged,
and have 1 and 1 different commits each, respectively.(use "git pull" to merge the remote branch into yours)D:\gitspace>git log
commit a4ddafcd5a7aac84e2ffece17f6c795618bcba13 (HEAD -> deal_data)
Author: hutao <676178795@qq.com>
Date:   Sat Sep 23 17:40:19 2023 +0800撤销回退commit ae6376e636bac09180f1d21d6646f75175b7bf40
Author: hutao <676178795@qq.com>
Date:   Sat Sep 23 15:06:26 2023 +0800xxxx

第四种:回退到某一版本并且放弃自该版本起的所有修改

和第三种类似,只是回退时使用"git reset --hard 版本号"

第五种:回退远程仓库的版本

先在本地切换到远程仓库要回退的分支对应的本地分支,然后本地回退至你需要的版本,然后执行如下命令:

git push <仓库名> <分支名> -f 

必须要加参数-f 进行强制更新,不然会因为本地版本比远程版本落后的原因而被拒绝。

这些操作的本质就是先将本地仓库回到某个旧版本,然后用旧版本更新远程仓库。

第六种:如何以当前版本为基础,回退指定个commit

首先,确认你当前的版本需要回退多少个版本,然后计算出你要回退的版本数量,执行如下命令

git reset HEAD~X //X代表你要回退的版本数量,是数字!!!!

需要注意的是,如果你是合并过分支,那么被合并分支带过来的commit并不会被计入回退数量中,而是只计算一个,所以如果需要一次回退多个commit,不建议使用这种方法

第七种:如何回退到和远程版本一样

有时候,本地项目开发过程中发生错误修改需要放弃全部修改时,可以以远程分支作为回退点,将本地仓库退回到与远程分支一样,执行的命令如下

git reset --hard origin/master // origin代表你远程仓库的名字,master代表分支名

git错误记录

在当前分支下删除该分支报错

使用 Git 操作 版本库 , 删除分支时 , 报如下错误 :

D:\Git\git-learning-course>git branch -d dev
error: Cannot delete branch 'dev' checked out at 'D:/Git/git-learning-course'

原因:当前的分支是 dev,如果要删除 dev 分支 , 不能在 dev 分支下删除分支本身

解决方案: 需要切换到 master 分支上 , 然后再删除 dev 分支 

git checkout master
git branch -d dev

git pull因unrelated histories失败

错误提示:

git pull
fatal: refusing to merge unrelated histories

可能原因:

  • 1.有一个包含一些提交的新 Git 存储库。然后,您尝试从现有的远程仓库中提取。合并变得不兼容,因为分支和远程拉取的历史不同。当你试图合并两个完全不相关的分支时,Git 看到了这种情况,它不知道该怎么做。
  • 2.目录有问题.git。它可能在某些时候被意外删除或损坏。如果您克隆或清理了项目,则可能会发生这种情况。此处发生错误是因为 Git 没有有关本地项目历史的必要信息。
  • 3.当您尝试从远程仓库推送或拉取数据时,分支位于不同的HEAD位置,并且由于缺乏共性而无法匹配。

我出现的问题是,远程的代码没有先clone到本地,所以不兼容。

解决办法:

在git pull和git push命令中添加–allow-unrelated-histories

让git允许提交不关联的历史代码。

git pull origin master --allow-unrelated-histories
git push origin master --allow-unrelated-histories

git中出现”the requested upstream branch ‘origin/master‘ does not exist“问题的解决

报错提示:

D:\gitspace>git branch --set-upstream-to=origin/deal_data deal_data
fatal: the requested upstream branch 'origin/deal_data' does not exist

解决办法:

git pull origin master --allow-unrelated-histories

end

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/28616.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PyTorch计算机视觉入门:测试模型与评估,对单帧图片进行推理

在完成模型的训练之后&#xff0c;对模型进行测试与评估是至关重要的一步&#xff0c;它能帮助我们理解模型在未知数据上的泛化能力。本篇指南将带您了解如何使用PyTorch进行模型测试&#xff0c;并对测试结果进行分析。我们将基于之前训练好的模型&#xff0c;演示如何加载数据…

解决老毛子路由器自带微信提示功能无法触发问题

新买了一个二手的RM AC2100&#xff0c;刷了老毛子后&#xff0c;发现自带的上下线微信提示无法使用(方糖公众号无信息) 经我开启SSH&#xff0c;将上下线部分代码拿出来调试发现&#xff0c;发不出来的原因是原版信息发送长度过长&#xff0c;需要截取一部分才能发送成功。 …

【Android面试八股文】说一说JVM、DVM(Dalvik VM)和ART的区别

文章目录 1. JVM(Java Virtual Machine):2. DVM(Dalvik Virtual Machine):与JVM区别基于的架构不同执行的字节码不同3. ART(Android Runtime):与DVM的区别4. 什么是JIT?4.1 什么是JIT4.2 JIT 编译的优势包括:4.3 对于 DVM 和 ART,它们在 JIT(Just-In-Time)编译方…

【学习笔记】centos7安装mysql相关事项

究极恶心的体验 依赖要按照顺序安装&#xff0c;有些依赖安装位置也不同 非常细节 mysql安装包&#xff1a;mysql官网下载地址 centos7选择Red Hat Enterprise Linux 7 / Oracle Linux 7 (x86, 64-bit), RPM Bundle 下载版本自选 安装视频教程&#xff1a;centos7.5安装mysql …

消息队列-RabbitMQ-延时队列实现

死信队列 DLX,全称为Dead-Letter-Exchange,死信交换机&#xff0c;死信邮箱。当消息在一个队列中变成死信之后&#xff0c;它能重新发送到另外一个交换器中&#xff0c;这个交换器就是DLX&#xff0c;绑定DLX的队列就称为死信队列。 导致死信的几种原因&#xff1a; ● 消息…

Spring配置那些事

一、引言 配置是一个项目中不那么起眼&#xff0c;但却有非常重要的东西。在工程项目中&#xff0c;我们一般会将可修改、易变、不确定的值作为配置项&#xff0c;在配置文件/配置中心中设置。 比方说&#xff0c;不同环境有不同的数据库地址、不同的线程池大小等&#xff0c…

【计算机毕业设计】241外卖微信小程序

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

jadx+android studio+雷电模拟器 动态调试apk

# 环境准备 1.雷电模拟器&#xff0c;开启root 2.jadx&#xff1a; https://sourceforge.net/projects/jadx.mirror/files/v1.5.0/jadx-gui-1.5.0-with-jre-win.zip/download 3.java jdk 11 https://www.oracle.com/cn/java/technologies/javase/jdk11-archive-downloads.…

【文献阅读】Adaptive Arrays

符号表 由于论文内符号繁杂&#xff0c;这里写了一个符号表 符号含义 μ k l \mu_{kl} μkl​kl协方差项 n k n_k nk​K通道的复包络 n l n_l nl​L通道的复包络 μ l k \mu_{lk} μlk​kl协方差项的共轭 α \alpha α定义信号的幅度和时间变化 s k s_k sk​k信道中的信号 w …

什么是Dubbo?

文章目录 1、Dubbo介绍1.1 什么是Dubbo1.2 Dubbo关键特性1.3 什么是RPC1.4 实现RPC的方式1.5 Dubbo中的五大核心组件 1、Dubbo介绍 Apache Dubbo是一款高性能、轻量级的开源微服务开发框架&#xff0c;它提供了RPC通信与微服务治理两大关键能力。这意味着&#xff0c;使用Dubbo…

【Linux】进程_6

文章目录 五、进程8. 进程地址空间 未完待续 五、进程 8. 进程地址空间 上图可能很多人都看过了&#xff0c;这里再来验证一下&#xff1a; 验证位置&#xff1a; 验证堆栈的生长方向&#xff1a; 在上面的空间布局图中&#xff0c;有一个疑问&#xff0c;画的空间是 内存…

【RabbitMQ】初识 RabbitMQ

初识 RabbitMQ 1.认识 RabbitMQ1.1 介绍1. 2.使用场景1.2.1 推送通知1.2.2 异步任务1.2.3 多平台应用的通信1.2.4 消息延迟1.2.5 远程过程调用 1.3 特性 2.基本概念2.1 生产者、消费者和代理2.2 消息队列2.3 交换机2.3.1 direct2.3.2 topic2.3.3 headers2.3.4 fanout 2.4 绑定2…

docker hub仓库被禁用,镜像加速器站点替换

整理 站点整理之前用的daemon.json,现更改镜像加速地址替换自己的docker加速器daemon.json前面加https:// 站点整理 之前用的daemon.json,现更改镜像加速地址 vim /etc/docker/daemon.json{"registry-mirrors": ["https://4xgbe4ey.mirror.aliyuncs.com",…

计算缺失msvcr120.dll文件怎么办,msvcr120.dll丢失的解决方法分享

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“找不到msvcr120.dll”。那么&#xff0c;msvcr120.dll到底是什么&#xff1f;为什么计算机会找不到它&#xff1f;它会对计算机产生什么具体影响&#xff1f;如何解决这个问题&#xff1f;…

vue框架学习------框架概述

框架 在基础语言之上,对各种基础功能进行封装 什么是框架 框架&#xff08;Framework&#xff09;是整个或部分系统的可重用设计&#xff0c;表现为一组抽象构件及构件实例间交互的方法; 另一种定义认为&#xff0c;框架是可被应用开发者定制的应用骨架。前者是从应用方面而…

正能量情感语录热门素材文案去哪里找?文案素材网站分享

正能量情感语录热门素材文案去哪里找&#xff1f;文案素材网站分享 想为你的作品注入正能量和情感温度&#xff1f;不知如何获取热门情感语录素材&#xff1f;别担心&#xff0c;今天我将为大家推荐一些海外知名的素材网站&#xff0c;让你轻松找到受欢迎的文案素材&#xff…

ffmpeg解封装rtsp并录制视频-(1)解封装rtsp断网或摄像机重启后自动重连处理

头文件&#xff1a; xtools.h #pragma once #include <thread> #include <iostream> #include <mutex> //日志级别 DEBUG INFO ERROR FATAL enum XLogLevel {XLOG_TYPE_DEBUG,XLOG_TYPE_INFO,XLOG_TPYE_ERROR,XLOG_TYPE_FATAL }; #define LOG_MIN_LEVEL XLO…

dp练习题

先来一个简单dp练习 class Solution { public:int rob(vector<int>& nums) {int n nums.size();vector<int> a(n 1);int ans nums[0]; a[0] nums[0];if (n 1) return ans;a[1] max(nums[0], nums[1]);ans max(ans, a[1]);if (n 2) return ans;for (i…

xss+csrf项目实例

项目背景&#xff1a; 如下&#xff1a;我们是在一个类似文章管理系统的网站上面发现的该漏洞。我们将其运行在本地的phpstudy集成环境上面。 源码地址下载链接&#xff1a;https://pan.baidu.com/s/1MpnSAq7a_oOcGh4XgPE-2w 提取码&#xff1a;4444 考察内容&#xff1a; …

10 C++11

10 C11 1、类型推导1.1 auto关键字1.2 auto类型推断本质 2、类型计算2.1 类型计算分类2.2 类型计算的四种规则2.3 返回值类型计算 3、列表初始化4、Lambda表达式4.1 前置知识4.2 Lambda表达式4.3 捕获表 5、右值引用5.1 概念5.2 左值引用和右值引用 6、移动语义 1、类型推导 1…