1. 安装与初始化配置
1.1 安装
下载地址
在文件夹里右键点击 git bash here 即可打开命令行面板。
git -v // 查看版本
1.2 配置
git config --global user.name "heo"
git config --global user.email xxx@gmail.com
git config --global credential.helper store // 保存
git cnofig --global --list // 查看配置信息
2. 新建仓库
mkdir learn-git // 创建文件夹
git init [xx] // 初始化 git 仓库,为仓库名【可选】
ls -a // 查看该目录下所有文件
ls -altr // 查看该目录下所有文件的详细信息 或者 -ltr
rm -rf // 删除某个文件夹,删除 .git 文件夹即变成普通文件目录
git clone https://github.com/xx/xx.git // 克隆 github 仓库到本地
3. 工作区域和文件状态
4. 添加和提交文件
git status // 查看仓库状态
echo "这是第一个文件" > file1.txt // 将回显的内容输出到一个文件内
cat file1.txt // 查看文件内容
git add file1.txt // 将该文件提交到暂存区(文件状态从红色变为绿色)
git commit -m "第一次提交" // 提交文件到本地仓库,只能提交本身在暂存区的文件
mv file.txt file4.txt // 修改文件名从 file.txt 改为 file4.txt
git add *.txt // 通配符
git add . // 提交所有文件到暂存区
git commit // 提交到本地仓库,然后会进入 vim 编辑器,编辑提交信息
git log // 查看提交本地仓库的日志
git log --oneline // 查看简略的日志
5. 回退版本
--mixed
为默认参数。
git reflog // 查看操作的历史记录
cp -rf repo repo-copy // 复制仓库
git reset --soft <要回退的版本id> // 回退到某个版本
ls // 查看工作区的内容
git ls-files // 查看暂存区的内容
要谨慎使用 --hard
,但是误操作后不用担心,可以根据操作历史记录通过 reset
回溯到误操作前的版本。比如:git reset --hard <版本号>
。
6. 查看差异
git diff
默认比较工作区和暂存区的内容。
当我们将它提交到暂存区,再用 git diff
查看,发现没有输出内容了。
使用 git diff HEAD
比较工作区和版本库之间的差异。操作发现又会输出以上信息,因为此时我们还未提交。HEAD
指向分支的最新提交节点。
使用 git diff --cached
比较暂存区和版本库之间的差异。操作发现又会输出以上信息。
然后我们进行提交。上述两种操作就没有任何输出了。
git diff 版本号1 版本号2
就可以查看两次版本之间的差异。
git diff HEAD~ HEAD
或者 git diff HEAD^ HEAD
查看最新提交和上一次提交的差异。
git diff HEAD~2 HEAD
查看最新提交和 2 次前提交的版本的差异。
git diff HEAD~ HEAD file3.txt
查看某文件的信息。
7. 删除文件
rm file1.txt
删除工作区的文件,但是没有删除暂存区的文件。
git ls-files
查看暂存区的文件。
git add file1.txt
可以“隐性”的从暂存区删除文件。
git rm file2.txt
同时删除工作区和暂存区的内容。
git rm --cached file.txt
从暂存区删除文件,但保留在当前工作区中。
然后进行提交,否则删除的文件在版本库中还是存在的。git commit -m "delete"
。
8. .gitignore
文件
忽略掉不应该被加入到版本库中的文件,不会控制到已经添加到版本库中的文件。
存放应该被忽略的文件:
- 系统或者软件自动生成的文件
- 编译产生的中间文件和结果文件
- 运行时生成的日志文件、缓存文件和临时文件
- 涉及身份、密码、口令、秘钥等敏感信息的文件
echo example.log > .gitignore
-am
参数 同时完成添加至暂存区和提交至仓库的两个操作。
echo >>
是在文本后面追加一行的意思。
空文件夹不会被纳入版本控制中。
git status -s
查看状态的简略模式。
??
第一个问号表示暂存区的状态,第二个问号表示工作区的状态。
将文件夹添加到 .gitignore
中,temp/
,忽略文件夹。
.gitignore
文件夹匹配规则:https://git-scm.com/docs/gitignore
。
从上到下按行匹配,每一行代表一个忽略模式。
- 空行或者以
#
开头的行会被Git忽略。一般空行用于可读性的分隔,#
一般用作注释 - 使用标准的
glob
模式匹配,例如:星号*
通配任意个字符;问号?
匹配单个字符;中括号[]
表示匹配列表中的单个字符,比如:[abc]
表示a/b/c
- 两个星号
**
表示匹配任意的中间目录 - 中括号可以使用短中线连接,比如:
[0-9]
表示任意一位数字,[a-z]
表示任意一位小写字母 - 感叹号
!
表示取反
# 忽略所有的 .a 文件
*.a
# 但跟踪所有的 lib.a,即便你在前面忽略了 .a文件
!lib.a
# 只忽略当前目录下的TODO文件,而不忽略 subdir/TODO
/TODO
# 忽略任何目录下名为 build的文件夹
build/
# 忽略 doc/notes.txt,但不忽略 doc/server/arch.txt
doc/*.txt
# 忽略 doc/ 目录及其所有子目录下的 .pdf 文件
doc/**/*.pdf