进一步了解git

发布于:2025-06-19 ⋅ 阅读:(14) ⋅ 点赞:(0)

1、什么是集中式?什么是分布式?

  • SVN(集中式)

    • 单一中央仓库所有代码和历史版本集中存储在中央服务器,用户本地仅保存当前工作副本。

    • 强依赖网络:提交、查看历史等操作需实时连接服务器,离线环境下功能受限。

  • Git(分布式)

    • 全量本地仓库:每个用户的本地都是一个完整的仓库,包含全部代码和历史记录。

    • 去中心化:无需实时连接中央服务器,大部分操作(如提交、分支)可在本地完成,适合离线工作。

2、什么是版本库?

版本库又名仓库(Repository),你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”

git init
#命令把这个目录变成Git可以管理的仓库:

(1)把文件添加到版本库

版本控制系统可以告诉你每次的改动,比如在第5行加了一个单词“Linux”

(2)图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从100KB改成了120KB,但到底改了啥,版本控制系统不知道,也没法知道

(3)不幸的是,Microsoft的Word格式是二进制格式,因此,版本控制系统是没法跟踪Word文件的改动的

3、通过命令版本管理

git add file1.txt //将工作区file1.txt的改动暂存到「暂存区」
git add . //将工作区所有的改动暂存到「暂存区」
git commit -m '更改日志'#暂存区的所有内容提交到当前分支。
git log #查看所有提交记录
git log --pretty=oneline #加上--pretty=oneline参数,输出更简洁,少了时间和作者

git reflog #显示所有操作记录,包括“丢失”提交,而git log 不显示被 reset 或 rebase 丢弃的提交
git status #查看分支当前的一个状态

 可以看到你当前在哪个分支,工作区修改了哪些文件没有提交

如果有新增文件,没有add过的话文件没被 Git 跟踪,这样的话文件的话状态变成 Untracked,

如果文件已被 Git 跟踪(即之前提交过该文件,未删除或重命名)的话可以使用 git commit -a直接提交,跳过git add 

这个文件中 ervev没有被追踪过

git reset --hard 2e15d67a94a869607a3ba35bca1bd4188af72f66
#reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本

git checkout -- readme.txt
# 可以丢弃工作区的修改:

 两个命令都是回退,reset

这里解释两个词的含义,

HEAD:在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

--hard--hard会回退到上个版本的已提交状态

--soft会回退到指定版本的未提交状态

--mixed会回退到指定版本已添加但未提交的状态

通过回退操作之后,回退到了2f66版本,关掉了电脑,第二天早上就后悔了,想恢复到新版本怎么办?找不到新版本的commit id怎么办?答案是用git reflog可以查看到所有的记录

git diff HEAD #查看当前工作去与版本库里面的区别
git diff HEAD -- readme.txt 或者查看文件readme当前工作区与版本库里面的区别

bug分支

git stash
#当你接到一个修复一个代号101的bug的任务时,很自然地,你想创建一个分支issue-101来修复它,但是,等等,当前正在dev上进行的工作还没有提交
#Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作:

 git stash list
#git stash list命令看看 隐藏起来的工作区域

git stash apply:恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除

git stash pop:恢复的同时把stash内容也删了:


网站公告

今日签到

点亮在社区的每一天
去签到