基础操作
1.git分区
2.commit操作
- 1.在磁盘上创建的文件只是在工作区
- 2.下一步需要把他提交到暂存区 :
git add 文件名
- 3.使用
git commit -m "commit message"
才能提交到仓库
3.各种添加操作
git add .
:会把当前仓库下所有的文件(包括子文件夹)做过的修改(增删改)都会提交到仓库中。(除在.gitignore设置的以外)。git add *
:他会忽略所有以.
开头的文件,但是子文件夹下的以.
开头的文件,是不会被忽略的。git add -u
:只会将那些已经被跟踪的文件进行更新。
4.删除操作
4.1已经添加到仓库,删除
git rm 文件名
:如果文件的修改已经被添加到仓库中了,那么可以使用git rm 文件名
直接从工作区和暂存区中直接删除,相当于执行两个操作:- 在文件夹中手动删除文件。
- 执行
git add .
操作。
4.2只添加到暂存区,删除
git rm --cached 文件名
:如果文件被修改(新增,修改内容)了,只添加到暂存区,我们想从暂存区中删掉这个文件,那么可以使用--cached
参数,这个参数不会把硬盘中的文件删掉,只会从暂存区和仓库中删掉,让这个文件处于Untracked files
状态。
5.重命名文件
5.“传统功夫”——步骤繁琐
如果想要重命名一个文件,按照正常的逻辑来。我们需要执行两个步骤:
- 在文件夹中重命名文件:
mv abc.txt 111.txt
。 - 执行
git add 111.txt
。
mv abc.txt 111.txt
git add 111.txt
5.2"点到为止"——一行代码解决
git mv abc.txt 111.txt
6.查看当前状态
- 1.使用
git status
可以查看当前暂存区的状态。 - 2.如果在工作区中添加了一个文件,那么这个文件是没有被
git
跟踪的。使用git status
可以看到以下提示:
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
111.txt
- 3.在执行完
git add
操作,已经把工作区的文件添加到暂存区了,那么这时候再使用git status
就可以看到文件已经被跟踪了,但是处于等待提交的一个状态,会看到类似以下的信息:
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: 111.txt
- 4.在
git commit
操作后,把暂存区的数据已经提交到仓库中了,这时候使用git status
可以看到暂存区是干净的,这是不需要做git add/commit
操作。会看到类似以下的提示:
On branch master
nothing to commit, working tree clean
7.版本回退
7.1查看版本
git log --pretty=oneline
或者
git log --oneline
7.2版本回退
使用git reset
命令,他有三个参数
git reset --soft [commit_id]
:会将HEAD
指针指向给定的commitid
,不会修改索引(暂存区),也不会修改工作区的数据。git reset --mixed [commit_id]
:使用reset
默认的方式。--mixed
可以省略
会将HEAD
指针指向给定的commitid
,然后也会修改索引(暂存区),这时候体现出来,就是会提示有文件没有被提交到暂存区,但不会修改工作区的数据。git reset --hard [commit_id]
:会将指针指向指定commitid
,然后会修改索引(暂存区),也会修改工作区的数据。这个命令直接就把所有的地方,都回退到之前指定的版本了。
如果想回到之前的版本继续写代码,就需要使用git reset --hard
7.3回退了但是后悔了咋办
如果版本回退了,然后又想回退到之前的版本,那么可以用git reflog
查看HEAD
指针移动的过程,可以找到对应的commit
,进行版本回退。
8.忽略文件
有一些文件我们是不想要添加被git
追踪的,比如日志文件等。这时候我们就可以通过.gitignore
文件,把不需要追踪的,放到这个文件中。忽略文件中的规则如下:
- 空行或者以
#
开头的行会被忽略。 - 支持标准的
glob
模式(简化版的正则表达式)。 - 以斜杠(
/
)开头的模式可用于禁止递归匹配。 - 以斜杠(
/
)结尾的模式表示目录。 - 以感叹号(
!
)开始的模式表示取反操作。 - 直接写文件名表示忽略这个文件。
vim 打开.gitignore
-->
`*.a`:表示所有以`.a`结尾的文件。
`!lib.a`:仍然跟踪`lib.a`,即使上一行指令要忽略,lib.a也不会被忽略。
`/TODO`:只忽略当前目录的`TODO`文件,而不忽略其他目录下的`TODO`。
`build/`:忽略build/下的所有文件。
`doc/*.txt`:忽略`doc/`下所有的`txt`文件,但是不忽略`/doc/server/notes.txt`文件。
`doc/**/*.pdf`:忽略`doc/`目录下所有的`.pdf`文件。
(glob模式:glob模式类似于shell所使用的简化版正则表达式。具体来讲,星号*匹配任意多个字符,[abc]匹配方括号内的任意单个字符(在这个例子中是a,b或者c),而问号(?)则匹配任意单个字符。在方括号中使用短划线分割两个字符(例如[0-9])的模式能够匹配在这两个字符范围内的任何单个字符(在这个例子中是0到9之间的任何数字)。你还可以使用两个星号匹配嵌套目录,比如a**z
能够匹配a/z
、a/b/z
和a/b/c/z
等。)
注意:如果之前已经把不需要跟踪的文件进行了commit
,需要先执行git rm --cached 文件名
,把文件从仓库删掉,然后再添加到.gitignore
中才能生效