一、Git基本概念
Git是一个功能强大的分布式版本控制系统,开源且免费!!!
下面这张图是Git的结构:
- workspace:工作区
- index:暂存区
- repository:本地仓库
- remote:远程仓库
二、Git配置
安装完 Git 之后,要做的第一件事就是设置你的用户名和邮件地址。 这一点很重要,因为每一个 Git 提交都会使用这些信息,它们会写入到你的每一次提交中,不可更改:
$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com
你可以通过以下命令查看所有的配置以及它们所在的文件:
$ git config --list --show-origin
获取帮助
$ git <verb> -h
三、获取一个Git仓库
1、从远程主机克隆一个版本库
$ git clone <版本库的网址> <本地目录名>
2、在已存在目录中初始化仓库
$ git init
# 关联远程仓库
$ git remote add origin https://github.com/lazyrabb1t/rabb-springboot-demo.git
四、提交文件
1、使用status产看文件状态
使用git status
可以查看当前目录下文件的状态,如Untracked files(未跟踪的文件)、Changes not staged for commit(修改过的暂存区文件)、Changes to be committed(还没commit的文件)。当所有文件都提交到本地仓库后、使用该命令会给出nothing to commit, working tree clean的提示。
2、提交文件
# 添加指定文件到暂存区
$ git add [file1] [file2] ...
# 添加指定目录到暂存区,包括子目录
$ git add [dir]
# 添加当前目录的所有文件到暂存区
$ git add .
# 提交暂存区到仓库区
$ git commit -m [message]
# 使用一次新的commit,替代上一次提交
# 如果代码没有任何新变化,则用来改写上一次commit的提交信息
$ git commit --amend [file1] [file2] -m [message]
# 推送此次修改,这是首次推送需要加上-u,之后推送就可以直接git push origin master,origin是远程Git名字,这个可以自己定义,不过一般是用origin罢了,master是默认的分支,如果不在master分支提交需要写清楚分支名称
$ git push -u origin master
3、查看变动
# 比较工作区与暂存区的差异
$ git diff [files]
# 比较暂存区与仓库的差异
$ git diff --cached
# 比较工作区与仓库的差异
$ git diff HEAD
4、回滚
# 汇总显示工作区、暂存区与HEAD的差异
$ git checkout
# 从暂存区回滚指定文件
$ git checkout -- filename
# 从本地仓库回滚
$ git checkout HEAD -- filename
# 从暂存区回滚所有文件
$ git checkout .
# 从commit_id处回滚
$ git checkout commit_id -- file_name
# 维持HEAD的指向不变。用branch所指向的提交中filename替换暂存区和工作区中相应的文件。注意会将暂存区和工作区中的filename文件直接覆盖
$ git checkout branch -- filename
# 检出branch分支。要完成图中的三个步骤,更新HEAD以指向branch分支,以及用branch指向的树更新暂存区和工作区
$ git checkout branch
5、提交历史
# 查看提交日志
$ git log
# 以图像化方式查看
$ git log --graph
# 查看所有分支,包括已经撤销的更新
$ git reflog
6、撤销提交
# 撤销暂存区提交
$ git reset HEAD <file>
# 撤销本地仓库体提交
# 1、使用指针
$ git reset --hard HEAD^
$ git reset --hard HEAD~1
# 2、使用commit ID
$ git reset --59cf9334cf957535cb328f22a1579b84db0911e5
# 恢复被撤销的提交
# 使用git reflog找到撤销的提交,然后执行上面的命令
$ git reset --hard e0e79d7
在Git中,有一个HEAD指针指向当前分支中最新的提交。当前版本我们使用”HEAD^”,那么再前一个版本可以使用”HEAD^^”,如果想回退到更早的提交,可以使用”HEADn”。(也就是,HEAD^=HEAD1,HEAD^^=HEAD~2)
这里用的的参数
–hard:撤销并删除相应的更新
–soft:撤销相应的更新,把这些更新的内容放到Stage中
7、删除文件
# 未跟踪的文件直接删除
# 或者使用clean删除所有未跟踪文件
# 一般会加上参数-df,-d表示包含目录,-f表示强制清除。
$ git clean [options]
# 删除暂存区文件
# 1、使用rm,直接从暂存区删除文件,工作区不做出改变
$ git rm --cached <file>
# 2、使用reste、暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响
$ git reset HEAD <file>...
# 删除已提交文件、本地文件也会删除
$ git rm <file>
8、其他
当存在不需要提交的文件时,可以在根目录添加一个.gitignore文件
想要在提交时自动替换文件中的指定内容,可以添加一个.gitattributes文件进行配置
四、使用分支
# 查看分支
$ git branch
# 查看远程分支
$ git branch -r
# 创建分支
$ git branch [branch]
# 在指定commitId创建分支
$ git branch [branch] [commit]
# 切换分支
$ git checkout [branch]
# 合并当前分支到指定分支
# 若存在冲突,则需要我们人工去解决,解决完需要添加到索引然后提交到仓库
$ git merge [branch]
# 删除分支
$ git branch -d [branch]
# 删除远程分支
$ git push origin --delete [branch-name]
五、远程仓库
为了便于管理,Git要求每个远程主机都必须指定一个主机名,remote命令就用于管理主机名。
# 列出所有远程主机
$ git remote
# 查看远程主机的网址
git remote -v
# 查看该主机的详细信息
# git remote show <主机名>
# 添加远程主机
# git remote add <主机名> <网址>
# 用于远程主机的改名
# git remote rename <原主机名> <新主机名>
# 删除远程主机
# git remote rm <主机名>
# 从远程仓库获取数据,但不自动合并当前分支
$ git fetch [remote] [branch]
# 获取仓库所有更新,并自动合并到当前分支
$ git pull [remote] [branch]
# 上传本地数据
$ git push [remote] [branch]
克隆版本库的时候,所使用的远程主机自动被Git命名为origin。如果想用其他的主机名,需要用git clone命令的-o选项指定。
# git clone -o jQuery https://github.com/jquery/jquery.git
参考
https://www.git-scm.com/book/zh/v2
https://www.cnblogs.com/best/p/7474442.html