git

本文深入解析分布式版本控制系统的原理,重点介绍了Git的工作流程,包括本地仓库的完整备份、操作的本地执行特性,以及工作区、暂存区和版本库的概念。阐述了文件的四种状态,演示了基本的Git命令使用,如初始化、添加、提交、状态查看等。同时,文章还详细讲解了远程仓库的使用,包括连接、推送、拉取和合并操作,以及如何处理分支,实现代码的高效管理和团队协作。

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

分布式版本控制
客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。 这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。 因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。



近乎所有操作都是本地执行
正是因为每次克隆都是对代码仓库的完整备份,所以在 Git 中的绝大多数操作都只需要访问本地文件和资源,一般不需要来自网络上其它计算机的信息。 如果你习惯于所有操作都有网络延时开销的集中式版本控制系统,Git 在这方面会让你感到速度之神赐给了 Git 超凡的能量。



工作区、暂存区、版本库
工作目录是对项目的某个版本提取出来的内容。 这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。
暂存区(index或state)是存储文件的修改的地方,以便将来所有修改完成后一起提交。
版本库就是.git文件夹(默认是隐藏的)
这里写图片描述



四种状态

  • 已追踪(tracked):表示文件已被git追踪。 初次克隆某个仓库的时候,工作目录中的所有文件都属于已跟踪文件,并处于未修改状态。初始化仓库后再添加新文件,新文件就是未追踪(需要git add一下)
  • 已修改(modified):表示修改了文件,但还没保存到暂存区中。
  • 已暂存(staged):修改后提交到了暂存区中,但还没提交
  • 已提交(committed):将暂存区中的修改提交到当前分支中

可用 git status命令查看状态


基本的 Git 工作流程如下:
1、在工作目录中修改文件。
2、暂存文件,将文件的快照放入暂存区域。
3、提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。

注意:提交时记录的是放在暂存区域的快照。 任何还未暂存的仍然保持已修改状态,可以在下次提交时纳入版本管理,所以在commit之前,用git status查看一下还有哪些变化没add。然后再commit


获取 Git 仓库
有两种取得 Git 项目仓库的方法。 第一种是在现有项目或目录下导入所有文件到 Git 中; 第二种是从一个服务器克隆一个现有的 Git 仓库。



远程仓库
现在的情景是,你已经在本地创建了一个Git仓库后,又想在GitHub创建一个Git仓库,并且让这两个仓库进行远程同步,这样,GitHub上的仓库既可以作为备份,又可以让其他人通过该仓库来协作,真是一举多得。

本地仓库连接远程仓库
git remote add zzh https://github.com/zhangZhiHao1996/learngit2.git
zzh是远程仓库的缩写,默认名称为origin,多人协助时,名字就好区分
git remote 查看远程仓库的简写



分支
当我们代码写了一半,想保存进度时,我们提交到版本库中就可以了,但是不完整的代码导致其他人从版本库中获取代码后,出现问题。
我们可以利用分支来解决,我们可以创建分支,在分支上来保存进度,在分支上可以随时提交,只要分支没有合并到主分支上,那其他人就看不到你的分支。
分支的应用场景远远不止这一个,还有很多,上面的应用场景不push到远程仓库一样可以在本地随便commit。具体可以参考下面的链接。



工作流程
首先clone远程仓库
进入本地克隆的仓库
git remote -v 可以查看远程仓库(已连接远程仓库)
在本地的git仓库中修改,提交。
push到远程仓库
fetch拉取其他人提交到远程仓库的修改,(其实就是更新本地origin/master的指向)
merge合并分支到本地的分支上。

如果你从这里克隆,Git 的 clone 命令会为你自动将其命名为 origin,拉取它的所有数据,创建一个指向它的 master 分支的指针,并且在本地将其命名为 origin/master。 Git 也会给你一个与 origin 的 master 分支在指向同一个地方的本地 master 分支,这样你就有工作的基础。

在本地的master工作,push实际上就是推送到远程仓库,并使远程仓库的master与本地的合并,fetch就是更新在本地的origin/master指针,本地master还没变,所以要merge,当我push我在本地创建的分支时(zzh分支)就报错了

fatal: ‘zzh’ does not appear to be a git repository
fatal: Could not read from remote repository.

所以要理解远程追踪(一般情况下是追踪的默认分支,master)
不管是push、fetch实际上就是在更新master(目前是这么理解的),以后有更多的git使用经验后再去理解。
目前公司(一步汽车)只用了master,并没有其它分支,团队都是在远程服务器中clone后工作,然后push、fetch、merge


配置git
我在用公司离职人员的电脑时,git还是他的配置,我用git提交还是显示他的提交,我们需要更改一下git配置
git config --global user.name “Your_Username”
git config --global user.email username@xxx.com

git命令

git init                      初始化git仓库
git add <filename>            添加内容到暂存区(从已修改状态到已暂存或从未追踪状态到已暂存状态)
git commit -m "提交信息"      提交到暂存区的快照到分支中(从已暂存状态到已提交)
git commit -a -m "提交信息"	  提交已被追踪的文件到分支中(可跳过add环节,从已修改状态到已提交状态)	
git status                    查看git状态
git diff                      查看已修改状态文件的变化
git diff --stage <filename>	  查看已暂存状态文件的变化
git log                       查看所有提交日志
git log -p -次数				  查看最近几次的提交日志,并显示每次的内容差异
git log --stat               查看所有提交日志的统计(总结性的内容)
git log --pretty=oneline     查看所有提交日志(在一行显示)
git log --pretty=format	     按定制的格式打印日志
git rm <filename>            删除已修改状态的文件

远程仓库
git remote add <shortname> <url>   添加一个远程仓库,shortname可以用来代替url
git remote -v                   查看远程仓库
git remote show <remote-name>    查看远程仓库的更多信息
git remote rename <oldname> <newname>   将远程仓库重命名   
git remote rm <remote-name>   移除远程仓库 
git fetch <remote-name>      从远程仓库拉取
git push                    将本地修改推送到远程仓库中
git clone <url>            克隆远程git仓库

撤销操作
git commit --amend - m "信息"    可以重新修改提交的信息或添加漏掉的修改
git reset HEAD <filename>    取消暂存的信息(从已暂存状态到已修改) 
git checkout -- <filename>   取消修改的信息(从已修改到状态到已追踪)或从版本库中恢复删除的文件(实际上都是从版本库中恢复的)

分支
git branch                查看所有分支
git branch -d <分支名>     删除分支
git branch <分支名>        创建新分支(并不会自动切换到新创建的分支上)
git checkout <分支名>      分支切换
git checkout -b <分支名>   创建新分支并切换到新分支上(上面两个命令的缩写)
git merge <指定分支名>     将指定分支与当前分支合并(注意指定分支依然存在,也并没有改变,只是当前分支融合了与指定分支不同的地方。所以我们要想更新master,是要切换到master分支上,再融合其他分支) 
git branch -v            查看所有分支和每个分支最后的一次提交
git branch --merged      只显示和当前分支合并过的分支
git branch --no-merged   只显示和当前分支没有合并过的分支
git fetch                从服务器上抓取本地没有的数据时,它并不会修改工作目录中的内容。 它只会获取数据然后让你自己合并(详细的可以看下面的链接)
git merge                将拉取的数据合并到本地当前分支中(远程跟踪分支合并?这点没理解完整)
git push (remote) (branch)  推送分支到远程仓库中,remote是服务器名(默认是origin),branch是分支名(默认是master)

参考链接:git Book廖雪峰的git教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值