Git 知识梳理

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

Git 知识梳理

命令学习:Learn Git Branching

Git 命令大全:Git 大全

版本控制

什么是版本控制?

版本控制是一种记录一个或若干个文件内容变化,以便将来查阅特定版本修订情况的系统。关键时刻,可以回退版本。

除了项目源代码,你可以对任何类型的文件进行版本控制。

为什么需要版本控制?

  • 版本控制可以让你将某个文件回溯到之前的状态,甚至将整个项目都回退到过去某个时间点的状态。
  • 你还可以通过提交的历史记录来比较文件的变化细节,查出最后是谁修改了哪个地方,从而找出导致怪异问题出现的原因,又是谁在何时报告了某个功能缺陷等等。

三大版本控制系统

本地版本控制系统

方便个人管理项目文件。

大多都是采用某种简单的数据库来记录文件的历次更新差异。

集中化的版本控制系统

为解决开发者协同合作问题而生。

都有一个单一的集中管理的服务器,可以保存所有文件的修订版本,协同工作的开发者们都可以通过客户端连到这台服务器,取出最新的文件或者提交更新。

有两个问题:

  1. 单点故障: 中央服务器宕机,则其他人无法使用;如果中心数据库磁盘损坏又没有进行备份,你将丢失所有数据。本地版本控制系统也存在类似问题,只要整个项目的历史记录被保存在单一位置,就有丢失所有历史更新记录的风险。
  2. **必须联网才能工作:**受网络状况和网络带宽影响。
分布式版本控制系统

为解决上面的问题面世,比如:Git

有以下几个优点:

  1. 这类系统,客户端并不只提取最新版本的文件快照,而是把代码仓库完整地克隆下来。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个克隆出来的本地仓库恢复。因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。
  2. 可以不用联网工作,因为每个人的电脑上都是完整的版本库。
  3. 强大的分支管理功能。

在开发中,常用的 git 开发操作流程是怎样的?

在使用 Git 进行开发时,常用的操作流程包括:

  1. 创建 Git 仓库:使用 git init 命令初始化一个新的 Git 仓库。也可以使用 git clone 命令克隆一个远程仓库到本地。

  2. 添加文件到暂存区:使用 git add 命令将修改的文件添加到 Git 的暂存区中。

  3. 提交修改:使用 git commit 命令提交修改。可以使用 -m 参数指定提交的注释信息。

  4. 分支操作:使用 git branch 命令创建、删除、查看分支。使用 git checkout 命令切换分支。

  5. 合并分支:使用 git merge 命令将一个分支合并到当前分支。

  6. 推送修改:使用 git push 命令将本地修改推送到远程仓库。

  7. 拉取修改:使用 git pull 命令从远程仓库拉取最新修改。

  8. 查看修改历史:使用 git log 命令查看提交历史。

  9. 撤销修改:使用 git reset 命令撤销某次提交。可以使用 --soft 参数保留修改到暂存区,使用 --mixed 参数保留修改到工作区,使用 --hard 参数彻底删除修改。

  10. 标签操作:使用 git tag 命令创建、删除、查看标签。标签可以用于标记某个版本,便于后续查找和发布。

Git 快速入门

Git 有哪三种状态?

  1. 已提交(committed):数据已经安全的保存在本地数据库中。
  2. 已修改(modified):已修改表示修改了文件,但还没保存到数据库中。
  3. 已暂存(staged):表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。

Git 关联 idea 文件颜色的意思?

  1. 红色(red),未加入版本控制
  2. 绿色(green),已经加入版本控制暂未提交
  3. 蓝色(blue),加入版本控制,已提交,有改动
  4. 白色(white),加入版本控制,已提交,无改动
  5. 灰色(grey):版本控制已忽略文件

Git 项目的三个工作区域

  1. 工作目录(working)
  2. 暂存区域(index)
  3. Git 仓库(HEAD)

working =add=> index =commit=> HEAD =push=> 远程仓库

Git 知识梳理,# 开发工具篇,git

基本的 Git 工作流程

  1. 准备仓库:创建或从服务端克隆一个仓库。
  2. 搬砖:在工作目录中添加、修改代码。
  3. 暂存(git add):将需要进行版本管理的文件放入暂存区域。
  4. 提交(git commit):将暂存区域的文件提交到Git仓库。
  5. 推送(git push):将本地仓库推送到远程仓库,同步版本库。
  6. 获取更新(fetch/pull):从服务端更新到本地,获取他人推送的更新,与他人协作、共享
  • 在工作目录中修改文件。 – 即写代码

  • 暂存文件,将文件的快照放入暂存区域。 – 即表示已修改,文件变蓝色

  • 提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录中。

文件的快照:就是指 文件的数据。是 Git 版本控制的核心。

查看 Git 版本号

指令:git -- version

Git的配置文件

Git有三个主要的配置文件:

三个配置文件的优先级是 ① < ② < ③

① 系统全局配置(–system):包含了适用于系统所有用户和所有仓库(项目)的配置信息,存放在 Git 安装目录下:C:\Program Files\Git\etc\gitconfig

② 用户全局配置(–global):当前系统用户的全局配置,存放用户目录:C:\Users\[系统用户名]\.gitconfig

③ 仓库/项目配置(–local):仓库(项目)的特定配置,存放在项目目录下:.git/config

#查看git配置
git config --list
git config -l
 
#查看系统配置
git config --system --list
 
#查看当前用户(global)全局配置
git config --list --global
 
#查看当前仓库配置信息
git config --local  --list

什么是 Git Flow

Git Flow 是一种基于 Git 版本控制工具的分支管理工作流程,它定义了一套完整的分支模型,包括主分支、开发分支、功能分支、修复分支等,旨在优化团队协作、版本发布和代码质量等方面的工作流程。

常用操作

获取 Git 仓库

有两种方法:

  1. 在当前项目目录中初始化仓库:

    右键点击 Git Bash Here 进入窗口运行 git init 命令,该命令将创建一个名为 .git 的子目录,代表已经加入版本控制。

  2. 从一个服务器(远程仓库)克隆一个现有的 Git 仓库:

    进入希望项目存放的目录地址,运行 git clone [url] 自定义文件夹名称 命令。

    注意,使用Git命令克隆的方式可以和 原项目 随时保持更新同步。

  3. 克隆本地仓库

    git clone /path/to/repository

添加和提交

添加、删除、改名:

# 添加指定文件到暂存区,包括被修改的文件
$ git add [file1] [file2] ...
 
# 添加当前目录的所有文件到暂存区
$ git add .
 
# 删除工作区文件,并且将这次删除放入暂存区
$ git rm [file1] [file2] ...
 
# 改名文件,并且将这个改名放入暂存区
$ git mv [file-original] [file-renamed]

提交:

  • git commit -m "代码提交信息" – 此时已提交到了本地仓库中
初始化一个 Readme文件
touch README.md
切换分支

git checkout <branch>

推送
  • 查看本地 Git 仓库已经关联的远程仓库:git remote -v

  • 关联远程仓库:git remote add origin <server>

  • 推送分支:git push origin master[分支名称]

origin 是远程仓库的名称,<server> 是远程仓库的 URL。

删除远程仓库关联

命令:git remote remove origin

IDEA 使用更新项目操作

在使用 IntelliJ IDEA 进行 Git 操作时,更新项目时会出现如下两个选项:

  1. Update Project 使用的是普通合并(merge)的方式,它会将远程分支上的最新代码拉取到本地,然后将本地分支上的代码与远程分支上的代码合并。如果有冲突,需要手动解决冲突并提交代码。这种方式会生成一个新的合并提交,保留了本地分支和远程分支的所有提交历史。
  2. Update Project with Rebase 使用的是变基(rebase)的方式,它会将本地分支上的所有提交临时保存,然后将远程分支上的最新代码拉取到本地,并用变基的方式将本地分支上的所有提交重新基于远程分支的最新提交。如果有冲突,需要手动解决冲突并提交代码。这种方式会生成一系列新的提交,覆盖了本地分支的所有提交历史。

需要注意的是,使用变基操作会改变提交历史,可能会影响其他人的开发分支。因此,在多人协作开发中,建议使用普通合并(merge)操作,只在特定情况下使用变基操作,例如在开发分支上进行调整和整理提交历史。

在选择更新方式时,可以根据实际情况选择合适的选项。如果当前分支与远程分支的差异较小,可以使用普通合并;如果差异较大,或者需要整理提交历史,可以使用变基操作。无论选择哪种方式,都需要谨慎处理未提交的修改,以免造成代码冲突和数据丢失。

问题

代码提交到本地仓库或者推送到远程仓库的话,还能回滚吗?能回滚的话,回滚命令是什么?

如果你已经将代码提交到本地仓库或远程仓库,你仍然可以回滚代码更改。回滚操作可以还原到之前的提交状态,撤销先前的更改。

下面是一些常用的回滚命令:

  1. 回滚到上一次提交:

    git revert HEAD
    
  2. 回滚到指定提交(使用提交哈希值):

    git revert <commit-hash>
    
  3. 回滚到指定提交并将后续提交合并为一个新的提交:

    git revert <commit-hash>..HEAD
    

这些命令会创建一个新的提交,该提交会撤销指定的更改。请注意,这些命令会创建一个新的提交,而不是直接删除或修改历史提交记录。

如果你要回滚到之前的提交,并且希望删除回滚之后的提交记录,可以使用 git reset 命令。但是,请注意,git reset 命令会修改历史提交记录,因此在使用之前请确保你了解其影响。

如果你已经将代码推送到远程仓库,回滚后可能需要使用 git push 命令将回滚提交推送到远程仓库。

请注意,回滚操作是不可逆的,因此在执行回滚前,请确保你已经备份了重要的更改或提交。对于使用 Git 的版本控制系统,强烈建议在进行敏感操作之前,先熟悉 Git 的基本操作和相关命令,并在安全的环境中进行测试。

代码已经提交并推送到了远程仓库,此时撤销提交会发生什么?

如果你已经将代码提交并推送到远程仓库,但后来想要撤销该提交。以下是一些可能的情况:

  1. 提交还没有被其他人拉取(fetch/pull):
    • 如果你提交的代码还没有被其他人拉取到远程仓库,你可以使用 git resetgit revert 来撤销提交。这不会影响其他人的工作。
    • 使用 git reset 会将HEAD指针移动到以前的提交,将历史记录修改为不包含该提交。但是,这会删除提交的历史记录,可能会导致冲突。
    • 使用 git revert 会创建一个新的提交,该提交撤销了以前的提交,保留了历史记录。这是更安全的方法,因为不会破坏历史记录。
  2. 提交已经被其他人拉取:
    • 如果你的提交已经被其他人拉取到远程仓库,撤销提交可能会引发问题,因为其他人可能已经构建了基于你的提交的工作。在这种情况下,最好不要直接撤销提交,而是与团队协商,找出一个解决方案。
  3. 其他团队成员修改代码后并推送到远程仓库:
    • 在这种情况下,如果你强行撤销自己的提交并强制推送到远程仓库,会导致其他人的工作受到影响,可能会引发冲突和一致性问题。
    • 如果一定要撤销已推送的提交,最好与团队一起协商解决,以避免引发问题。

已经推送到远程仓库,但还没被人拉取的情况

如果你的提交已经被推送到远程仓库,但尚未被其他人拉取,你可以使用以下步骤来撤销该提交:

注意: 这个过程将修改你的本地历史记录,因此如果你正在与其他人协作,最好与他们协商并确保其他人知道你要执行这个操作。

  1. 查看提交历史: 使用以下命令查看提交历史,找到你想要撤销的提交的哈希值(SHA-1):

    git log
    
  2. 撤销提交: 使用以下命令来撤销提交,将 <commit-hash> 替换为你想要撤销的提交的哈希值:

    git reset --hard <commit-hash>
    

    这将将你的 HEAD 指针和工作目录还原到指定提交的状态,同时删除了该提交之后的所有提交。

  3. 强制推送到远程仓库: 由于你已经修改了历史记录,你需要使用 --force(或-f)选项来强制推送到远程仓库:

    git push --force origin <branch-name>
    

    其中,<branch-name> 是你当前工作的分支名称。

请注意,强制推送可能会破坏其他人的工作副本,因此在执行此操作之前,请确保你已与团队协商,以确保不会引发问题。

此外,由于这个操作可能会删除历史记录,只有在你确定没有其他人在使用这个历史记录或有备份的情况下才应该执行。文章来源地址https://www.toymoban.com/news/detail-766365.html

学习参考

  • git - 简明指南:git - the simple guide - no deep shit! (rogerdudler.github.io)
  • 开发不害怕——两种常见的撤销提交的方式(Git) - 掘金 (juejin.cn)

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

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

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

相关文章

  • C/C++开发,关闭vscode中的插件git工具

    安装git后,有git配置的路径,vscode会通过git进行检测。关闭vscode中的插件git工具方法如下:

    2024年02月11日
    浏览(46)
  • 12.(开发工具篇vscode+git)vscode 不能识别npm命令

    问题描述: 解决方式: (1)右击VSCode图标,选择以管理员身份运行; (2)在终端中执行get-ExecutionPolicy,显示Restricted,表示状态是禁止的; (3)这时执行set-ExecutionPolicy RemoteSigned; (4)此时再执行get-ExecutionPolicy,显示RemoteSigned,则表示状态解禁,可以运行 (5)重启

    2024年02月16日
    浏览(35)
  • 18.(开发工具篇Gitlab)Git如何回退到指定版本

    首先: 使用git log命令查看提交历史,找到想要回退的版本的commit id. 第一步:git reset --hard 命令是强制回到某一个版本。执行后本地工程回退到该版本。 第二步:利用git push -f命令强制推到远程 如下所示: 优点:干净利落,回滚后完全回到最初状态。 缺点: (1)需要找到你要

    2024年02月04日
    浏览(57)
  • Git 管理工具 SourceTree 的使用(上手简单,不熟悉git命令的开发者必用)

    目录 一、SourceTree 概述 二、SourceTree 使用方法 1. 克隆 Git 仓库至本地 2. 推送本地的文件至远程仓库 3. 创建/切换/合并分支 4. 版本回退         SourceTree 是一款免费的 Git 和 Hg 客户端管理工具,支持 Git 项目的创建、克隆、提交、push、pull 和合并等操作。它拥有一个精美简

    2024年02月01日
    浏览(53)
  • 【linux基础(七)】Linux中的开发工具(下)--make/makefile和git

    💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:Linux从入门到开通⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学更多操作系统知识   🔝🔝 如果你不知道什么是vim和gcc 请先阅读这两篇文章后再学习本节: 文章一: vim和yum 文章二: gcc/g++ 本章重点: 本篇文章会着重讲

    2024年02月08日
    浏览(34)
  • 【手写数据库toadb】02 开发数据库内核准备阶段-git工具使用

    ​ 专栏内容 : 手写数据库toadb 本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者。 本专栏会定期更新,对应的代码也会定期更新,每个阶段的代码会打上tag,方便阶段学

    2024年01月24日
    浏览(44)
  • Linux中的开发工具(yum,vim,gcc/g++,gdb,Makefile,git)

    yum(Yellow dog Updater,Modified)是Linux下非常常用的一种 包管理器 。主要应用在Fedora,RedHat,Centos等发行版上。 和手机上的软件商店类似,我们可以使用 yum 来下载各种我们想要的软件包。使用 yum 时必须联网。 yum 基于 RPM 包管理,能够从指定的服务器自动下载 RPM 包并且安装

    2024年02月08日
    浏览(43)
  • mac升级Monterey12.6之后出现 git命令需要使用命令行开发者工具 安装选项的问题处理

    今天刚升级了最新的系统,升级后发现idea、webstorm等等需要git的全部无法使用了,总是弹出git命令需要使用命令行开发工具,提示让我安装,故以为是版本升级原因,那就安装吧,安装之后打开idea,又提示要安装,这。。。  好吧我再安装一次,然后我修改项目代码后,准备

    2024年02月11日
    浏览(43)
  • 【Linux】Linux环境基础开发工具的使用 ———(yum、vim、gcc&g++、gdb、make/Makefile、进度条 、git)

    (꒪ꇴ꒪(꒪ꇴ꒪ )🐣,我是 Scort 🎓 🌍博客主页:张小姐的猫~江湖背景🌍 快上车🚘,握好方向盘跟我有一起打天下嘞! 送给自己的一句鸡汤🤔: 🔥集中起来的意志可以击穿顽石🔥 🙏作者水平很有限,如果发现错误,可在评论区指正,感谢🙏 🎉🎉欢迎持续关注!🎉🎉

    2024年01月16日
    浏览(50)
  • 开发工具——IDE安装 / IDEA子module依赖导入失败编译提示xx找不到符号 / IDEA在Git提交时卡顿

    近期换了工作电脑,公司的IT团队不够给力,不能复制电脑系统,所以又到了需要重装IDE配置开发环境的时候了;在安装和导入Java编译器IDEA的时候遇到一些\\\"棘手\\\"问题,这里整理下解决方法以备不时之需; 按照顺序 安装和配置环境; JDK6/JDK7/JDK8 下载和环境变量:JDK8下载安装

    2024年02月11日
    浏览(52)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包