Git介绍和基础命令解析

Git基本操作指令

工作区和暂存区

Git管理的文件分为:工作区(本地的文件夹),版本库(.git文件夹),版本库又分为暂存区stage和暂存区分支master(仓库)

工作区>>>>暂存区>>>>仓库

git add把文件从工作区>>>>暂存区,git commit把文件从暂存区>>>>仓库

git diff查看工作区和暂存区差异

git diff --cached查看暂存区和仓库差异

git diff HEAD 查看工作区和仓库的差异

git add的反向命令git checkout,撤销工作区修改,即把暂存区最新版本转移到工作区

git commit的反向命令git reset HEAD,就是把仓库最新版本转移到暂存区

管理修改

Git跟踪并管理的是修改,而非文件

现在有一个文件a.txt

你修改了a.txt,并使用git add a.txt把它存进了暂存区

此时你又对a.txt进行了修改

然后使用git commit进行了提交

Git管理的是修改,当你用git add命令后,在工作区的第一次修改被放入暂存区,准备提交,但是,在工作区的第二次修改并没有放入暂存区,所以,git commit只负责把暂存区的修改提交了,也就是第一次的修改被提交了,第二次的修改不会被提交。

提交后,用git diff HEAD -- a.txt命令可以查看工作区和版本库里面最新版本的区别:

撤销修改

丢弃工作区文件的修改

如果你在本地工作区修改了某个文件,但是你突然不想要这些修改了,你可以通过git checkout -- file命令来撤销修改,他会撤销你的所有修改

存在两种情况,首先假设你要撤销的是a.txt

  • 如果a.txt在你修改前已经从工作区被添加到暂存区了,此时你修改完了以后,要进行撤销,那就会被撤销回到暂存区的状态
  • 如果a.txt没有被添加到暂存区,那就会被回退到版本库的最新状态

总的来说,就是会回退到最近的一次git commitgit add时的状态

丢弃暂存区文件的修改

如果你改了a.txt文件的内容,并git add进暂存区了,此时你想把暂存区的修改撤销掉(unstage),可以用git reset HEAD <file>

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

shell 复制代码
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

	modified:   a.txt
	
$ git reset HEAD a.txt
Unstaged changes after reset:
M	a.txt


$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

	modified:   a.txt

$ git checkout -- a.txt

$ git status
On branch master
nothing to commit, working tree clean

相当于利用两次撤销,将a.txt的内容变成了最新一次commit进仓库的状态

丢弃版本库的修改

如果你不小心把不想修改的内容提交到了仓库,那你就只能使用版本回退了,回退到上一个版本

shell 复制代码
git log #可以显示从最近到最远的提交日志
git log --pretty=oneline #可以将每条简化为一行

commit id即版本号,用SHA哈希出来的一个值,用十六进制表示

Git中用HEAD表示当前版本,上一个版本是HEAD^,上上个版本是HEAD^^

所以如果想回退到上一个版本

shell 复制代码
git reset --hard HEAD^
#或者是
git reset --hard xxxxx#后面写版本号,取前几位就可以,git会自己找

此时,git log看到的版本也是会回到上一个版本所能看见的

现在的操作相当于"回到过去",如果你想回到未来,但是你又忘了之前的版本号是多少,你可以用

shell 复制代码
$ git reflog
e475afc HEAD@{1}: reset: moving to HEAD^
1094adb (HEAD -> master) HEAD@{2}: commit: append GPL
e475afc HEAD@{3}: commit: add distributed
eaadf4e HEAD@{4}: commit (initial): wrote a readme file

进入git log或者git reflog后,按q可以退出

删除文件

rm命令仅仅是删除本地工作区的文件,相当于一次对文件的修改,如果想同步给版本库的文件,就想要git addgit commit

git rm命令等同于rm + git add,此时只想要git commit即可完成版本库的同步

git rm -f,删除工作区和暂存区文件,并且将这次删除放入暂存区,主要是解决文件被add进暂存区,但是没有commit到仓库,导致暂存区和仓库存在不同,此时直接使用git rm就无法执行,可以添加-f的参数,强制删除

git rm --cached , 删除暂存区文件,但保留工作区的文件,并且将这次删除放入暂存区,此时使用git status

shell 复制代码
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        deleted:    test.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        test.txt

git commmit以后仓库内的就被删除了,但是本地工作区还是保存的,而且不会被追踪

相关推荐
GoppViper1 小时前
golang学习笔记29——golang 中如何将 GitHub 最新提交的版本设置为 v1.0.0
笔记·git·后端·学习·golang·github·源代码管理
m0_464832362 小时前
Linux服务器上安装git lfs命令
git
贩卖纯净水.10 小时前
白月光git
git·github
爱吃瓜的猹z14 小时前
git reset 几点疑问
git·源代码管理
悟空201620 小时前
001、Git开发流程规范
git
Li小李同学Li20 小时前
git学习【持续更新中。。。】
git·学习·elasticsearch
晨春计1 天前
【git】
android·linux·git
念幽1 天前
Git常用命令
git
神技圈子1 天前
【git系列】git中的那些迷惑的术语以及概念详解
git
benben0441 天前
Photoshop使用方法大全
git