git_1 介绍,命令行操作

本文详细介绍了为何需要版本控制,对比了集中式与分布式工具git的特点,并重点讲解了Git的工作原理、GitHub在团队协作中的角色,以及常见命令行操作。涵盖了本地库管理、权限控制、历史记录和分支管理等内容。

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

【尚硅谷】Git与GitHub基础全套完整版教程(快速上手,一套搞定)_哔哩哔哩_bilibili

介绍

为什么需要版本控制?

单人开发有的时候,在开发过程中需要回退到之前的版本。好的版本管理可以大大提高开发效率。

多人开发的时候,不同人做修改 / 上传时间不统一,如果两个人同时上传,后者就会把前者的内容覆盖。普通文件服务器不能管理文件内容。

版本控制工具特性

版本控制是一种思想,版本控制工具(如 SVN、git)是对其实现。

集中式版本控制工具:如 SVN,开发人员都是客户端,而内容存储在服务器上,所有人和服务器交互。缺点在于服务器一挂,历史数据全部丢失,客户端上只能保存当前状态。(单点故障)

分布式版本控制工具:如 git ,开发人员在本地就能进行完整的版本控制。就算一个人的数据丢失了,依靠其他人的也能找回来,能有效避免单点故障。不过还是不建议本地库传数据,还是有一个远程库。

git其他优点:

  • 大部分操作在本地进行,不需要联网
  • 完整性保证(哈希算法,之后介绍)
  • 尽可能添加数据,而不是删除或修改数据
  • 分支操作快捷流畅
  • 与 Linux 命令全面兼容

版本控制工具应该具有的功能?

  • 协同修改:多个人并行不悖地修改同一份文件。
  • 数据备份:保存历史版本。
  • 版本管理:各个版本之间肯定有重叠的部分,这一部分不要重复保存。对此,SVN 采用增量式管理的方法(每次只保存修改的部分),git 采取的是文件系统快照的方法。
  • 权限控制:不同人的权限不同。git 不仅支持权限控制,还可以对团队外开发者贡献的代码进行审核。
  • 历史记录:查看修改人、时间、内容、日志等,还可以把本地文件恢复到之前的状态。
  • 分支管理:允许开发团队在工作过程中多条生产线同时推进任务,进一步提高效率。

Git 结构

AbdOT.png

Git 和代码托管中心

代码托管中心可以帮我们维护远程库

局域网内:Gitlab

外网:Github,Gitee

开发者通过 push 把代码推送到远程库。其他开发者要先 clone 把代码克隆下来,然后加入团队,然后才能把自己做的修改 push 推送到远程库。再通过 pull 把其他人的操作拉取下来。

如果需要项目成员之外的人修改代码:那个人先通过 fork 克隆一个自己的远程库,然后自己对自己的远程库做 clone、push 等操作,修改完成之后向项目开发者发送 pull request 请求,开发者审核同意后 merge 合并代码。

常用命令行操作

本地库初始化

git 的专属命令都是以 git 打头的。

在文件夹中右键 – git bash here 启动 git 命令行。

命令作用
ll当前目录下的资源
ls -lA带隐藏资源
ls -l|less分频查看
pwd当前位置路径
mkdir 目录名新建目录
git init初始化当前目录(并创建 .git 文件夹)

.git 里存放的是本地库相关的子目录和文件,不要删除和随便修改!!

设置签名

需要设置用户名和 email 地址,唯一用处就是标识开发者身份。

登录代码托管中心的账号密码(如 github、gitee)和签名的用户名、email 地址没有任何关系。

项目/仓库级别:只对当前本地库范围内有效。

系统用户级别:对当前系统的登录账号(lenovo)有效。

同时存在的话,项目/仓库级别优先级更高。但是二者必须至少有一个。

git config user.name Jingqing			//项目级别
git config user.email Jingqing@163.com	//项目级别

git config --global user.name Jingqing			//系统用户级别
git config --global user.email Jingqing@163.com	//系统用户级别

项目级别的签名:在项目文件夹下输入 cat .git/config,会发现在签名就保存在 .git 文件夹的 config 目录下。

项目级别的签名:cat ~/.gitconfig跳转到家目录查看。

开发时如果不是特殊需求,一般一个系统级别签名即可。

查看状态

git status 查看工作区、暂存区状态

no commit yet:指本地库里没有内容,因为 commit 之后是会放到本地库里的。

nothing to commit:暂存区没有内容可以提交。

changes to be committed:暂存区有内容等待提交。

提交文件

//vim 新建文件
vim good.txt
//然后输入文本文档内容,按 esc 后按两次大写 Z 保存退出。
git add good.txt
//这里提示:warning, 行末的 LF 会被替换为 CRLF,这和安装时 git 的配置有关,影响不大
git rm --cached good.txt
//撤回暂存区的内容
git commit good.txt
//提交文件,然后会提示:请输入提交的信息备注,并且显示一个 vim 编辑器
//输入注释信息后按 esc 输入 冒号+wq 退出

//但是其实这样才是更常见的用法
git commit -m "信息备注" good.txt

第一次提交会显示 root commit 根提交.

查看历史版本信息

git log查看之前的版本信息。

其中可以看到 HEAD->master(或 main),HEAD 是指向当前版本的指针,之后修改版本其实就是移动这个指针。

如果最下面一行是冒号,说明记录多到一页装不下了。

多屏显示控制方式:空格向下翻页,b 向上翻页,q退出。

git log --pretty=oneline以每次版本占一行的,漂亮的方式 显示版本信息。

git log --oneline连哈希值也会缩短(被称为局部索引值)。只能查看之前的版本信息,版本回退后不能看到将来的版本。

git reflog显示 commit 信息,以及从当前版本移动到这个版本需要多少步(如:HEAD@{1}表示差了一个版本,0表示这个版本就是当前版本)可以查看历史/未来版本。

版本前进 / 回退

本质就是移动 HEAD 指针。

方法1:首先通过 git log --oneline找到要跳转的版本的哈希值

git reset --hard Fd83ed9 // 结尾是刚才获取的哈希值,即局部索引值

不管前进后退都是这种方法。

方法2:只能后退

git reset --hard HEAD^//回退一个版本。有几个异或符号,回退几个版本。

方法3:只能后退

git reset --hard HEAD~3//回退3个版本

这个 hard 什么意思?“硬的”。
soft:修改本地库的指针。修改后输入cat good.txt 查看本地库的文件,会发现文件已经变成修改版本后的文件了。

如果输入 git status ,会发现暂存区也被 modified 了。并不是因为暂存区变了,而是本地库指针移动了,和暂存区无法对应了。

mixed:修改本地库的指针,并重置暂存区(index)。

hard:修改本地库的指针,并重置暂存区和工作区(working tree)。

删除及找回删除文件

如果是删除并提交了删除操作之后:(不管是工作区还是暂存库,只要本地库里能找回就可以)

rm aaa.txt//删除文件
git add aaa.txt//添加删除操作
git commit -m "delete aaa.txt" aaa.txt//提交删除操作

git reflog//查看历代版本及其哈希值
git reset --hard abcdef//回退到有这个文件的版本
git checkout -- aaa.txt//另一种方法

如果是删除后把删除操作添加到暂存区后:git reset --hard HEAD

比较文件差异

//工作区未提交到暂存区:
git diff a.txt//比较该文件做的改动。红色行删除,绿色行新增/修改。
//工作区提交到暂存区后:上一种方法查不出差别。
git diff HEAD a.txt//比较本地库的版本
git diff HEAD^3 a.txt//比较本地库的当前版本和倒退三个版本的区别

不带文件名就是比较多个文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

灰海宽松

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值