使用git时候的坑

git有4个区域:

工作区(working directory) :工作区是我们能看到的区域,就是本地目录,我们在目录里面进行操作;
暂存区(stage index):git add命令就是将文件从工作区添加到暂存区;
本地版本库(repository):git commit命令就是将暂存区的文件提交到本地版本库中;
远程库:git push命令就是将本地版本库中的文件推送到远程库中。

四者的关系如下图:
这里写图片描述

下面记录的是,在使用git的时候,会踩到的坑!欢迎大家补充~

1、在使用git add <文件名>命令的时候,最好紧跟着git commit -m '操作描述'

坑:如果你上一次操作的时候,只将一些文件add到了暂存区,但是并没有commit到本地版本库中,那么你这次push的时候,会将上一次残留在暂存区的文件,一起push到远程库中;而上次操作中已经commit到本地版本库的文件,是不会影响这次的push的.

2、git reset <文件名> 撤销已经add到暂存区,但是还没有commit的文件。

如果你往暂存区中add了一些错误的文件,但是还没有commit到本地版本库。你可以使用上述命令撤销add。

3、假如本地版本库叫learngit,结构如下:
这里写图片描述
然后,第一次向空的远程库中推送文件的时候,我仅仅只是想将文件lalala.txt push到远程库中,所以我在目录/home/lanyue/learngit/fold下进行操作:

git add lalala.txt
git commit -m '添加文件lalala.txt'
git push origin master

发现,push到远程库上的是一个文件夹fold(包含lalala.txt),而不是只是一个文件lalala.txt,为什么????
因为本地的learngit目录是用git init初始化过的,它是本地版本库的根目录,而“远程库的根目录”是跟“本地版本库的根目录”保持一致的,所以你将fold/read.txt推送到远程的时候,远程库中呈现的结构是与本地版本库的根目录保持一致的。如果你只想push文件read.txt到远程库,将read.txt放在本地版本库的根目录learngit下,再add,commit,push就可以了。

4、git checkout -- <文件名>

误删工作区的文件,用本地版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

坑:会清除工作区中未添加到暂存区的改动 ,使用的时候要注意。

5、git rm -r --cache <文件名> 删除暂存区的文件(不改变工作区的该文件)

坑: 删除暂存区的该文件之前,你要确定之前在暂存区中的文件,你确实是不需要了,能被删除。因为该命令实际上的意思是,停止追踪某个文件(但是并不会改变工作区中的该文件),这样的话这个文件就没有追踪记录了。假如你在本地工作区误删了该文件(但是该文件你之前已经commit到了本地版本库中),此时你想要恢复该文件到本地的工作区,是不能用git checkout -- <文件名>恢复过来的!!!

6、git status 查看暂存区和工作区文件的状态

git status只能看到”add到暂存区但是还没有commit到本地版本库的文件”和”还没有被add到暂存区的文件(工作区的文件)”的状态,已经commit到本地版本库的文件,是看不到的。看项目历史的信息要使用git log。

“add到暂存区但是还没有commit到本地版本库的文件”的状态是“unstaged”;
“还没有被add到暂存区的文件”的状态是“untracked”;

猜你喜欢

转载自blog.csdn.net/lanyuelvyun/article/details/79857286