当前位置: 首页 > news >正文

【Tools】git使用详解以及遇到问题汇总

这里写目录标题

          • 安装git
          • 安装 TortoiseGit
          • git github gitlab, Gitee 区别
          • visual studio中使用git
          • git使用步骤
          • git命令
          • git删除某些历史提交记录
          • git找回丢失代码
          • git上传文本和二进制和gitignore
          • 删除文件删不掉的问题

安装git

https://blog.csdn.net/mukes/article/details/115693833

安装 TortoiseGit

https://download.tortoisegit.org/tgit/

ortoiseGit 只是一个 Git 的图形化客户端,提供 Windows 资源管理器中可视化的 Git 操作界面,但它依赖于 Git 本身的命令行程序 ,在文档里右键可以使用git的一些功能。

git github gitlab, Gitee 区别
  1. Git 是一个分布式(在不同ip上版本控制系统(VCS),用于跟踪文件的更改历史,特别适用于源代码管理。它允许开发者在本地和远程仓库中管理代码、跟踪代码的修改、恢复历史版本并进行并行开发
    1. 开发者在本地机器上使用 git init 初始化一个 Git 仓库,进行代码开发、提交(git commit)和分支(git branch)操作。所有操作都发生在本地 。
  2. GitHub 基于 Git 的托管平台(云端),提供远程代码仓库
    1. eg:如果一个开发者在 GitHub 上创建了一个名为 my-project 的仓库,他可以使用 git clone https://github.com/username/my-project.git 克隆该仓库到本地,进行开发后送回 GitHub。
  3. GitLab:与 GitHub 类似的托管平台,(可自托管) 企业可以将 GitLab 安装在自己的服务器上,完全控制源代码和数据。
  4. Gitee 基于 Git 的代码托管平台 , 国内的,访问速度快
visual studio中使用git

打开vs:工具->选项->源代码管理→插件选择

git使用步骤
  1. 在开始编写代码之前,首先需要创建一个 Git 仓库(repository),用于存储代码和版本历史记录。
  2. 在编写代码时,可以通过 命令将更改的文件添加到 Git 的暂存区(staging area)中。git add
  3. 通过 命令将暂存区中的更改提交到 Git 仓库中,并生成一个新的版本号(commit hash)。git commit
  4. 如果需要撤销某个提交,可以使用 命令来创建一个新的提交,该提交将会抵消先前的提交效果。git revert
  5. 如果需要合并不同分支的代码,可以使用 命令进行合并。git merge
  6. 如果需要查看代码的历史提交记录,可以使用 命令来获取详细信息。git log
  7. 如果需要将代码推送到远程仓库,可以使用 命令将本地代码推送到远程仓库。git push
  8. 如果需要从远程仓库中获取代码,可以使用 命令将远程代码拉取到本地。git pull
git命令

  1. git init :

    1. 把当前目录目录变成git可以管理的仓库,这时候你当前目录下会多了一个.git的目录,这个目录是Git来跟踪管理版本的
  2. git add readme.txt :

    1. 添加文件到 Git 缓存区
  3. git commit -m “Add hello.txt file”

    1. git commit -m 会将暂存区的内容提交到仓库,并附上提交信息 ,简明扼要地描述此次提交的目的。
    2. 会将文件的更改提交到 本地 Git 仓库。这个本地仓库是你电脑上的一个隐藏目录(通常在项目目录中的 **.git** 文件夹里) ,git push:用于将本地仓库的更改推送到远程仓库(例如 GitHub
    3. 输出中会显示你当前所在的分支
    4. git commit 会打开默认文本编辑器
    5. git commit -a -m “提交说明” : 会自动将所有已跟踪的文件的更改添加到暂存区,然后直接提交
  4. git status

    1. 当前分支状态 : Git 会告诉你当前分支和远程分支的关系(比如是否落后、领先或者是同步的)。
    2. 未暂存的更改(Unstaged Changes) : modified和deleted
    3. 暂存区的更改(Staged Changes),待commit状态
    4. (Untracked Files, 创建了新文件,但这些文件还没有被 Git 跟踪
    5. git status --ignored 来查看被忽略的文件
  5. git log : 列出所有的提交记录 ,每次记录的版本号,时间,作者等,git reflog会列出回退之后的最新版本

  6. **git rebase -i HEAD~n 😗*查看最近n次提交,把pick改为drop就可以删掉这个记录

  7. pick cbcc08b 初始化网络完成

    1. pick 989cd25 半成品
    2. pick c0904ee master提交测试
    3. pick 563959c vs里git提交测试
    4. drop 11160ac 删除1.txt 修改ignore,把每个项目下的x64文件夹也忽略
    5. drop 8bec162 提交gitignore文件
  8. **git diff**:显示当前文件和暂存区或历史提交之间的差异,帮助用户了解文件的具体改动

  9. 版本回退

  10. git reset --hard HEAD^ 几个^就是往前回退几个版本

  11. git reset --hard +版本号回退至对应版本

  12. 同步: 将本地仓库与远程仓库保持一致

  13. 这个过程包括将本地的更改推送到远程仓库,以及从远程仓库获取其他人提交的最新更改

  14. git branch 查看分支

  15. git branch -r 查看远程分支

  16. git branch -a 查看本地和远程所有分支

  17. **git branch <branch-name>**:创建一个新的分支,用于开发新的功能或修复问题,避免影响主分支。

  18. **git checkout <branch-name>**切换到指定分支,Git 会更新工作目录的内容为该分支的最新提交。

  19. git checkout -b 创建并切换到新分支

  20. git checkout 切换到某个特定的提交记录

  21. **git merge <branch-name>**合并是将一个分支的更改合并到另一个分支中,而不改变已有提交的历史记录。它会创建一个新的合并提交(merge commit)来记录这次操作。

  22. 变基是将一个分支的提交历史重新应用到另一个分支的最新提交之后。变基会重写历史记录,将变基分支的提交移到基准分支的最新提交之后。

  23. git checkout feature# 切换到 feature 分支

  24. git rebase main # 将 feature 分支的基准改为 main 分支的最新提交

  25. **git branch -d <branch-name>**:删除本地分支。在确保分支已被合并或不再需要时使用。

  26. git push origin <分支名>git push origin feature-xyz 会将 feature-xyz 分支推送到远程仓库的 feature-xyz 分支。

  27. git fetch origin <远程分支名>:<本地分支名> 拉取远程分支并创建本地分支:

  28. git diff <分支1> <分支2> 比较分支

  29. **git push**:将本地仓库的提交推送到远程仓库。常用于与团队共享代码或备份代码

  30. **git pull**:从远程仓库拉取最新的更改并与本地代码库合并。适用于同步远程仓库中的最新更新

  31. **git clone <repository-url>**:从远程仓库克隆代码库到本地。会复制所有的版本历史,使本地仓库成为远程仓库的副本

git删除某些历史提交记录

1、 使用 git loggit reflog 查找你想要开始的提交的位置。例如,假设你想修改最近 5 次提交,可以使用以下命令

git rebase -i HEAD~5

把不想要的提交记录改为从pick->drop。然后wq保存。显示:

git status 会显示所有有冲突的文件,通常会标记为 Unmerged paths。 :

git找回丢失代码

1、git reflog: Git 记录的所有分支变动历史,即使丢弃了某些提交,你可以通过 reflog 找回之前的状态。

出现这个错误是因为你的 Git 当前有未解决的合并冲突或未完成的 rebase 操作。在你解决这些问题之前,Git 不允许你切换到其他分支或提交。

git上传文本和二进制和gitignore

文本文件的提交
文本文件(如 .txt.md.html.css.js 等)在 Git 中会被当作“纯文本”处理,Git 针对文本文件做了一些特殊优化:

  • 差异化存储:Git 在提交文本文件时只存储文件内容的差异(增量),这样可以节省存储空间,便于跟踪文件的变化。
  • 合并和冲突解决:在多人协作中,如果多个人修改了同一个文本文件的不同部分,Git 可以较好地合并这些改动,并在发生冲突时提示,方便手动解决。
  • 查看历史:Git 可以轻松展示文本文件的修改历史,帮助开发者追踪内容变化。

二进制文件的提交

二进制文件(如 .jpg.png.exe.zip.pdf.doc .ipch 等)在 Git 中的处理方式不同于文本文件:

  • 不做差异化存储:二进制文件在每次修改时,Git 会将整个文件存储为一个新的对象,而不是只存储差异(因为二进制文件难以分辨具体内容的变化)。
  • 合并困难:如果多人协作修改同一个二进制文件,Git 无法自动合并不同版本。这种情况下,开发者通常需要选择使用某个版本或手动替换。
  • 查看历史限制:由于二进制文件无法显示文本内容,因此在查看历史时,Git 无法提供具体的改动内容,只能显示某个二进制文件被更新的记录。

所以要避免频繁更新大二进制文件:二进制文件的每次更新都会导致版本库快速膨胀

可以要把本地工作目录下的不需要提交的文件添加到.gitignore文件里,.gitignore 文件是 Git 中用于指定 忽略规则 的文件,告诉 Git 在提交时应忽略哪些文件或文件夹,避免它们被添加到仓库中。.gitignore 文件通常位于项目根目录下,一些没必要且大的二进制文件和项目的Debug文件要添加进去 ,1,用git管理工具右键添加,2,把文件或者文件夹添加到.gitignore文件里保存

eg ..vs 文件夹是 Visual Studio 在项目目录下创建的一个临时文件夹,用于存储开发环境的用户特定设置、调试信息和其他缓存数据, 生成大量缓存文件

eg。

放到根目录是为了一个ignore文件管理所有的,防止ignore文件过多。

提交时候忽略了一些文件,提交后发现出现了这个 .gitignore

**.gitignore** 文件需要提交一次吗?
是的,建议提交 .gitignore 文件到版本库中,这样团队中的其他人也可以共享同样的忽略规则,保持代码库的一致性。

删除文件删不掉的问题

今天装 TortoiseGit 后向重装,卸载之后删除文件夹发现:

一般会先检查是否真的有程序或者文件打开了没有关闭,但是我们在桌面或者任务管理器中找不到该程序。

方法:

explorer.exe通常被称为 Windows 资源管理器(Windows Explorer)。它负责管理和显示文件夹、文件、磁盘驱动器以及其他系统资源的图形用户界面(GUI) 。 位于系统的 C:\Windows\explorer.exe 路径下

但是图中位于D:\git下,把这两个进程结束掉(虽然显示无法结束),结束后桌面图标全没了。 当结束 explorer.exe 进程时,实际上是结束了 Windows 资源管理器。资源管理器控制着桌面图标、任务栏和文件浏览器等。因此,当 explorer.exe 被终止后,桌面和任务栏上的图标都会消失。

此时ctrl+shift+esc打开任务管理器重新运行explorer即可,

在这里运行:

之后全都恢复,文件夹也可以删除了。

相关文章:

  • 【iOS】Tagged Pointer
  • 从0开始学习大模型--Day06--大模型的相关网络架构
  • 【Bluedroid】HID DEVICE 连接的源码分析
  • LWIP的ICMP协议
  • C++模板梳理
  • 网络编程(一)网络编程入门
  • go-gin
  • Redis--常见数据类型List列表
  • LOJ 6346 线段树:关于时间 Solution
  • 深入解析STM32中断机制:从原理到外部中断实战
  • 轻量级高性能推理引擎MNN 学习笔记 01.初识MNN
  • AJAX原理
  • jenkins built-in节点如何删除
  • python 新闻 api + react js 客户端。
  • 使用Visual Studio将C#程序发布为.exe文件
  • MiniMind:3块钱成本 + 2小时!训练自己的0.02B的大模型。minimind源码解读、MOE架构
  • 《Redis应用实例》学习笔记,第二章:缓存二进制数据
  • OceanBase 4.3版本向量数据库部署
  • OceanBase性能关键参数配置最佳实践
  • 《Effective Python》第1章 Pythonic 思维详解——深入理解 Python 条件表达式(Conditional Expressions)
  • 专访|茸主:杀回UFC,只为给自己一个交代
  • 视觉周刊|纪念苏联伟大卫国战争胜利80周年
  • 三大股份制银行入局AIC,一级市场再迎“活水”
  • 网红街区如厕难,如何多管齐下补缺口?
  • 告别户口本!今天起婚姻登记实现全国通办
  • 习近平会见古巴国家主席迪亚斯-卡内尔