Git的奇技淫巧

参考:https://github.com/xiaozhiqi2000/git-tips

 

git的理论基础
git分为三大区域:工作区-------------->暂存区--------------->版本库

git重要指令
1.创建git仓库

git init
#会在当前目录下生成.git文件夹,内部是有关于本仓库的所有git配置,不建议手动修改。
1
2
2.将工作区中新增的test.txt文件加入到暂存区

git add test.txt
1
3.查看当前仓库的状态

git status
1
4.将暂存区中的test.txt文件删除

git rm --cached test.txt
1
5.提交暂存区中的所有文件到版本库

git commit -m 'message'
#需要填写本次提交的说明
1
2
6.查看日志

git log
#倒叙展示,最上面的一次提交就是最近的一次提交
1
2
7.在工作区修改了test.txt文件后,还未添加到暂存区前,用户想放弃本次修改(还原为修改前的文本)

git checkout -- test.txt
#原理:将暂存区的test.txt文件替换掉当前工作区的test.txt
1
2
8.在工作区修改了test.txt文件后,添加到了缓存区,用户想放弃本次添加缓存区的操作

git reset HEAD test.txt
#原理:将版本库的test.txt文件替换掉暂存区的test.txt,此时不影响当前工作区的test.txt

#如果之后,再调用git checkout -- test.txt,可将当前工作区的test.txt还原为未修改前文本
1
2
3
4
9.删除当前工作区和暂存区中的test.txt文件,还未提交到版本库

git rm test.txt
#原理:其实内部是先rm test.txt,再git add test.txt,将工作区和暂存区中的test.txt文件都删除了

#想要恢复test.txt:先git reset HEAD test.txt,再git checkout -- test.txt
1
2
3
4
10.删除当前工作区的test.txt文件

rm test.txt
#想要恢复test.txt:git checkout -- test.txt
1
2
11.删除当前工作区和暂存区中的test.txt文件,提交到版本库

git rm test.txt
git commit -m 'message'
#此时,工作区、暂存区、版本库中的test.txt全部被删除
1
2
3
12.将test.txt文件重命名为test2.txt,并自动add到暂存区

git mv test.txt test2.txt
#原理:其实内部是先mv test.txt test2.txt,再git add test.txt test2.txt

#想要恢复test.txt:
#先git reset HEAD test.txt,git reset HEAD test2.txt,此处暂存区中只有test.txt了
#再git checkout -- test.txt,rm test2.txt就ok了
1
2
3
4
5
6
13.将test.txt文件重命名为test2.txt,不自动add到暂存区

mv test.txt test2.txt
1
14.修正上次的提交信息(比如:提交信息写错了)

git commit --amend -m 'message'
1
15.提交消息太多了,查看最近3条提交信息

git log -3
1
16.配置git

git config --help
git help config
1
2
git常用配置
配置user.name与user.email

git config --global user.name "eric"
git config --global user.name "eric@qq.com"
1
2
对于user.name与user.email来说,有3个地方可以设置

1、/etc/gitconfig(几乎不会用,针对所有用户)

命令:git config --system

2、~/.gitconfig(很常用,针对当前用户)

命令:git config --global

3、.git/config(很常用,针对特定项目)

命令:git config --local

优先级:local > global > system

git自动忽略文件
在当前仓库中加入.gitignore文件,用户在添加文件到暂存区时,会自动忽略.gitignore文件中配置的文件

一般这个.gitignore文件应该放在项目的根目录下

常见书写规则:

*a -------忽略所有.a结尾的文件

!lib.a -------但lib.a除外

/TODO -------仅仅忽略项目根目录下的TODO文件,不包括subdir/TODO

build/ -------忽略build目录下的所有文件

doc/*.txt -------只会忽略doc下的以txt结尾的所有文件,但不包括doc/subdir/aa.txt这类子目录下的txt文件

doc/**/aa.txt -------忽略doc下所有的aa.txt文件,包括doc/subdir/aa.txt这类子目录下的txt文件
————————————————

posted @ 2023-04-21 15:49  飞鹰之歌  阅读(10)  评论(0编辑  收藏  举报