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

news2024/11/30 18:55:49

目录

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 origin

Administrator@hutao MINGW64 /d/projects/test (master)
$ git remote -v

Administrator@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 -a

Administrator@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/master

Administrator@hutao MINGW64 /d/projects/test (master)
$ git branch -a
  remotes/origin/master

Administrator@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 -a
  remotes/origin/master

Administrator@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
* master
  remotes/origin/master

Administrator@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_test
  deal_data
  master
  remotes/origin/bran_test
  remotes/origin/deal_data
  remotes/origin/master

D:\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 -a
  bran_test
* deal_data
  master
  remotes/origin/bran_test
  remotes/origin/deal_data
  remotes/origin/master

D:\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.cpp
        deleted:    readme.md

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        data.txt

no 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.txt
 3 files changed, 2 insertions(+)
 create mode 100644 data.txt
 delete mode 100644 readme.md

D:\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.git
   02b8e6b..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:\test

D:\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.cpp

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        data.txt

no 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.cpp

no changes added to commit (use "git add" and/or "git commit -a")

D:\gitspace>git checkout main.cpp
Updated 1 path from the index

D:\gitspace>git status
On branch deal_data
Your branch is up to date with 'origin/deal_data'.

nothing to commit, working tree clean

D:\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 clean

D:\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 +0800

    xxxx
D:\gitspace>git reset ae6376e636bac09180f1d21d6646f75175b7bf40
Unstaged changes after reset:
D       README.md
M       main.cpp
D       test.txt
D       yyyy.txt

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.md
        modified:   main.cpp
        deleted:    test.txt
        deleted:    yyyy.txt

no 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.md
        deleted:    test.txt
        deleted:    yyyy.txt

no 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.md
 delete mode 100644 test.txt
 delete mode 100644 yyyy.txt

D:\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 clean

D:\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 +0800

    xxxx

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

和第三种类似,只是回退时使用"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.coloradmin.cn/o/1815203.html

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

相关文章

wms海外仓系统多少钱?什么价格才合理,一篇文章介绍清楚

在海外仓竞争异常激烈的今天&#xff0c;提升仓管效率&#xff0c;降低运营成本变得迫在眉睫。尤其是对中小型海外仓和一些刚处于起步阶段的海外仓来说&#xff0c;能选到一个高性价比&#xff0c;功能完善&#xff0c;合作灵活风险低的wms海外仓系统&#xff0c;并不是一件简单…

sqlserver使用链接服务器将本地服务器数据库表数据更新到远程数据库中

需求&#xff1a; 需要将本地sqlserver服务器某个数据库当中的某个表的数据&#xff0c;更新到远程服务器的同名数据库中的同名的表中。 sql代码如下&#xff1a; insert into TableA(Col1,Col2...) select * from [10.14.7.65\CS2014].[NEVTestDB2.0].[dbo].[TableA]将本地…

【CS.PL】Lua 编程之道: 控制结构 - 进度24%

3 初级阶段 —— 控制结构 文章目录 3 初级阶段 —— 控制结构3.1 条件语句&#xff1a;if、else、elseif3.2 循环语句&#xff1a;for、while、repeat-until3.2.1 输出所有的命令行参数3.2.2 while.lua3.2.3 repeat.lua及其作用域 &#x1f525;3.2.4 for.lua (For Statement)…

基于MMrotate旋转目标框检测(安装说明与踩坑记录)

一、简述 MMRotate 是一款基于 PyTorch 的旋转框检测的开源工具箱&#xff0c;是 OpenMMLab 项目的成员之一。里面包含了rcnn、faster rcnn、r3det等各种旋转目标的检测模型&#xff0c;适合于遥感图像领域的目标检测。 基础知识&#xff1a;什么是旋转目标检测 二、MMRotate…

POSEMANIACS图片库下载

POSEMANIACS - Royalty free 3d pose reference for all artists是一个很不错得姿态库图片网站​&#xff0c;可以用作ControlNet的原始图片。 就是加载速度有点慢。一个个手工点击​查看或下载更是费时费力。 点击图片&#xff0c;可以分析地址为 https://www.posemaniacs.c…

雪球产品可能要远离普通人了

最近有消息说&#xff0c;在年初发生大规模敲入事件后&#xff0c;雪球产品的购买门槛可能从300w提升至1000w。 那么在这个时间&#xff0c;了解一下雪球产品到底是什么&#xff0c;运行原理是什么。 第一种 经典雪球 经典雪球比较容易理解&#xff0c;设定好了固定的敲出条件…

安装Windows版Nessus

安装Windows版Nessus 1.前言2.Nessus安装3.安装具体步骤4.文件版许可证 1.前言 之前有安装过Ubuntu版本的Nessus的&#xff0c;这次使用Windows来安装一下。 安装包获取&#xff1a;公众号回复Nessus_Windows。公众号在文章最下面推广中可以看到。 2.Nessus安装 这里直接使…

使用 C# 学习面向对象编程:第 8 部分

抽象方法 亲爱的读者&#xff0c;本文是 OOP 的第四大支柱&#xff0c;也是最后一大支柱。对于 OOP 初学者来说&#xff0c;这很容易让人困惑。因此&#xff0c;我们用非常简单的语言提供了一个示例。 “抽象用于管理复杂性。无法创建抽象类的对象。抽象类用于继承。” 例如…

11_2、多态性:虚函数

虚函数与抽象类 虚函数概念声明虚析构函数 抽象类纯虚函数抽象类 虚函数 概念 在赋值兼容规则中&#xff0c;基类类型的指针指向派生类对象时&#xff0c;通过此指针只能访问从基类继承来的同名成员。 如果我们希望通过指向派生类对象的基类指针&#xff0c;访问派生类中的同…

淘宝评论数据信息接口

淘宝评论API接口是一种用于获取淘宝用户评论信息的接口&#xff0c;联讯数据可以帮助商家和消费者获取到商品的评价信息&#xff0c;以便更好地了解商品的质量和用户体验。以下是关于淘宝评论API接口的一些内容&#xff1a; 一、接口功能 淘宝评论API接口提供了商品评价信息的…

西格玛 ------ 第18个希腊字母学习

名词解释 在数学中&#xff0c;我们把∑作为求和符号使用&#xff0c;用小写字母σ&#xff0c;表示标准差。 ∑符号表示求和&#xff0c;读音为sigma&#xff0c;英文意思为Sum&#xff0c;Summation&#xff0c;汉语意思为“和”“总和”。 例1 公式使用说明&#xff1a;…

数据资产解决方案一站式资料大全:数据资产从业人员必备,附下载。数据资产解决方案,数据资产平台建设方案,数据资产入表,数据资产入表流程,数据资产评估案例

在数据资产的建设中&#xff0c;各种解决方案、标准规范、顶层设计指南等文档资料是不可或缺的参考资源。拥有一套全面、系统的数据资产解决方案资料库&#xff0c;无疑能够为工作提供极大的便利和支持。 一站式数据资产解决方案大全资源包&#xff0c;包含政策汇编、整体解决…

HR:对不起,我们不考虑gap超过3个月的简历

关于 gap&#xff0c;瑶琴或许能有些发言权&#xff0c;在 23 年的金三银四时段&#xff0c;瑶琴因为各种原因&#xff0c;选择了裸辞。 这也是瑶琴第一次裸辞&#xff0c;还是在大裁员时代&#xff0c;对这段经历感兴趣的朋友可以看这篇文章&#xff1a;2023 裸辞 就业 瑶琴…

OpenAI前联合创始人埃隆·马斯克 (Elon Musk) 撤销对 OpenAI 的诉讼

埃隆马斯克 (Elon Musk) 撤销了对 OpenAI 及其首席执行官萨姆奥尔特曼 (Sam Altman) 的诉讼&#xff0c;指控该公司违反合同&#xff0c;并据称放弃了创造人工智能技术造福人类的使命。据 CNBC 早些时候报道&#xff0c;该案在没有偏见的情况下被驳回&#xff0c;这意味着马斯克…

SAP 使用BAPI更改分配字段ZUONR不生效解决方案

需求&#xff1a; 使用BAPI变更财务凭证上的ZUONR分配字段&#xff0c;正常情况下使用BAPI:FI_DOCUMENT_CHANGE或者FI_ITEMS_MASS_CHANGE都是可以进行变更的&#xff0c;但是项目上要变更的科目类型是KZ&#xff0c;导致这两个BAPI都没办法进行更改&#xff0c;故对此BAPI进行…

电商平台API电商平台数据传输(商品订单店铺数据采集)

API&#xff08;Application Programming Interface&#xff09;是一种用于应用程序之间相互通信和交互的接口。它定义了一组规范和协议&#xff0c;允许软件系统之间传递数据和请求服务。 API的基本概念包括&#xff1a; 1. 接口&#xff1a;API作为接口&#xff0c;提供了一…

自动同步库数据——kettle开发36

kettle中的那些人工智能。 一、kettle的AI能力目录 跨库同步 2.自动开发 3.自动优化 二、AI实例 1、跨库同步 sqlsever表同步至oracle数据库 1.1源库sqlserver 1.2目标库oracle 1.3可视化跨库同步 使用多表复制向导 选择跨库的表&#xff0c;下一步下一步&#xff0c;即可…

ZL-22A足趾容积测量仪(Plus)在药理学研究上的作用不容忽视

简单介绍&#xff1a; 足趾容积测量仪(Plus&#xff09;是用于解热药筛选和鉴定的仪器&#xff0c;是一种通过测量鼠足趾肿胀后的恢复过程来评价药的效价&#xff0c;了解药作用时间和药效规律的仪器。 详情介绍&#xff1a; 1、显示&#xff1a;5寸触摸屏 2、显示分辨率&…

Go API

Go语言提供了大量的标准库&#xff0c;因此 google 公司也为这些标准库提供了相应的API文档&#xff0c;用于告诉开发者如何使用这些标准库&#xff0c;以及标准库包含的方法。官方位置&#xff1a;https://golang.org Golang中文网在线标准库文档: https://studygolang.com/p…

Permute 3 mac版:一键转换,格式无忧

Permute 3是一款强大而灵活的多媒体格式转换工具&#xff0c;它以其高效、易用和广泛兼容的特性&#xff0c;成为了众多用户处理媒体文件的得力助手。 Permute 3 Mac获取 首先&#xff0c;Permute 3支持广泛的媒体格式&#xff0c;无论是视频、音频还是图片&#xff0c;都能轻…