git : 从入门到进阶(实战问题对策)

这篇具有很好参考价值的文章主要介绍了git : 从入门到进阶(实战问题对策)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

0. 前言

1. git stash: 暂时保存本地修改

2. git push时发生冲突怎么办?

2.1 平凡的merge

2.2 有冲突的merge

3. 访问过去的提交版本:git checkout

3.1 detached HEAD

3.2 “detached HEAD”状态下所作的修改会怎样呢?

3.3 “detached HEAD”状态下所作的修改如何汇入开发branch? 

4. 取消或恢复

4.1 git reset

4.2 git revert

4.3 git checkout

4.4 恢复某个文件到特定版本

5. 创建bare repository

6. git tag: 标签操作

6.1 何谓标签?

6.2 基本命令

列出所有标签信息 

在提交历史中查看标签

 显示指定标签信息 

推送标签

删除标签

 创建轻量标签

 创建附注标签

检出标签

6.3 打tag操作步骤例

7. git igonore list

7.1 Define git ignore pattern 

7.2 为什么.gitignore不生效?


0. 前言

        记录日常git使用过程中碰到的一些常见问题的解决,以及一些常用技巧。作为自己作为git使用者的从入门到进阶的成长过程。不求完备但求简洁实用。动态更新。。。

1. git stash: 暂时保存本地修改

        多人工作的项目中,经常会碰到自己在本地做了一些修改(但是还没有经过验证,没有做好要提交的准备),这个远程库已经有更新,需要pull下来在这个最新版本基础上进行自己的修改的验证。这时,pull一下的话会碰到以下这种错误:

git : 从入门到进阶(实战问题对策),计算机使用,git

        简而言之,就是因为本地有修改而且还没有commit(not yet being staged),所以git不允许你pull远程最新版本,因为它不知道该拿你本地修改的东西与远程版本中的更新怎么办。如果你本地commit了话,那么git会在pull时自动进行merge,如果merge时发生冲突,会在merge版本中留下标志。但是你本地修改没有commit,git就不知道该咋办了,干脆报警撂挑子不干了。

        简单的对策(三板斧):

git stash

git pull 

git stash pop

        第一条命令是将本地修改暂时保存起来,这样本地版本就回到上一次pull下来的状态。这样的话,再执行第1条git pull命令就不存在冲突了。然后,第3条指令的意思是重新把刚才暂存起来的本地修改弹(pop)出来,再次patch到最新pull下来的最新版本上去。

        那怎么确保在以上操作过程中自己原本所做的修改没有丢失呢?

        在以上操作过程之前执行一下“git status”,然后在以上操作过程后再执行一次git status,两次git status所得到的结果应该一致,即应该都列举了本地修改过的文件有哪些。当然,更保险的做法是手动备份自己所作的本地修改,然后在执行以上操作之后,用diff进行手动备份文件与本地库中的文件确认自己所作的修改是否还在。

        关于git stash的更全面的解说参见:git stash - Saving Changes | Atlassian Git Tutorial

2. git push时发生冲突怎么办?

2.1 平凡的merge

        执行git push时常常会碰到以下错误:

git : 从入门到进阶(实战问题对策),计算机使用,git         这是因为在你git pull之后在本地做了修改到现在要push上去的期间内,有其他人对远程git库做了修改。

        最简单的解决方案就是,先执行“git pull”,将远程库的更新拉下来。这时由于本地的更新已经commit了,git在pull时会自动执行远程更新与本地更新的merge。

        如果本地更新与远程更新没有冲突,比如说,没有针对相同的文件进行更新,那就只是平凡的merge,大家相安无事,执行完git pull后再次执行git push即可。

        如果本地更新与远程更新存在冲突呢?。。。且听下回分解。

2.2 有冲突的merge

        如上一节所述,如果远程版本库中的更新和本地的更新不是针对相同文件的话,那么git自动做版本库的merge是毫无障碍的。甚至在远程更新与本地更新是针对相同文件,但是是针对不同部分的更新,git也能够给出没有歧义的更新。但是,当远程更新和本地更新是针对同一文件的的相同部分进行不相同的更新的话,这时候git就无法进行清楚明白的merge。但是git会给出如下图所示的merge版本,保留两方面的更新,并提示用户自己手动尽心merge修改:

git : 从入门到进阶(实战问题对策),计算机使用,git

git : 从入门到进阶(实战问题对策),计算机使用,git

上半部分是显示merge后的版本。其中“<<<< HEAD”所表示的部分为从远程版本库拉下来的更新版本,而“>>>>>>>”标示的则是本地所作的修改,git无法进行合理的取舍,因此将两者都保留下来,留给开发者去自主决定取舍并给出最终的merge(就是进行普通的编辑即可。)

3. 访问过去的提交版本:git checkout

        当想要访问既往历史版本时,可以使用git checkout命令。开发过程中经常会需要追溯历史版本去查找某个功能问题是从哪个历史版本开始导入的。

git checkout commit-id

        这条命令会切换指定的commit-id。而commit-id可以用用git log命令进行查询,比如说:

git log

git log --oneline

        --oneline选项是给出简洁的输出,将信息压缩到一行中输出。 

        执行以上命令后,就可以在恢复的该commit版本上做验证、修改等操作,这些操作仅对该commit有效,不会影响其它branch,比如说开发工作所在的主branch(main or master等)。

3.1 detached HEAD

        通常来说,HEAD会指向某个branch。但是,当执行git checkout后,HEAD就不再指向任何branch,而是仅指向该commit。这就是所谓的“detached HEAD”状态,或者说游离状态。

        在这个状态下,所作的修改无法提交到各开发branch中去。

        要想从这个游离状态返回到开发状态(比如说进入该游离状态之前的branch)去,直接执行以下命令即可:

git checkout <branch-name>       # 切换到某指定branch

        比如说,如果是从main or master branch进入该游离状态的话,则可以执行以下命令回去:

git checkout main 

3.2 “detached HEAD”状态下所作的修改会怎样呢?

        coming soon...

3.3 “detached HEAD”状态下所作的修改如何汇入开发branch? 

        coming soon...

        git checkout命令还有以下一些使用方式:

git checkout -b <branch-name>  # 创建新的branch并切换到该branch

git checkout -- <file>                    # 放弃对指定文件的本地修改,恢复到本地版本库中的状态

4. 取消或恢复

4.1 git reset

4.2 git revert

4.3 git checkout

        如果本地针对某个文件做了修改,但是不想保留这个修改,换句话说要恢复到HEAD所指向的版本状态,可以用git checkout命令:

Git checkout -- file-to-be-recovered-to-origin-state

4.4 恢复某个文件到特定版本

        问题:对于某个Git控制下的文件进行了修改,但是发现问题,需要退回到改之前的版本。假定该文件为 /pathto/somefile.txt

        解决方法:

        第一步: 在命令行中输入 git log /pathto/somefile.txt 得到该文件的commit 历史。 

        第二步: 复制需要回退版本的hash(commit ID),在此假设我们回退到 4297ff2945d4f78d9804ba0f5658a66d39ba46e9 ,则复制该序列即可

        第三步:对该文件checkout 对应版本。命令为 git checkout <hash> <filename(including path)>, 在此即为命令行中输入 :

git checkout 4297ff2945d4f78d9804ba0f5658a66d39ba46e9  /pathto/somefile.txt        

        第四步: 如果需要将该版本重新commit的话,则执行commit命令即可:

git add /pathto/somefile.txt

git commit -m "revert to previous version"        

5. 创建bare repository

        --> git: Linux中创建中心仓库(or 裸仓库:bare repository)

6. git tag: 标签操作

6.1 何谓标签?

        简单的理解,tag 就是对某次commit 的一个标识,相当于起了一个别名。例如,在项目发布某个版本的时候,针对最后一次commit 起一个 v1.0这样的标签来标识里程碑的意义。有两种类型的标签:轻量标签(lightweight tag)、附注标签(annotated tag):

        【轻量标签】:只是某个commit 的引用,可以理解为是一个commit的别名;

        【附注标签】:是存储在git仓库中的一个完整对象,包含打标签者的名字、电子邮件地址、日期时间 以及其他的标签信息。它是可以被校验的,可以使用 GNU Privacy Guard (GPG) 签名并验证。

6.2 基本命令

列出所有标签信息 

git tag : 直接列出所有的标签

在提交历史中查看标签

git log –oneline –graph

 显示指定标签信息 

git show {标签名}   # (轻量标签 和 附注标签 的信息是不一样的)

推送标签

        默认情况下,git push命令不会将标签推送到远程服务器,需要使用以下命令将标签推送到远程服务器:

git push origin {标签名}

        如果要一次性推送所有本地标签,可以使用以下命令:

git push origin --tags

删除标签

        删除本地标签的命令如下:

git tag -d {标签名}

        删除远程标签的命令如下:

git push origin :refs/tags/{标签名}

 创建轻量标签

git tag 标签名           # 直接给当前的提交版本创建一个【轻量标签】
git tag 标签名 提交ID    # 给指定的提交版本创建一个 【轻量标签】

        如果没有指定“提交ID” 的话,自然就是针对当前分支的最新提交打标签。

 创建附注标签

git tag -a {标签名} -m "{标签信息}" {提交ID}

        例如,创建一个指向最新提交的附注标签:

git tag -a rev1.0 -m "Release version 1.0" HEAD

检出标签

        检出标签的操作实质是以标签指定的版本为基础版本,新建一个分支,继续其他的操作。因此,就相当于是新建分支的操作了。        

6.3 打tag操作步骤例

在Git中可以遵照以下步骤进行打tag操作:

  1. 查看最新的提交ID,可以使用以下命令:
    git log -1 --pretty=format:"%H"
  2. 执行以下命令,创建一个轻量标签:
    git tag {标签名} {指定提交ID}
    或者执行以下命令,创建一个附注标签:
    git tag -a {标签名} -m "{标签信息}" {指定提交ID}
    如果不指定提交ID的话,则默认会使用当前所在分支的最新提交作为标签指向的提交
  3. 将标签推送到远程服务器,可以使用以下命令:
    git push origin {标签名}
    如果要一次性推送所有本地标签,可以使用以下命令:
    git push origin --tags
    其中,{标签名}是标签的名称。

7. git igonore list

7.1 Define git ignore pattern 

        Ref: .gitignore file - ignoring files in Git | Atlassian Git Tutorial

7.2 为什么.gitignore不生效?

        Ref: .gitignore不生效问题解决方法_gitignore文件不生效-CSDN博客


 

ref: Git Tutorials and Training | Atlassian Git Tutorial文章来源地址https://www.toymoban.com/news/detail-567958.html

到了这里,关于git : 从入门到进阶(实战问题对策)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 计算机视觉:语义分割理论及实战

    语义分割(Semantic Segmentation)是指将一张图像分割成若干个区域,并对每个区域赋予语义标签的任务。它是计算机视觉中的一种重要技术,被广泛应用于自动驾驶、医学图像分析、地理信息系统等领域。 与传统的图像分割任务不同,语义分割不仅需要将图像分割成若干个区域

    2024年02月08日
    浏览(54)
  • [计算机入门] 了解键盘

    键盘一般可以根据按键的功能进行分区,一般分为:主键盘区、小键盘区、控制键区、功能键区、指示灯区。下面介绍键盘的各个分区按键及功能。 2.1.1 主键盘区 主键盘区又叫 打字键盘区 或 字符键区 ,具有标准英文打字机键盘的格式。共有 58 个键,包括基本字符键和部分

    2024年02月16日
    浏览(40)
  • 【计算机基础】Git系列3:常用操作

    📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨ 📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 📢:文章若有幸对你有帮助,可点赞 👍 收藏 ⭐不迷路🙉 📢:内容若有错误,敬请留言 📝指正!原创文,转载请注明出处 1、选择一个主干

    2024年02月07日
    浏览(34)
  • 计算机视觉项目实战-目标检测与识别

    😊😊😊 欢迎来到本博客 😊😊😊 本次博客内容将继续讲解关于OpenCV的相关知识 🎉 作者简介 : ⭐️⭐️⭐️ 目前计算机研究生在读。主要研究方向是人工智能和群智能算法方向。目前熟悉深度学习(keras、pytorch、yolov5),python网页爬虫、机器学习、计算机视觉(OpenCV)

    2024年02月02日
    浏览(47)
  • PyTorch深度学习实战(5)——计算机视觉

    计算机视觉是指通过计算机系统对图像和视频进行处理和分析,利用计算机算法和方法,使计算机能够模拟和理解人类的视觉系统。通过计算机视觉技术,计算机可以从图像和视频中提取有用的信息,实现对环境的感知和理解,从而帮助人们解决各种问题和提高效率。本节中

    2024年02月15日
    浏览(44)
  • 计算机视觉--距离变换算法的实战应用

    前言: Hello大家好,我是Dream。 计算机视觉CV是人工智能一个非常重要的领域 。 在本次的距离变换任务中,我们将使用 D4距离度量方法 来对图像进行处理。通过这次实验,我们可以更好地理解距离度量在计算机视觉中的应用。希望大家对计算机视觉和图像处理有了更深入的

    2024年02月15日
    浏览(49)
  • 计算机字符编码入门篇

    本文旨在为初学者提供有关计算机字符编码的基础知识,以帮助他们初步理解计算机中字符编码的概念。鉴于我个人知识的限制,如有不准确之处,欢迎指正并提供建议。 文中部分内容参考ChatGPT,在此感谢ppword的大力支持。 二进制是一种数字表示系统,它只使用两个数字:

    2024年02月08日
    浏览(37)
  • [计算机入门] 回收站

    回收站是Windows 操作系统中一个特殊的文件夹,通常在桌面上以图标的形式表示。 回收站主要作用是为了保护用户的数据免于被意外删除。使用回收站后用户可以避免错误地彻底删除文件,也可以从回收站中恢复它们。如果没有回收站,在删除文件时可能会不小心永久删除文

    2024年02月14日
    浏览(42)
  • 计算机体系架构初步入门

    🎬个人简介:一个全栈工程师的升级之路! 📋个人专栏:高性能(HPC)开发基础教程 🎀CSDN主页 发狂的小花 🌄人生秘诀:学习的本质就是极致重复! 目录 1 计算机五大组成 1.1 CPU 1.1.1 CPU的核心 1.2 CPU工作原理 2 计算机存储体系结构 2.1 存储层次 2.2 CPU访问各个存储系统的访

    2024年02月22日
    浏览(41)
  • 计算机视觉——飞桨深度学习实战-图像分类算法原理与实战

    图像分类是深度学习在视觉领域第一个取得突破性成果的任务。本章首先介绍了图像分类任务的发展历程与评价指标。然后分为三个角度分别介绍了在图像分类领域具有重要地位的三种模型。第一种是基于残差网络的模型,本章重点介绍了ResNet、DenseNet和DPN。第二种是基于T

    2024年02月02日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包