之前使用git都是使用最常用的几条指令,包括.gitignore用的也是最简单的一些,其实很多细节都没有注意,导致很多提交其实都是无价值的,或者杂乱的,最近因为改别人项目的bug,所以想标记出来很清楚,就发现了很多问题,在此记录更深刻的git学习和使用。

.gitkeep

git对于没有文件的文件夹是不会跟踪加入的,但我们往往又希望上传文件夹,但是不希望里面有文件,比如upload文件夹,里面是存用户上传的图片的,不希望里面有文件,因为用户会传很多,这些和代码无关,但是又希望有upload这个文件夹,这样部署过后就可以直接使用,所以这时候就采取了文件夹里面放一个.gitkeep文件,保证该文件夹会被跟踪上传

git状态

1、未被跟踪的文件(untracked file)

2、已被跟踪的文件(tracked file)

  • 被修改但未被暂存的文件(changed but not updated或modified)
  • 已暂存可以被提交的文件(changes to be committed 或staged)
  • 自上次提交以来,未修改的文件(clean 或 unmodified)

有一篇文章讲这些状态很清楚

.gitignore生效

经常会出现git add后使用git status发现缓存区里有不需要的内容,这个时候开始修改.gitignore文件,发现怎么都不好用,git status后该文件还是存在,原因就是只有当该文件处于untracked file阶段时才可以被忽略掉,否则被tracked file之后无论哪个状态都是无法被忽略的,所以最好在最开始就把gitignore写好。如果想被忽略就代表着要从之前的版本中删除,这个时候需要用以下指令

git rm --cached filename

然后就会发现.gitignore生效了

git reset

git reset 1234

上面的代码是将版本恢复到相应的版本号处,但是代码还是现在改动的没有变化

git reset --hard 1234

上面的代码是将版本恢复到相应的版本号处,同时代码也回到了那个版本号下的代码变化回去了

删除的文件

在本地删除或者忽略的文件,如果在远程仓库存在,那么在push后会消失。 在远程仓库删除或者忽略的文件,如果在本地存在,那么pull后会发生冲突由用户来解决

results matching ""

    No results matching ""