git相关的其他命令
在之前的两篇文章中简单介绍了与git相关的基础知识,如果想要熟练和快速运用git,还需要熟悉git的其他相关的命令。这一篇文章就是关于git的一些常用的“其它命令”
忽略文件
如果有不想要某些文件被纳入git的管理,可以在git中忽略掉这些文件。这时,我们需要创建一个名为.gitignore
的文件,在这个文件中写入想要忽略的文件或文件类型。下面列出文件.gitignore
的格式规范:
- 所有空行或者以#开头的行都会被Git忽略,相当于是注释
- 可以使用shell所使用的简化了的正则表达式
- 匹配模式可以以(/)开头防止递归。
- 匹配模式可以以(/)结尾指定目录。
- 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。
我们可以进行一个例子进行具体的展示,首先在之前的目录的基础上添加Text4.txt和Text5.txt以及Pictures和Videos文件夹,同时添加一个.gitignore
文件
同时在Pictures文件夹中添加test文件夹和Test6.docx和Text7.txt。test文件夹中含有Test7.docx
这时可以查看状态,可以看见:
所有新添加的文件都处于untracked的状态,这时在.gitignore
文件中添加如下:
# ignore all files in the Videos/ directory
# 忽视所有Videos文件夹中的文件
Videos/
# ignore .txt files(Regular Express)
# 忽视当前目录下txt文件(正则表达式)
*.txt
#ignore all txt files in Pictures directory,but not in Pictures/test directory
#忽视所有在Pictures目录下的以txt为后缀的文件,但是不忽略Pictures/test下的
Pictures/*.txt
# ignore all docx files in Pictures directory,including Pictures/test
#忽视包含Pictures/test和Pictures/目录下的所有以docx为后缀的文件
Pictures/**/*.docx
这时再查看当前文件的状态,会发现所有被配置的文件都已经被忽略了。
注意:这里的文件都是处于未跟踪状态的文件,如果某个文件在暂存区或者仓库区则在.gitignore文件中配置忽略无效
如果要忽略指定模式以外的文件或目录,需要使用"!",在gitignore
文件中添加以下内容:
#track Test4.txt,even though you're ignoring .txt files above
#这里忽视了除Test4.txt文件以外txt文件,即使在上面定义了忽视.txt文件
!Test4.txt
还有一个需要注意的是如果当前目录的子目录中有同名的文件(包含后缀名)在此文件夹中写文件名,这时会递归地将子目录中的同名文件给忽视,如果不想忽视子目录中的文件则需要加上"/"。在当前目录中和Files目录下分别添加Test6.md后,在.gitignore
文件中添加如下内容:
#Only ignore Test6.md in the current directory,not subdir/Test6.md
#只是忽略当前目录下的Test6.md而不是子目录中Test6.md
/Test6.md
GitHub 有一个十分详细的针对数十种项目及语言的 .gitignore 文件列表,你可以在 https://github.com/github/gitignore 找到它.
状态简览
通常git status
命令的输出很详细,如果想要得到更加简单的形式的输出,则需要使用命令git status -s
。
在当前文件夹中将Test4.txt和.gitignore文件使用git add添加到暂存区中,然后再在Test4.txt中添加内容,同时再向已经处于仓库区中的Test1.md添加新内容,使用git status -s
可以看到:
这时如果再使用git add
将Test1.md和Test4.txt添加到暂存区,则显示:
可以看出M的位置出现在了两处,总结一下,出现在右边的 M 表示该文件被修改了但是还没放入暂存区,出现在靠左 边的 M 表示该文件被修改了并放入了暂存区,新添加的未跟踪文件前面有 ?? 标记,新添加到暂存区中的文件前面有 A 标记。
详细查看修改的内容
使用git status
可以查看到文件变化的地方,但是过于模糊,如果想要知道具体修改了什么地方,可以使用git diff
的命令
- 查看已暂存和未暂存的修改,首先将所有文件添加到暂存区。
这个时候运行git diff
命令可以看见没有任何输出,因为所有文件已暂存。
当在Test1.md文件新添加一行后,再使用git diff
的命令:
因此要明白git diff
比较的是已暂存和未暂存文件之间的区别。
- 查看已暂存的将要添加到下次提交里的内容,依然是将所有文件添加到暂存区
这时运行git diff --cached
或者git diff --staged
命令,会出现所有你已暂存起来的修改
因此git diff --cached
或者git diff --staged
命令便是查看已暂存的将要添加到下次提交里的内容
提交更新---将提交信息与命令放在同一行
可以在git commit
命令之后添加 -m选项,这样就可以将提交信息与命令放在同一行了.
可以所有更新的信息都会输出
跳过使用暂存区域
每次提交之前都要使用git add将文件提交到暂存区,这样略显繁琐,如果提交已经被git跟踪过的文件,可以跳过将此文件添加到暂存区的步骤,如下提修改已经在仓库区的Test4.txt,使用git commit -a
命令可以直接提交Test4.txt到仓库区。
移除文件
如果当要简单删除目录中的文件时,可以手工在文件夹中删除,也可以运行rm
命令,比如:
rm Files/Test6.md
其状态为:
此时可以看出这次的删除操作并没有记录到git中,因此可以运行git rm
命令
下次提交时候这个文件便不会再纳入git的版本管理之中了。
如果一个文件已经存在于仓库中,这时运行git rm
会在文件中直接删除该文件并不会被纳入git的管理中
但是如果一个文件在暂存区中,想要删除则需要用强制删除选项-f。不适用会报错(这也是一种安全特性)比如下面的例子,Test4.txt已经在暂存区中
如果使用git rm -f
则会强制删除文件,如果使用git rm --cached
则会在目录中保留此文件,但是并不会让git继续跟踪。
移动文件和重命名文件
如果要移动文件则直接使用rm
命令,但是如果使用了git mv
则结果会很不一样,运行git mv readme.md readme
相当于运行了三条命令:
mv readme.md readme
git rm readme.md
git add readme
比如下面的例子:运行git mv Test4.txt Test7.md
结果状态为:
因此,git rm命令将文件或文件夹重命名的文件,上面的例子就是将Test4.txt改名成了Test7.md
原文地址:https://www.cnblogs.com/haoocker/p/12269902.html