对Git更深入了解与学习

这篇具有很好参考价值的文章主要介绍了对Git更深入了解与学习。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

0. 前言

官方文档https://git-scm.com/book/zh/v2/Git-分支-分支简介

0.1 工作区与暂存区

1.工作区(Working Directory)

       工作区就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工作区:
对Git更深入了解与学习,解决问题合集,Git,git,学习,elasticsearch

2.版本库(Repository)
       工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

       Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD
对Git更深入了解与学习,解决问题合集,Git,git,学习,elasticsearch
把文件往Git版本库里添加的时候,是分两步执行的:

  1. 第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
  2. 第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

参考:https://www.liaoxuefeng.com/wiki/896043488029600/897271968352576


1. git remote update origin

        git remote update origin它的作用是更新本地仓库中远端仓库 origin 的引用。这个命令会从远程仓库 origin 中获取最新的版本信息,让后将信息更新到本地仓库,但它并不会修改你的工作目录或当前分支

        在开发中这个命令主要就是远端新建分支,本地拉取新分支,会在本地建一个与远端名字一样的分支,并进行关联。

       我在远端拉取了一个新分支test1(源自master),但是本地执行git branch -r时并没有该分支,执行git remote update origin后,新分支就出现了。

对Git更深入了解与学习,解决问题合集,Git,git,学习,elasticsearch
对Git更深入了解与学习,解决问题合集,Git,git,学习,elasticsearch
对Git更深入了解与学习,解决问题合集,Git,git,学习,elasticsearch

2. git push origin --delete 分支名 删除远端分支

       删除远端分支之后,本地的分支并不会被删除。

fanzhen@fanzhendembp-2 straw % git push origin --delete test1
remote: Powered by GITEE.COM [GNK-6.4]
To https://gitee.com/Blue_Pepsi_Cola/straw.git
 - [deleted]         test1
fanzhen@fanzhendembp-2 straw % git branch -r
  origin/HEAD -> origin/master
  origin/dev
  origin/master
fanzhen@fanzhendembp-2 straw % git branch
  dev
  master
* test1

-- 删除本地分支命令
git branch -d test1

对Git更深入了解与学习,解决问题合集,Git,git,学习,elasticsearch

对Git更深入了解与学习,解决问题合集,Git,git,学习,elasticsearch

3. git remote

  • git remote列出当前配置的远程仓库的简称。
  • git remote -v以详细模式列出当前配置的远程仓库的简称及其对应的 URL。
  • git remote add <name> <url>添加一个新的远程仓库,并指定它的简称和 URL。
  • git remote rm <name>移除指定简称的远程仓库。
  • git remote rename <old-name> <new-name>将指定的远程仓库简称重命名为新的名称。
  • git remote set-url <name> <new-url>修改指定远程仓库简称的 URL。

对Git更深入了解与学习,解决问题合集,Git,git,学习,elasticsearch

4. git fetch

       git fetch 从远端仓库下载最新的提交记录和文件,并将这些更新存储在本地仓库中,但不会自动合并或修改你的工作目录。

       git fetch + git merge == git pull

       我在master中直接修改如下图1
对Git更深入了解与学习,解决问题合集,Git,git,学习,elasticsearch
       然后进行 git fetch
对Git更深入了解与学习,解决问题合集,Git,git,学习,elasticsearch
       在进行 git merge 注意:如果只进行git fetch代码只会进入到本地仓库但不会改变工作目录!

对Git更深入了解与学习,解决问题合集,Git,git,学习,elasticsearch

5. git status

5.1 git status 直观理解

       git status 是一个用于查看当前工作目录状态的 Git 命令,它会显示工作目录和暂存区的状态信息,告诉你哪些文件被修改了、哪些文件已经被暂存了、哪些文件还没有被跟踪等等。
对Git更深入了解与学习,解决问题合集,Git,git,学习,elasticsearch


5.2 暂存与暂存取消 (git restore)

对Git更深入了解与学习,解决问题合集,Git,git,学习,elasticsearch
       暂存前代码的变动
对Git更深入了解与学习,解决问题合集,Git,git,学习,elasticsearch

       暂存的代码文件通过命令git restore –staged <file> 来取消

fanzhen@fanzhendembp-2 straw % git git restore --staged pom.xml

       取消暂存之后,代码会变动会原来的位置
对Git更深入了解与学习,解决问题合集,Git,git,学习,elasticsearch


5.3 push之后

对Git更深入了解与学习,解决问题合集,Git,git,学习,elasticsearch


6. git reset详解 (版本回退方法之一)

       git reset是 Git 中用于移动 HEAD 指针和分支引用的命令,它可以用来撤销提交、修改分支的位置,或者将文件从暂存区移动回工作目录等操作。

6.1 git reset --soft HEAD^

       git reset --soft HEAD^该命令的作用是撤销已经commit且没有push的代码

       详解:git reset --soft HEAD^命令的含义是将当前分支的 HEAD 指向前一个提交(即父提交),但不会修改工作区和暂存区的内容。这个命令通常用于撤销上一次提交并将修改保留在工作区和暂存区中,以便你可以对上一次提交的内容进行修改后再次提交。

       执行这个命令后,你会发现 HEAD 指向了前一个提交,但工作区和暂存区的内容并没有改变。这意味着你可以在这个状态下对文件进行修改,并将这些修改重新提交到仓库中。

6.2 git reset --hard 撤销

       git reset --hard的作用是将当前分支的 HEAD 指针重置到指定的提交(commit),并且将暂存区和工作目录都重置为指定提交的状态,这样就可以撤销之前的提交和修改。

6.2.1 例子1 git reset --hard HEAD~1

 git reset --hard HEAD~1
 git push -f        

       对下面代码进行了修改,在第41行的位置增加了一段代码,这时可以从第二个图看到,已经新增了一条记录fix:测试1,这时我使用命令 git reset --hard HEAD~1,可以看到HEAD指向了fix: 测试3,接着我执行git push -f,可以看到master中的fix:测试1已消失。
对Git更深入了解与学习,解决问题合集,Git,git,学习,elasticsearch
对Git更深入了解与学习,解决问题合集,Git,git,学习,elasticsearch
对Git更深入了解与学习,解决问题合集,Git,git,学习,elasticsearch
对Git更深入了解与学习,解决问题合集,Git,git,学习,elasticsearch

6.2.2 例子2 git reset --hard <commit-hash>

       git reset --hard <commit-hash> 重置到指定提交。要注意使用git reset --hard命令会丢弃工作目录和暂存区中未提交的修改。

       还是同一个位置,我增加了代码,并push这时我通过git reset --hard cb10754a,其中cb10754afix: 测试3的code,并且执行git push -f,在第四个图中版本回退了。
对Git更深入了解与学习,解决问题合集,Git,git,学习,elasticsearch
对Git更深入了解与学习,解决问题合集,Git,git,学习,elasticsearch
对Git更深入了解与学习,解决问题合集,Git,git,学习,elasticsearch
对Git更深入了解与学习,解决问题合集,Git,git,学习,elasticsearch

6.3 后悔药

       我们通过命令git reset --hard <commit-hash>回退到了指定版本,但是这个版本之后的代码却消失了。但是我们又想回到某个版本(回退版本之后发的代码版本),这时就需要用到命令 git reflog就可以查看历史commit-hash

       这时我们执行命令git reset --hard 07f65b9,然后在强制push,可以看到图三的结果。

对Git更深入了解与学习,解决问题合集,Git,git,学习,elasticsearch
对Git更深入了解与学习,解决问题合集,Git,git,学习,elasticsearch
对Git更深入了解与学习,解决问题合集,Git,git,学习,elasticsearch

7. git diff 代码比较

       git diff 是 Git 中用于查看文件修改的命令,它可以显示工作目录、暂存区和提交历史之间的差异。
       git diff 命令可以用来比较不同提交、不同分支或者不同版本之间的文件差异。

  1. git diff 比较工作目录和暂存区的差异
  2. git diff HEAD 比较工作目录和最新提交(HEAD)的差异
  3. git diff --staged 比较暂存区和最新提交(HEAD)的差异
  4. git diff <commit1> <commit2> 比较两个提交之间的差异

比较工作目录和暂存区的差异
对Git更深入了解与学习,解决问题合集,Git,git,学习,elasticsearch

比较两个提交之间的差异其中第一个07f65b92相较于cb10754a多了图2的代码。这里显示的是被比较的代码。
对Git更深入了解与学习,解决问题合集,Git,git,学习,elasticsearch
对Git更深入了解与学习,解决问题合集,Git,git,学习,elasticsearch
反过来的结果
对Git更深入了解与学习,解决问题合集,Git,git,学习,elasticsearch

8. git revert (版本回退方法之一)

       git revert 命令用于撤销之前的提交,它会创建一个新的提交来撤销指定提交的更改,而不是直接修改历史记录。这意味着 git revert 不会改变历史记录,而是在历史记录上添加新的提交来撤销之前的更改。

1.首先通过下面命令同步远端代码,将远端代码覆盖本地,使得本地与远端代码保持一致。

git fetch origin  作用是从远程仓库 origin 中获取最新的提交记录,并将这些提交记录下载到本地仓库,但并不会自动合并或修改当前工作目录中的文件。
git reset --hard origin/master  命令将本地分支重置为远程分支的最新状态。这将会丢弃本地所有的修改.

2.修改代码并提交
对Git更深入了解与学习,解决问题合集,Git,git,学习,elasticsearch
对Git更深入了解与学习,解决问题合集,Git,git,学习,elasticsearch
对Git更深入了解与学习,解决问题合集,Git,git,学习,elasticsearch
3.执行git revert 43af9965
对Git更深入了解与学习,解决问题合集,Git,git,学习,elasticsearch

对Git更深入了解与学习,解决问题合集,Git,git,学习,elasticsearch


常用的git revert 命令

  1. 撤销单个提交:git revert <commit-hash>
  2. 撤销多个提交:git revert <commit1> <commit2> ...

9. git stash 工作目录中的修改保存到一个临时的存储区域中

       git stash 命令的作用是将当前的工作目录中的修改(包括已经暂存但尚未提交的修改)保存到一个临时的存储区域中。
       常用于以下情况:

  1. 暂时切换到其他分支工作
  2. 临时保存工作状态:当你需要处理一些紧急任务或者突发情况,但又不想提交当前的修改时,可以使用 git stash 临时保存工作状态,等处理完紧急情况后再回到这些修改。
  3. 清理工作目录 :当你的工作目录中有一些临时的修改或者实验性的代码,但不想将它们提交到版本库中时,可以使用git stash将这些修改暂时存储起来,以便稍后再使用。

       举个例子,我当前代码有修改,直接切换分支会报错,切换失败。这时我们执行git stash(图3),可以看到切换分支成功。但我们再次切换回来,返现修改的代码不见了(图4),这时我们要执行命令 git stash pop,代码也就回来了(图5)
对Git更深入了解与学习,解决问题合集,Git,git,学习,elasticsearch
对Git更深入了解与学习,解决问题合集,Git,git,学习,elasticsearch
对Git更深入了解与学习,解决问题合集,Git,git,学习,elasticsearch

对Git更深入了解与学习,解决问题合集,Git,git,学习,elasticsearch
对Git更深入了解与学习,解决问题合集,Git,git,学习,elasticsearch

10.代码合并 git merge --no-ff

git merge --no-ff dev
dev是被合并的分支,即当前在master分支输入此命令,会将dev分支的代码合并到master

效果
对Git更深入了解与学习,解决问题合集,Git,git,学习,elasticsearch


11. git cherry-pick

       git cherry-pick命令的作用是选择一个或多个提交,并将这些提交的更改应用到当前分支上。这个命令通常用于从一个分支上选择某个提交并将其应用到另一个分支上,或者在当前分支上将某些提交重新应用一遍。

       我们master分支的git记录如图1所示,而dev分支的记录如图2所示。在dev分支上执行git cherry-pick 33f2c010这个33f2c010在master上是对README.md文件的第一行增加1字段(图3)。

       在命令执行后看到图4与图5,发现master上的提交到了dev

       当然如果一次通过多个提交可以使用git cherry-pick <commit-hash1> <commit-hash2> ... 命令

对Git更深入了解与学习,解决问题合集,Git,git,学习,elasticsearch
对Git更深入了解与学习,解决问题合集,Git,git,学习,elasticsearch
对Git更深入了解与学习,解决问题合集,Git,git,学习,elasticsearch
对Git更深入了解与学习,解决问题合集,Git,git,学习,elasticsearch
对Git更深入了解与学习,解决问题合集,Git,git,学习,elasticsearch文章来源地址https://www.toymoban.com/news/detail-810915.html

到了这里,关于对Git更深入了解与学习的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 潇洒郎:gitpython 学习-解决Bad git executable, export GIT_PYTHON_REFRESH=quiet问题

    错误如下: 错误原因: 无法找到git.exe 解决办法:寻找git.exe, 然后给git.exe 添加环境变量,重启电脑 寻找git——打开git-bash , 输入where git  

    2024年02月15日
    浏览(52)
  • git深入学习笔记

    当初始化仓库的时候,会创建一个.git文件夹,其中包含以下内容: hooks 文件夹 (包含客户端服务端的钩子脚本,如pre-push,pre-merge) info 文件夹 (包含一个全局性排除文件) object 文件夹 (存储所有数据内容) refs 文件夹 (存储指向分支的提交对象的指针) config 文件 (包

    2024年01月21日
    浏览(34)
  • JavaEE 初阶篇-深入了解多线程安全问题(指令重排序、解决内存可见性与等待通知机制)

    🔥博客主页: 【 小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录         1.0 指令重排序概述         1.1 指令重排序主要分为两种类型         1.2 指令重排序所引发的问题         2.0 内存可见性概述         2.1 导致内存可见性问题主要涉及两个方面      

    2024年04月15日
    浏览(49)
  • 猫咪与Git 解决git clone 443问题

    系统配置 Ubuntu 20.04 代理为经典的猫咪logo软件 参考链接 问题描述 打算通过Git Clone一个第三方程序库时出现了下面的错误: 解决方法 首先需要知道代理给我们分配的IP与端口号, 小猫咪分配的是: 127.0.0.1:7890 所以此时需要启动git配置端口号 取消相关设置的命令是: 查看相关的配

    2024年01月25日
    浏览(40)
  • Git第十八讲 Git常见问题解决

    在使用 Git 进行版本控制时,你可能会遇到一些常见问题和错误。本文将介绍一些常见问题,并提供解决方案,以帮助你更好地使用 Git。 Git 在使用过程中可能会产生各种报错信息,这些错误信息有时可能让人感到困惑。以下是一些常见的 Git 报错和问题,以及它们的解决方案

    2024年02月08日
    浏览(47)
  • git : 常用命令合集

    git 基本组成框架:Workspace、Stage、Repository、Remote Workspace :开发者工作区,当前写代码的目录 Stage :暂存区 / 缓存区 Repository :本地仓库,本地所有的提交都会保存在这里,git 会保存好每一个历史版本 Remote :远程仓库,服务器仓库(github,gitee...) 生成 SSH 公钥和私钥,公

    2023年04月11日
    浏览(66)
  • Idea中解决Git冲突问题及merge代码消失问题【git常用tips】

    Git命令全系列 我们可以通过Idea直接从GitLab或GitHub等平台上拉取代码 如果上述的小技巧拉取不下来,尝试勾选下图的选项 2.1 演示冲突(GitLab) ①首先在GitLab中或者任意代码托管平台创建一个自己的仓库 通过上面的命令将仓库克隆下来 ②在自己的项目中,任意创建一个类 ③

    2024年01月25日
    浏览(51)
  • 解决:Git 报错 “git 未能顺利结束 (提出码 1 )“ 的问题

    其一、打开 git(或小乌龟) 来拉代码的时候,突然报错: git 未能顺利结束 (提出码 1 ) 其二、报错的显示结果为: 其一、打开 Git 工具并输入命令: git push -f origin master 其二、 Git 中输入命令的过程展示: 其三、成功解决问题后的显示结果为: 其一、哪里有不对或不合适的地

    2024年02月11日
    浏览(42)
  • git无法使用git协议clone github仓库问题解决

    提示错误: 首先登录github账号,检查本机的 ~/.ssh/id_rsa.pub 是否添加到github账号 https://github.com/settings/keys 如果没有添加,需要先添加本机的ssh公钥到github 然后再重试 git clone  如果依然报错,需要检查 ~/.ssh/known_hosts  ,找到github.com开头的行,然后删除 再次重试 git clone 此时提示需要

    2024年02月12日
    浏览(49)
  • 【git】解决网络连接问题

    ssh: connect to host github.com port 22: Connection timed out 无效 检查网络: 修改本地config,https://gist.github.com/Tamal/1cc77f88ef3e900aeae65f0e5e504794 解决 $ # This should also timeout $ ssh -T git@github.com ssh: connect to host github.com port 22: Connection timed out $ # but this might work $ ssh -T -p 443 git@ssh.github.com Hi xxxx! Y

    2024年01月20日
    浏览(29)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包