git 常用指令、重获得远程所有的分支、本地分支关联远程分支并且在本地添加远程仓库。代码的pull融合、解决冲突,ignore生效条件,把别人仓库代码提交到自己,新仓库。打tag版本、upstream

本文深入讲解Git的各项常用命令,包括查看文件状态、版本回退、分支管理、代码融合及冲突解决、tag管理等,帮助开发者高效掌握Git操作技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、查看本地git add ./指令后查看暂缓区里的文件内容(如果没进行commit操作,这个add会把新旧文件一起放到暂缓区,如果在add后本地删除了某个文件,再进行add,其暂缓区会保留有这个文件的(这个暂缓区是放到.git文件夹下的,下面强制恢复版本的会修改这里的暂缓区,使其存储的是当前版本具有的文件):

git ls-files

查看指令,其可以查看本地的代码仓库情况,包括新文件、未提交comit等、跟远程代码仓库差了几个版本:

git status

例如比远程仓库少一个层级如下:

使用git log查看是否是如此

2、如果通过add添加了一些不需要的文件,删除他的指令是:

git rm --cached build/darknet/data/resnet50_iter_7000.caffemodel

特点:其不删除物理文件。例子:

例如使用未使用指令时,添加多了一个模型文件,导致其整体文件很大。如下:

然而不想回滚到上次提交,则使用这个rm指令,然后如下:

如果添错太多东西,则可以直接回滚到上次提交,即会重置缓存区,把其重置成使用add指令前的状态。可以使用指令(不带任何参数,其默认时(--mixed)):

git reset 

第二个指令;如果使用(慎用):

git rm --f  "文件路径"

特点:这个不仅会从缓存中删除,还会删除物理文件(不会垃圾桶回收)。

3、关于回退版本的操作(其不会改变.git文件夹的大小,如果误操作导致.git很大,其也无能无力,只能使用git clone来解决):

暂存区是属于add后并进行commit后会把需要提交的数据路径放到一个暂存区(是相当于一个拷贝),此时可以手动删除工程目录下的实体文件。如下手动删除文件后如下:

$ git status
On branch master
Your branch is up to date with 'origin/master'.

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        new file:   a.txt

Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        deleted:    a.txt

git reset (–mixed) HEAD~1 
(-mixed是默认参数)回退一个版本,且会将暂存区的内容和本地已提交的内容全部恢复到未暂存的状态,不影响原来本地文件(未提交的也 不受影响,即新建了一个文件,此时回退到新建前的版本,不会删除这个文件) 
git reset –soft HEAD~1  (其不会覆盖本地的代码,)
回退一个版本,不清空暂存区,将已提交的内容恢复到暂存区,不影响原来本地的文件(未提交的也不受影响) 
git reset –hard HEAD~1       (慎用,假如本地代码的一些未提交的修改是不要的,就可以用,其主要是把本地代码全部换成指的log的代码

用 git log -g 查看所有的提交版本。
回退一个版本,清空暂存区,将已提交的内容的版本恢复到本地,本地的文件也将被恢复的版本替换,即本地的代码会改变为对应版本的代码。(此时.git文件大小不会变小,还是一样大,不知道为啥,猜测是相当于有个垃圾回收站的功能。解决方法就是git clone远程仓库的代码到本地并使用哪里的.git文件)此时使用git ls-files 显示的代码是当前版本的拥有的文件内容。

其中回退版本有两种情况下

第一种:是本地进行commit 后,还没有push到远程仓库,此时想撤销此次提交。其步骤为:

$ git log
commit a44822002522f2ab1e3a5e2a1cec00a7d3d02185 (HEAD -> master, origin/master, origin/HEAD)
Author: hanchao5272 <89298141@qq.com>
Date:   Sun Mar 4 11:14:55 2018 +0800

    优快云-java反射06-成员变量Field-代码优化

commit aa909cff2239536df14820fe086d96305b24e9f1
Author: hanchao5272 <89298141@qq.com>
Date:   Sat Mar 3 23:43:03 2018 +0800

    优快云-java反射-修饰符-代码优化

只有git log查看本地仓库里记录的历史提交,包括最近为push的提交。此时使用git reset --soft即可回退到对应版本如下:

 git reset --soft aa909cff2239536df14820fe086d96305b24e9f1

此时通过,git log即可看到提交历史记录里没有了最新的一次提交。

第二种:是本地进行commit后,已经提交到远程仓库,此时想把远程仓库回滚到先前的某次提交(其实没必要回滚):

按照上面的第一种的方法先把本地回滚到想要的版本,然后再通过push进行提交,此时会出错由于本都版本过旧导致提交失败的错误。此时要再push后面添加一个参数就是【-f】。

例如原先远程仓库的提交数如下:

进行本地强制push指令:

git push https://gitee.com/用户名/test_reset.git -f

后变为如下:

此时就可以把远程仓库回滚到指定版本。

3、如果代码工程有分支,则如果想查看当前工程具有的分支。可以使用:

参考博客:Git-命令行-删除本地和远程分支_段浅浅的博客-优快云博客_git删除分支命令

创建新分支:

 git branch test

查看本地仓库有的分支:

 git branch

切换分支:

 git checkout master

删除分支(git位于的当前分支是无法删除的,需要切换到其它分支才可以,其删除的是本地分支,不会影响到远程分支):

git branch -d xxxxx

这里写图片描述

删除远程分支(其对主分支是不会有影响的):

git push origin --delete <BranchName>

这里写图片描述

查看删除后分支:

git branch -a

这里写图片描述

  • c、本地创建新分支并进行提交到远程仓库:

创建新分支,并切换到新分支的指令:

git checkout -b laobandianqi

然后要先进行分支推送,其会在远程仓库里创建一个分支。否则后面进行代码commit时会报错,其推送指令为:

$ git push origin laobandianqi

然后就可以进行代码add、commit等操作指令了。

4、如果远程克隆指定分支的代码(两种方法):

参考博客:使用git克隆指定分支的代码 - ButterflyGirl - 博客园

切换到v2.8.1这个分支就可以看到具体的代码了,如下图所示:

第一种:使用Git下载指定分支命令为:git clone -b 分支名仓库地址

如下图所示:

  

第二种:先直接克隆整个工程到本地(会包含所有的分支),使用git branch -a 显示不了本地的其它分支,例如:

$ git clone http://gitlab.com/algorithm/fod-recognize-train.git
$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/dev
  remotes/origin/master
  remotes/origin/new_fod_project

此时可以直接切到指定分支,例如:

git checkout new_fod_project
  • b、如果下载的的时候提示问题:
$ git clone -b Interface_2.0 --depth=1 https://gitee.com/yang/partcnn.git
Cloning into 'partcnn'...
fatal: '$GIT_DIR' too big

则是由于当前克隆到本地的文件目录太长了,所有换过另一个文件夹下进行克隆即可。

  • c、如果克隆的时候出现了中断,如下:

其则是由于克隆的太多导致的,此时可以设【--depth】参数来只克隆最新的一次提交,丢弃先前的提交信息,这个可以大大减小文件大小。上面的b指令就是克隆Interface2.0分支里的最新一次提交。即用git log查看的结果是只有一次最新的提交信息。

5、如果本地分支被误删除后,如何恢复,其恢复步骤如下:

参考博客:git 误删分支恢复方法_傲雪星枫-优快云博客_误删的git分支怎么恢复

a.使用git log -g 找回之前提交的commit

commit 3eac14d05bc1264cda54a7c21f04c3892f32406a
Reflog: HEAD@{1} (fdipzone <fdipzone@sina.com>)
Reflog message: commit: add test.txt
Author: fdipzone <fdipzone@sina.com>
Date:   Sun Jan 31 22:26:33 2016 +0800

    add test.txt

b.使用git branch recover_branch[新分支] commit_id命令用这个commit创建一个分支

git branch recover_branch_abc 3eac14d05bc1264cda54a7c21f04c3892f32406a

git branch -a
* develop
  recover_branch_abc
  remotes/origin-dev/develop

c.切换到recover_branch_abc分支,检查文件是否存在

git checkout recover_branch_abc
Switched to branch 'recover_branch_abc'

ls -lt
total 8
-rw-r--r--   1 fdipzone  staff     4  1 31 22:38 test.txt

这样就可以恢复被误删的分支了,这样子本地的代码就会变成对应commit版本的代码,所以如果代码刚好有修改的,要注意备份好来。再进行恢复。

6、git创建分支的简单用途:

参考博客:git进阶之分支的简单用途_flyinbed_的博客-优快云博客_git分支作用

7、本地重新获得远程代码和远程所有的分支:

  • a、首先:

通过git clone先克隆远程仓库代码到本地。此时如果没有看到.git文件夹一般是因为其为隐藏文件而看不到。

  • b、通过下面的指令进行把远程仓库里的分支都克隆到本地(亲测,不知道要什么时候生效,推荐不用):
git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done

第一种情形推荐的方法是使用下面来拉取远程主机里的分支(git pull是拉取所有的分支到本地仓库):

git pull origin dev

然后就可以直接进行git checkout dev,本地就会自己创建dev分支跟把其自动跟踪远程分支。如下:

第二种情形:在本地创建了一个分支,而远程也存在分支,但他们没有关联起来,而且本地还不存在远程主机的分支,此时关联他们的方法就是:

git pull origin dev
git branch dev 
git push --set-upstream origin dev   #第一种 关联远程主机并且进行push操作
#接着就可以在本地新建分支并于远程分支关联git branch –set-upstream 本地新建分支名 origin/远程分支名
git branch --set-upstream master origin/master  #第二种关联

第三种情形:本地有一个工程,并且没有.git文件,此时想添加个git文件。

此时分两个情况:本地有跟远程仓库里文件相同名称文件被修改;跟远程仓库相同文件没有文件被修改。

如果相同文件没有被修改,只是有添加,则方法跟上面第三种情况差不多,流程为:

git init
#否则会报删除本地文件,在进行融合
git git add ./ 
#拉取远程仓库所有分支到本地
git pull
#添加origin对象
git remote add origin http://gitlab.pktec.com/algorithm/fod-recognize
#切换分支,并绑定了远程分支dev。
git checkout dev

 如果有相同文件被修改,则进行git checkout dev的时候回报错:

error: Your local changes to the following files would be overwritten by checkout:
        apps/manage.py
Please commit your changes or stash them before you switch branches.
Aborting

此时的解决方法,要么把此文件刪除了后進行切換分支。

  • c、通过下面的指令查看当前本地仓库里的所有分支:
git branch -a
  • d、通过下面指令进行项目融合:
git fetch --all
  • c、通过下面的指令进行分支切换:
 git checkout -b NewInterface_2.0 origin/NewInterface_2.0

8、本地分支关联远程分支并且在本地添加远程仓库:

如果本地代码想提交到远程仓库,最好的做法是先在远程新建好仓库(另一种做法是在本地新建好仓库然后提交到远程),

一般在新建完后远程仓库也会有提示提交代码的一些指令。

对于新的工程进行提交就是(可能有误用不了):

#初始化一个.git文件夹
$git init
#关联远程仓库
$git remote add origin git@github.com:YotrolZ/helloTest.git
#查看本地的关联有的远程仓库地址
$git remote -v
origin  git@github.com:YotrolZ/helloTest.git (fetch)
origin  git@github.com:YotrolZ/helloTest.git (push)
test    git@github.com:YotrolZ/helloTest.git (fetch)
test    git@github.com:YotrolZ/helloTest.git (push)

#删除本地存储的某个远程仓库地址
$git reomte remove test
#接着就可以在本地新建分支并于远程分支关联git branch –set-upstream 本地新建分支名 origin/远程分支名
$git branch --set-upstream master origin/master
#最后就可以使用add commit push等进行代码的提交了

对新工程(没有init文件夹)的,但是远程仓库也只有master,还没有【test4】分支:

#1.本地创建一个【.git】文件夹
git init
#2.把远程仓库代码地址添加到本地
git remote add origin https://gitee.com/yang/test_merge.git
#3.本地创建一个分支并切换到对应的分支上,如果是master的话就不用动
git checkout -b test4
#4.进行一次add、commit操作
git add ./
git commit -m "第一次提交"
#5.进行把本地分支推送到远程分支,并且关联,格式为:远程仓库 本地仓库
git push --set-upstream origin/test4 test4

【2】很重要:

如果没有这步操作的话,其【.git/config】文件里的内容大概为:

[core]
	repositoryformatversion = 0
	filemode = false
	bare = false
	logallrefupdates = true
	symlinks = false
	ignorecase = true

如果添加后的地址为:

[core]
	repositoryformatversion = 0
	filemode = false
	bare = false
	logallrefupdates = true
	symlinks = false
	ignorecase = true
[remote "origin"]
	url = https://gitee.com/yang/test_merge.git
	fetch = +refs/heads/*:refs/remotes/origin/*

【4】也很重要,如果没有进行comit的话,则其会报:

yang@DESKTOP-VSM4L53 MINGW64 /f/test_branch/test_merge (test4)
$ git push --set-upstream origin test4
error: src refspec test4 does not match any
error: failed to push some refs to 'https://gitee.com/yang/test_merge.git'

即没有东西提交到远程仓库

【5】重要,其是关联本地仓库跟远程仓库。

这样子远程仓库就有了这个分支,如果电脑没有存储过远程仓库的一些账号信息,则中途可能还会报,输入仓库的用户名邮箱信息如下:

$  git config --global user.name "输入你的用户名"
$  git config --global user.email "输入你的邮箱"

这里的邮箱跟用户名输错了好像也不影响各种git操作(亲测过)。如果像修改的话,其指令为:

$  git config --global --replace-all user.email "输入你的邮箱" 
$  git config --global --replace-all user.name "输入你的用户名"

9、代码的pull融合、解决冲突

对于团队合作开发的项目,其就可能涉及到一个代码 融合拉取出现冲突的情况。一般这种情况是要尽量避免的,因为如果出现大量的代码融合则会增加工作量。一帮团队开发的时候是分配好工作的。

注意:其中如果代码改代码的时候没有修改同一行的代码的话,即出现两个程序员修改了同一行时则git pull的时候会显示失败,此时应当先add、commit后再进行一次git pull并且使用git status 可以查看到冲突的文件时那些,然后我们在pycharm打开对于的文件,则其会把冲突的位置用特殊的语句标记,开始的指令顺序为:

git add ./
git commit -m "first commit"
git pull origin
git status

此时输出的提示信息如下:

$ git status
On branch master
Your branch and 'origin/master' have diverged,
and have 2 and 1 different commits each, respectively.
  (use "git pull" to merge the remote branch into yours)

You have unmerged paths.
  (fix conflicts and run "git commit")
  (use "git merge --abort" to abort the merge)

Unmerged paths:
  (use "git add <file>..." to mark resolution)

        both modified:   .idea/workspace.xml
        both modified:   utils/detection_roi.py

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

在我们点击utils/detection_roi.py代码后提示我们去修改如下:

此时结合实际情况把其修改为适合的代码即可。

然后再进行一次下面的顺序即可成功提交:

git add ./
git commit -m "merge"
git push origin 

其中如果不想进行代码融合了,可以使用下面的指令来进行退出融合:

git merge --abort

10、ignore生效条件:

主要使用git ls-files指令,如果这个指令显示的文件里已存在有.ignore的排出的文件则添加的排除格式不会排除旧的文件,会排除以后通过add新添加的指定格式的文件(即对旧的不起作用,只对新的其作用)

git ls-files通过add刚添加的文件跟本版本仓库里具有的文件。如果要排除已经在这里显示的文件,则要进行版本回退到一个不包含此文件的版本,直接使用上面的软版本回退法即可。

11. 别人仓库代码提交到自己新仓库:

由于别人的代码仓库里有.git文件,其存有他对代码的修改历史,对自己也是有好处的。

a.自己新建一个仓库,不要包含readme,ignore等文件。

b.让后在git clone别人的仓库到本地后,修改其远程仓库地址,指令如下:

$vim .git/config

然后只修改url即可:

  1 [core]
  2         repositoryformatversion = 0
  3         filemode = false
  4         bare = false
  5         logallrefupdates = true
  6         symlinks = false
  7         ignorecase = true
  8 [remote "origin"]
  9         url = https://gitee.com/you_name/project_name.git  #只需修改这个
 10         fetch = +refs/heads/*:refs/remotes/origin/*
 11 [branch "master"]
 12         remote = origin
 13         merge = refs/heads/master

最后,直接进行git push即可。

12、添加tag,管理版本:

參考博客:Git给项目打tag命令

tag就是发布的代码版本,其必须在master分支上进行发布的。

其中要把本地的tag完全添加到代码仓库,使用的指令为:

git push origin --tags

13、如果本地分支跟远程分支要进行有错位,如何同步:

先删除远程分支:

git branch -r -d origin/branch-name

进行清除本地remote的origin分支信息:

清除前:

清除后:

进行本地跟远程分支同步:

git push --set-upstream origin branch_name

完成。

14、git清除本地已经删除的分支信息,例如带了remotes的:

使用指令:

git remote prune origin

原先的info: 

prune后的结果:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值