添加文件
初始化本地仓库
git init
查看状态
git status--打印文件状态(未追踪、已修改、已暂存)
git status -s
等价于:
git status --short 简化文件状态打印内容
short 符号
?? 未追踪文件
A 添加到暂存区的
M 被修改但是未放入暂存区
MM 修改后放入暂存区,并且又再次修改
M 被修改后放入暂存区
R 重命名
D 删除
查看记录
git log
git reflog
查看分支
git branch
当你需要添加到暂存的文件过多的时候
git add . -添加所有改动文件及未追踪的文件
每次进入vim模式输入描述很麻烦?
git commit -m '描述' -合并提交和描述,一步完成操作
每次都要输入add命令好麻烦?
git commit -a -m '描述' -从工作目录提交到暂存区后,直接提交
中文乱码?执行命令:
git config --global core.quotepath false
编辑描述乱码?
-右键进入setting
-找到environment
-添加:set LANG=zh_CN.UTF-8
删除文件
1.命令行删除
git rm <file> -删除git区域中记录的文件,并且不保留在工作目录中
git rm -f(force) <file> -强制删除
2.手动删除工作目录中的文件
git rm <file>
3.删除Git仓库中的,保留工作目录中的文件
git rm --cache <file>
移动文件
移动文件的妙用
1.重命名
2.移动文件
git mv file_from file_to
以上命令相当于以下三条
mv file_from file_to
git rm file_from
git add file_to
合并文件
如:master分支,要合并的分支为branch 需要把branch 合并到master
git checkout master --切换到master分支
git merge branch --把branch分支合并到master分支
分支冲突:
如何判断是否会引起冲突:
master 和 branch1 处于同一条commit路径上(直接级祖先关系)
master 和 branch1 直接进行合并,不会引起冲突
若是不是则:
1,分析master和branch1中的修改是否一致,如果一致合并将会成为一次空合并(因为内容完全一致,没有合并的需要)
2,如果不一致,是否修改的同一个文件内容,如果是,产生冲突
解决分支冲突:
1,手动解决冲突部分
2,解决完成后再次提交,会以这次提交内容为准
删除分支:
合并完成后,分支就没有任何的后期用途了,这个时候我们需要手动删除分支,
以防止自己词穷的时候出现重复命名分支的情况。
git branch -d 分支名称
如果你的分支,从未合并:git branch -D 分支名称
*HEAD所指向的分支,无法删除
取消合并:
git merge --abort
查看功能
git diff 查看当前文件的修改(主要看工作区文件)
git diff --staged 查看暂存区和提交区域之间的差异
git log -查看日志
git log -p 查看详细信息
git log -2 查看最近的n条信息
git log --stat 列出所有被修改的文件,以及简略的统计信息
git log --pretty 设置打印内容的格式
git log --pretty=oneline 哈希和描述
git log --pretty=short 哈希、作者、描述
git log --pretty=full 哈希、作者、提交者、描述
git log --pretty=fuller 哈希、作者、日期、提交者、提交日期、描述
git log --pretty=format:"%H %h" 定制要显示的记录格式
format的常用选项
%H 提交对象(commit)的完整哈希字符
%h 提交对象的简短哈希字符
%T 树对象(tree)的完整哈希字串
%t 树对象的简短哈希子串
%P 父对象(parent)的完整哈希字串
%p 父对象的简短哈希字串
%an 作者(author)的名字
%ae 作者的电子邮箱地址
%ad 作者修订日期(可以用 --date=选项定制格式)
%ar 作者修订日期,按多久以前的方式显示
%cn 提交者(committer)的名字
%ce 提交者的电子邮件地址
%cd 提交日期
%cr 提交日期,按多久以前的方式显示
%s 提交说明
**此处的作者:实际修改的人
提交者:最后将此工作成果提交到仓库的人
HEAD与master
HEAD:
HEAD是一个特殊指针,该指针指向当前所在分支
*HEAD是唯一的
查看命令:
git log --oneline --decorate 查看分支指向+哈希
git log --oneline --decorate --all --graph
查看命令的完美组合~包含了所有分支的提交,以树形图形式展现
提交对象:
Git保存的并不是文件的变化或者差异,而是一系列的不同时刻的文件快照。
提交操作时Git会保存一个提交对象,该对象中包含一个指向暂存内容快照的指针、作者姓名、邮箱、父对象指针以及提交输入信息。
*首次提交对象没有父对象
*普通的提交有一个父对象
*多个分支合并的有多个父对象
master分支:
Git的分支本质上仅仅是指向提交对象的可变指针。
Git默认分支名:master,它会在每一次的提交中自动前移。
Git的分支master并不是一个特殊分支,它和其他的分支完全没有区别,之所以每个分支都是有master是git init命令默认创建,而大部分人又懒得去更改。
分支的操作
创建分支:git branch 分支名称
*创建出来的分支,并不会改变我们当前所在的位置
切换分支:git checkout 分支名
*将HEAD指向切换的分支
*将工作目录恢复成当前分支的快照
简写命令:git checkout -b 分支名
合并分支:
git merge 目标分支 - 将目标分支的内容合并到当前分支
快速前移
当master和branch没有形成分叉,依旧是处于一条路径线,当HEAD落后于所要合并的分支,将会形成快熟前移。
--no-ff 禁止快速前移(可以commit记录描述为合并操作)
撤销操作
git checkout -- a.txt 撤销没有加入到暂存区的修改
git reset HEAD a.txt 撤销加入到暂存的
git commit -m '新建一个b文件' --amend 覆盖上次提交内容
git commit --amend 沿用上次的提交信息