安装 Git
地址 -> https://git-scm.com/download/win 一路next安装
初次使用配置 Git
需要配置下使用者的名称和邮箱,后续的提交都会以此区分提交者身份
git config --global user.name "名称"
git config --global user.email "邮箱"
使用git config --list 命令确认结果
Git Bash不支持中文
1.打开git bash后,
对窗口右键->Options->Text->Locale改为zh_CN,Character set改为UTF-8
关闭git bash,再打开,可以显示中文了。
2.如果前一种方法不行
则在git bash中尝试执行下面内容
git config --global core.quotepath false
关闭git bash,再打开,可以显示中文了。
3.如果前面不行
git config --global i18n.commitencoding utf-8 #如果是GBK 请换成gbk
git config --global i18n.logoutputencoding utf-8 #如果是GBK 请换成gbk
export LESSCHARSET=utf-8
关闭git bash,再打开,可以显示中文了。
三棵树
你的本地仓库有 Git 维护的三棵“树”组成,这是 Git 的核心框架。
工作区域(Working Directory)就是你平时存放项目代码的地方。
暂存区域(Stage)用于临时存放你的改动,事实上它只是一个文件,保存即将提交的文件列表信息。
Git 仓库(Repository)就是安全存放数据的位置,这里边有你提交的所有版本的数据。其中,HEAD 指向最新放入仓库的版本(这第三棵树,确切的说,应该是 Git 仓库中 HEAD 指向的版本)。
OK,Git 的工作流程一般是酱紫:
-
在工作目录中添加、修改文件;
-
将需要进行版本管理的文件放入暂存区域;
-
将暂存区域的文件提交到 Git 仓库。
因此,Git 管理的文件有三种状态:已修改(modified)、已暂存(staged)和已提交(committed),依次对应上边的每一个流程。
初始化 Git
在命令行中将路径切换至文件夹中,然后使用命令git init
将文件添加到暂存区域
git add 文件名/路径 将指定文件/路径添加到暂存区
git add * 将工作目录下所有文件添加到暂存区
git add --all 对所有变动的文件执行add(也写成 git add -A)
将文件提交到git仓库
git commit -m "提交的文字说明(支持中文)"
将文件从工作区提交到代码仓库(add + commit)
git commit -am "提交的文字说明(支持中文)"
克隆别人的代码
git clone "要克隆的地址"
查询状态
git status
查看历史提交
git log
git log --oneline 显示一行的简略信息
查看失去了的以前的提交
git reflog
回滚相关命令
git add
命令用于把工作目录的文件放入暂存区域git commit
命令用于把暂存区域的文件提交到 Git 仓库git reset
命令用于把 Git 仓库的文件还原到暂存区域git checkout
命令用于把暂存区域的文件还原到工作目录
其中git check 命令现在逐渐使用git restore取代了
reset回滚命令--参数
git reset --soft 快照ID 只将代码仓库回滚到快照ID的版本
git reset -–mixed 快照ID 将代码仓库和暂存区都回滚到快照ID版本,不指定参数时默认为--mixed模式
git reset --hard 快照ID 将代码仓库,暂存区,工作目录都回滚到快照ID版本
reset回滚命令--快照ID
git reset HEAD~ 回滚到次新版本
git reset HEAD~~ 回滚到次次新版本
git reset HEAD~10 回滚到次*10新版本
git reset 00c29 回滚到版本号00c29开头的版本
reset回滚命令--回滚个别文件到暂存区域
git reset 快照ID 文件名/路径
checkout回滚--将暂存区的内容回滚(恢复)到工作区域
git checkout -- 想要恢复的文件/路径 (如果确认没有分支和想要恢复的文件/路径名称重名,则--可不写)
checkout回滚--将代码仓库的内容回滚到暂存区和工作区域
git checkout 快照ID 文件名/路径
比较差异--比较暂存区域与工作目录
git diff
比较差异--比较两个历史快照
git diff 第一个历史快照ID 第二个历史快照ID
比较差异--比较当前工作目录和仓库快照
git diff 某一个历史快照ID 和某个版本之间的差异
git diff HEAD 和最新的版本之间的差异
比较差异--比较暂存区和仓库快照
git diff --cached 比较暂存区和最新快照
git diff --cached 快照ID 比较暂存区和指定快照
difftool和mergetool
git自带的diff工具并不好用,可以使用difftool和mergetool指定更好的比较合并工具,教程如下:
修改最后一次提交
实际开发中,可能会遇到下边这两种情况:
Situation One:版本刚一提交(commit)到仓库,突然想起漏掉两个文件还没有添加(add)。就好比你是老司机,说开车 就开车,到了半路发现还有俩乘客没上来……
Situation Two:版本刚一提交(commit)到仓库,突然想起版本说明写得不够全面,无法彰显你本次修改的重大意义……
这个时候,可以执行**带 --amend 选项的 commit 命令**,Git 会“更正”最近的一次提交。
git commit --amend -m "修改后的上传说明"
删除文件/路径
git rm 文件名
git rm -r 路径
git rm命令只删除工作区域和暂存区的对应文件/路径,要删除代码仓库内的对应文件,则应该接着执行git commit
!如果工作区域和暂存区的文件不一致(比如同名为temp,但add之后又做了修改,导致两方的temp内容不一样),这个时候执行git rm会报错
因为系统无法知道你到底想要删除的是哪个
$ git rm temp
error: the following file has staged content different from both the
file and the HEAD:
temp
(use -f to force removal)
此时,如果想两个都删除,则
git rm -f temp
如果只想删除暂存区的temp,则
git rm --cached temp
重命名
git mv 旧文件/路径名称 新文件/路径名称
让GIT忽略一些指定格式的文件(以忽略.tmp结尾的文件为例)
echo *.temp > .gitignore
创建分支
git branch 分支名 创建当前快照的分支
git branch 分支名 快照ID 创建指定快照的分支
显示指向提交的所有引用
git log --decorate
切换分支
git checkout 分支名
创建并切换到该分支
git checkout -b 分支名
以图像的形式显示当前的分支情况
git log --decorate --oneline --graph --all
--graph 选项表示让 Git 绘制分支图,--all 表示显示所有分支
合并分支
git merge 分支名 将分支合并到当前的工作分支
删除分支
git branch -d 分支名
git branch -D 分支名 删除的是未合并的分支
创建匿名分支(不指定分支名的checkout)
git checkout HEAD~
匿名快照的修改不保存,当你切到别的分支时,修改就被丢弃找不回了,特别适合于你想做些危险因此很可能会回退的操作,去匿名分支下尝试下,不行就切回来当啥事没发生
参考: