【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.rhkb.cn/news/351416.html

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

相关文章

【论文复现|智能算法改进】基于多策略融合灰狼算法的移动机器人路径规划

目录 1.算法原理2.改进点3.结果展示4.参考文献5.代码获取 1.算法原理 【智能算法】灰狼算法&#xff08;GWO&#xff09;原理及实现 2.改进点 混沌反向学习策略 融合Logistic混沌映射和Tent混沌映射生成Logistic-Tent复合混沌映射: Z i 1 { ( r Z i ( 1 − Z i ) ( 4 −…

Qt项目天气预报(1) - ui界面搭建

ui中部 效果演示 ui效果 显示效果 控件列表 配合右图查看 居中对齐-label 设置label居中对齐(别傻傻的空格对齐了) 间距配置 widget03 外围的widget对象: 包含label 和 widget0301&#xff0c;如下图 widget0301 内围的widget对象&#xff0c;如下图 样式表 widget03 …

Modbus为何要转成ProfiNET

Modbus与ProfiNET代表了工业通讯不同阶段的发展&#xff0c;各自具有优缺点。Modbus简单易用&#xff0c;适合小型系统&#xff1b;ProfiNET高效稳定&#xff0c;适用于大型复杂网络。转换Modbus为ProfiNET可提高系统性能和扩展性。实际场景下&#xff0c;升级生产线控制器为Pr…

车载网络安全指南 网络安全框架(二)

返回总目录->返回总目录<- 目录 一、概述 二、网络安全组织管理 三、网络安全活动 四、支撑保障 一、概述 汽车电子系统网络安全活动框架包含汽车电子系统网络安全活动、组织管理以及支持保障。其中,网络安全管理活动是框架的核心,主要指汽车电子系统生命周期各阶段…

基于JSP技术的个人网站系统

开头语&#xff1a; 你好呀&#xff0c;我是计算机学长猫哥&#xff01;如果有相关需求&#xff0c;文末可以找到我的联系方式。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;JSP JavaBeans Servlet 工具&#xff1a;Eclipse、MySQL Workbench、…

mediamtx流媒体服务器测试

MediaMTX简介 在web页面中直接播放rtsp视频流&#xff0c;重点推荐&#xff1a;mediamtx&#xff0c;不仅仅是rtsp-CSDN博客 mediamtx github MediaMTX(以前的rtsp-simple-server)是一个现成的和零依赖的实时媒体服务器和媒体代理&#xff0c;允许发布&#xff0c;读取&…

Python 踩坑记 -- 调优

前言 继续解决问题 慢 一个服务运行有点慢&#xff0c;当然 Python 本身不快&#xff0c;如果再编码不当那这个可能就是量级上的劣化。 整个 Code 主线逻辑 1700&#xff0c;各依赖封装 3000&#xff0c;主线逻辑也是很久远的痕迹&#xff0c;长函数都很难看清楚一个 if els…

【归并排序】| 详解归并排序核心代码之合并两个有序数组 力扣88

&#x1f397;️ 主页&#xff1a;小夜时雨 &#x1f397;️专栏&#xff1a;动态规划 &#x1f397;️如何活着&#xff0c;是我找寻的方向 目录 1. 题目解析2. 代码 1. 题目解析 题目链接: https://leetcode.cn/problems/merge-sorted-array/description/ 本道题是归并排序的…

手把手教你如何在Windows11下安装Docker容器

文章的主要要点&#xff1a; 为什么使用Docker&#xff1a;Docker可以简化部署过程&#xff0c;特别适合新手或在学习新技能&#xff08;如Redis、MySQL、消息队列、Nginx等&#xff09;时使用。 安装前的准备&#xff1a;在安装Docker之前&#xff0c;需要在Windows中开启一些…

C++ 算法教程

归并排序 #include<iostream> using namespace std; template <class T> void Merge(T data[],int start,int mid,int end) {int len1 mid - start 1, len2 end - mid;int i, j, k;T* left new int[len1];T* right new int[len2];for (i 0; i < len1; i)…

java(JVM)

JVM Java的JVM&#xff08;Java虚拟机&#xff09;是运行Java程序的关键部件。它不直接理解或执行Java源代码&#xff0c;而是与Java编译器生成的字节码&#xff08;Bytecode&#xff09;进行交互。下面是对Java JVM更详尽的解释&#xff1a; 1.字节码&#xff1a; 当你使用J…

ubuntu安装idea

下载这个文件解压&#xff0c;我的解压在了用户目录下的X86下&#xff0c;接下来直接运行bin下的sh就能启动&#xff0c;想要在固定栏用以下步骤 创建桌面条目文件&#xff1a; 在 ~/.local/share/applications 目录中创建一个新的 .desktop 文件。例如&#xff0c;可以命名…

大数据开发流程解析

大数据开发是一个复杂且系统的过程&#xff0c;涉及需求分析、数据探查、指标管理、模型设计、ETL开发、数据验证、任务调度以及上线管理等多个阶段。本文将详细介绍每个阶段的内容&#xff0c;并提供相关示例和代码示例&#xff0c;帮助理解和实施大数据开发流程。 本文中的示…

C语言---------深入理解指针

目录 一、字符指针 二、指针数组&#xff1a; 三、数组指针&#xff1a; 1、定义&#xff1a; 2、&数组名和数组名区别&#xff1a; 3、数组指针的使用&#xff1a; 四、数组参数&#xff0c;指针参数&#xff1a; 1、一维数组传参&#xff1a; 2、二维数组传参&am…

华媒舍:明星祝福视频,为你送上最真挚的祝福!

引言&#xff1a;嗨&#xff0c;亲爱哒书友&#xff01;在这样一个科谱详细介绍文中&#xff0c;我们将带你领略一份尤其的独家合辑——十部明星祝愿视频。这种视频汇聚了诸多明星为你送上的最真挚的祝福。让我们一起来探寻这种电影中蕴含的情绪和价值吧&#xff01; 1.共享温暖…

数据网格和视图入门

WinForms数据网格&#xff08;GridControl类&#xff09;是一个数据感知控件&#xff0c;可以以各种格式&#xff08;视图&#xff09;显示数据。本主题包含以下部分&#xff0c;这些部分将指导您如何使用网格控件及其视图和列&#xff08;字段&#xff09;。 Grid Control’s…

使用langchain接入通义千问与知识图谱

文章目录 前言大前提准备工作0. 找一个key1. 手动部署2. Docker部署 该怎么开始用户的提问问答历史读取api-key使用Streamlit构建页面框架Prompt知识库的植入Prompt知识库的执行Prompt知识库详细内容植入更新布局补全页面细节 前言 这一篇文章将尝试做一个缝合怪&#xff0c;把…

mybatis-plus使用拦截器实现sql完整打印

shigen坚持更新文章的博客写手&#xff0c;擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长&#xff0c;分享认知&#xff0c;留住感动。 个人IP&#xff1a;shigen 在使用mybatis-plus&#xff08;mybatis&#xff09;的时候&#xff0c;往往需要…

深入理解指针(四)

目录 1. 回调函数是什么? ​2. qsort使用举例 2.1冒泡排序 2.2使用qsort函数排序整型数据 ​2.3 使用qsort排序结构数据(名字) 2.4 使用qsort排序结构数据(年龄) 3. qsort函数的模拟实现 1. 回调函数是什么? 回调函数就是⼀个通过函数指针调⽤的函数。 如果你把函数…

C# WPF入门学习主线篇(十五)—— DockPanel布局容器

C# WPF入门学习主线篇&#xff08;十五&#xff09;—— DockPanel布局容器 欢迎来到C# WPF入门学习系列的第十五篇。在前几篇文章中&#xff0c;我们探讨了 Canvas、StackPanel 和 WrapPanel 布局容器及其使用方法。本篇博客将介绍另一种强大且常用的布局容器——DockPanel。…