下载地址
在文件夹里右键点击 git bash here 即可打开命令行面板。
git -v // 查看版本
git config --global user.name "heo"
git config --global user.email [email protected]
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 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 reflog // 查看操作的历史记录
cp -rf repo repo-copy // 复制仓库
git reset --soft <要回退的版本id> // 回退到某个版本
ls // 查看工作区的内容
git ls-files // 查看暂存区的内容
要谨慎使用 --hard
,但是误操作后不用担心,可以根据操作历史记录通过 reset
回溯到误操作前的版本。比如:git reset --hard <版本号>
。
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