在文件夹里右键点击 git bash here 即可打开命令行面板。
git -v // 查看版本
git config --global user.name "heo"
git config --global user.email xxx@gmail.com
git config --global credential.helper store // 保存
git cnofig --global --list // 查看配置信息
mkdir learn-git // 创建文件夹
git init [xx] // 初始化 git 仓库,为仓库名【可选】
ls -a // 查看该目录下所有文件
ls -altr // 查看该目录下所有文件的详细信息 或者 -ltr
rm -rf // 删除某个文件夹,删除 .git 文件夹即变成普通文件目录
git clone https://github.com/xx/xx.git // 克隆 github 仓库到本地
Git 使用时:
工作区:实际开发时操作的文件夹
暂存区:保存之前的准备区域(暂存改动过的文件)
版本库:提交并保存暂存区中的内容,产生一个版本快照
命令 | 作用 |
---|---|
git add 文件名 | 暂存指定文件 |
git add . | 暂存所有改动的文件 |
git commit -m “注释说明” | 提交并保存,产生版本快照 |
Git 文件 2 种状态:
未跟踪:新文件,从未被 Git 管理过
已跟踪:Git 已经知道和管理的文件
使用 git status -s 查看文件状态
文件状态 | 概念 | 场景 |
---|---|---|
未跟踪(U) | 从未被 Git 管理过 | 新文件 |
新添加(A) | 第一次被 Git 暂存 | 之前版本记录无此文件 |
未修改(‘’) | 三个区域统一 | 提交保存后 |
已修改(M) | 工作区内容变化 | 修改了内容产生 |
暂存区的作用:
暂存区:暂时存储,可以临时恢复代码内容,与版本库解耦
暂存区 -> 覆盖 -> 工作区,命令:git restore 目标文件(注意:完全确认覆盖时使用)
从暂存区移除文件,命令:git rm --cached 目标文件
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 // 查看简略的日志
--mixed
为默认参数。
查看提交历史:git log --oneline
git reflog // 查看操作的历史记录
cp -rf repo repo-copy // 复制仓库
git reset --soft <要回退的版本id> // 回退到某个版本
ls // 查看工作区的内容
git ls-files // 查看暂存区的内容
要谨慎使用 --hard
,但是误操作后不用担心,可以根据操作历史记录通过 reset
回溯到误操作前的版本。比如:git reset --hard <版本号>
。
git reset --hard 版本号
git reset --mixed 版本号 (与 git reset 等价)
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
查看某文件的信息。
rm file1.txt
删除工作区的文件,但是没有删除暂存区的文件。
git ls-files
查看暂存区的文件。
git add file1.txt
可以“隐性”的从暂存区删除文件。
git rm file2.txt
同时删除工作区和暂存区的内容。
git rm --cached file.txt
从暂存区删除文件,但保留在当前工作区中。
然后进行提交,否则删除的文件在版本库中还是存在的。git commit -m "delete"
。
.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