Git操作学习1
一、一些Linux相关指令
在当前目录下,创建文件并写入内容:echo "这是第一个文件">file1.txt
查看文件的内容: cat file1.txt 会显示:这是第一个文件
修改文件名:mv file.txt file4.txt 把file.txt修改为file4.txt
复制文件夹: cp -rf a(被复制的文件夹名) b(重新复制的文件夹名)
二、git的区域
git的分为工作区、暂存区、本地仓库三个状态
-
工作区(Working Directory):
- 工作区是你在电脑上看到的文件和目录,是你可以直接编辑文件的地方。
- 当你对文件进行修改时,这些更改首先出现在工作区。
- 工作区中的文件状态可以是已跟踪(tracked)或未跟踪(untracked)。已跟踪的文件是那些已经被 Git 记录的文件,而未跟踪的文件是 Git 尚未管理的文件。
-
暂存区(Staging Area/Index):
- 暂存区是一个中间区域,用于暂存即将进行提交的更改。
- 使用
git add
命令可以将工作区的更改添加到暂存区,这意味着你告诉 Git 你想要在下一次提交中包含这些更改。 - 暂存区允许你精细控制哪些改动会被包含在下一个提交中,哪些不会。
-
本地仓库(Local Repository):
- 本地仓库是位于你电脑上的 .git 目录,它包含了所有的版本历史记录,即所有的提交(commits)。
- 当你执行
git commit
命令时,Git 会将暂存区的所有内容永久保存为一个快照,这个快照就构成了一个新的提交。 - 本地仓库中的提交可以被推送到远程仓库(Remote Repository),与其他人共享。
三、git操作
1.添加和提交文件
创建仓库:git init
查看仓库的状态:git status
添加到暂存区:git add 文件名
git add *.txt (把目录下所有以txt结尾的文件都提交进仓库暂存区)
git add .(把目录下所有文件都添加进仓库暂存区)
把文件从暂存区再拿回:git rm --cached 文件名
把文件提交到仓库中(只会提交暂存区的文件而不会提交工作区的文件):git commit -m"提交的信息" (注意 m和""之间没有空格 并且是英文双引号 否则会进入git commit -m "第一次提交“ dquote>状态)
如果没有-m "提交的信息",会进入交互的界面,默认使用vim提交交互的信息(保存退出:wq 不保存退出:q!)
这样提交过后git status中就没有file1.txt的状态信息了
查看提交记录:git log
2.git reset回退版本
git reset --soft
会退到某一个版本并且保存工作区和暂存区的所有内容
git reset --hard
会退到某一个版本并且丢弃工作区和暂存区的所有内容
git reset --mixed
会退到某一个版本并且保存工作区修改内容 丢弃暂存区的修改内容 是git reset --mix的默认参数
eg创建三个文件
初始化仓库 把三个文件分别放入暂存区再提交到仓库里面,分为三次操作。
打印仓库状态git log
复制三个文件夹来回退
1.使用 --soft:工作区和暂存区的内容都不会被清空。
显示暂存区的目录:git ls-files
显示工作区的内容:ls
2.使用 --hard:工作区和暂存区都会被清空
工作区和暂存区file3.txt都没有了
3.使用 -- mixed:
工作区还有 暂存区没有了
4.误操作处理
(谨慎使用hard命令 但即使不小心使用了也没关系 git中所有操作都是可回溯的 使用git reflog命令查看操作的历史记录 找到误操作前的版本号 使用git reset --hard 版本号就可以了 )
3.使用git diff查看差异
(1)git diff
表示工作file3.txt少了一个333,多了一个pig。表示工作区和暂存区的内容之间的差异,因为我们修改的内容没有添加到暂存区。
现在把修改的内容添加到暂存区,没有输出内容,表示工作区和暂存区内容是相同的。
(2)git diff HEAD
比较工作区和版本库的差异
我们修改的内容还没有执行提交操作 所以工作区和版本库的是不同的
表示工作区和仓库的内容是不相同的
(3)git diff --cached
比较暂存区和版本库之间的差异
现在是有差异的
提交一下
返回空 说明暂存区和版本库也是一样的
也返回空 说明工作区和版本库也是一样的
(3)git diff ID1 ID2
比较两个版本库之间的差异 只要提交两个版本的id就可以了
(5)git diff ID HEAD
比较版本库和当前版本之间的差异
(5)git diff HEAD~ HEAD
HEAD~表示上一个版本 HEAD表示当前版本
除了~以外 ^也是可以的 ~2表明HEAD之前的两个版本
比较当前版本与上一个提交版本之间的 差异
(6)git diff HEAD~ HEAD 文件名
这样就只显示两个这两个版本之间指定文件的差异,其他的就不显示了。
(7)总结