概述
Git 管理文件的 4 种状态
- 未追踪(untracked)
- 已提交(commited)
- 已修改(modified)
- 已暂存(staged)
Git 项目的 3 个工作区域
- 工作目录
- 暂存区
- Git 仓库
快速上手
配置用户
配置用户用于记录开发者信息,以便在版本控制记录开发者的操作行为。
git config --global user.name "姓名"
git config --global user.email "邮箱"
初始化仓库
要利用 Git 进行版本控制,首先需要初始化一个仓库。
git init
git init
命令会在当前项目目录中创建一个名为 .git 的隐藏目录,这个目录中包含了暂存区和仓库两个区域。可通过 ls -al
查看当前目录所有信息。
查看文件状态
查看当前仓库的文件状态。
git status
添加文件到暂存区
将已开发的部分暂存起来等待提交可以使用 git add
添加到暂存区。
git add "文件名"
把所有文件添加到暂存区。
git add *
git add -A
从暂存区移除文件
将提交到暂存区的文件删除。
git rm --cached "文件名"
撤销更改
将上次暂存的文件还原到工作区
git checkout "文件名"
提交文件
一个功能开发完成,可以提交到本地仓库永久保存。
git commit -m "描述信息"
查看提交历史
查看以往提交历史记录。
git log
版本回退
通过每次提交的唯一 SHA 值回退到特定历史版本。
git reset --hard "SHA" 工作区会变,历史(HEAD)会变,暂存区也会变
git reset --soft "SHA" 只会改变历史(HEAD)
git reset --mixed "SHA" (默认选项)历史(HEAD)会变,暂存区会变,工作区不变
拉取历史版本某个文件
git checkout "SHA" --"文件名"
Git 分支
创建分支
在当前分支上新建一个分支,新建分支会继承当前分支所有文件。
git branch "分支名称"
切换分支
git checkout "分支名称"
快速切换分支
创建一个新的分支,并切换到新分支。
git checkout -b "分支名称"
删除分支
git branch -d "分支名称"
合并分支
将目标分支合并到当前分支。
git merge "分支名称"
查看分支
git branch [-a] (-a 查看所有分支)
远程分支
git branch -r (verb)
删除远程分支
git push origin --delete (branch)
远程仓库
创建远程仓库
- Git 要求远程仓库是一个以 .git 结尾的目录。
mkdir /a/b/repo.git
cd /a/b/repo.git
git init --bare
- 远程仓库地址:
用户名@主机:路径.git 分支名称
示例:demo@192.168.100.101:/a/b/repo.git master - 远程仓库缩写
git remote add "缩写" "远程仓库地址"
git remote show // 查看所有远程仓库地址
git remote show "缩写" // 查看某一缩写仓库地址
向远程仓库同步内容
同步内容
git push "远程仓库地址 本地分支:远程分支"
git push "远程仓库地址 本地分支"
git push "远程仓库地址"
删除远程分支
git push "远程仓库地址 :远程分支"
git push "远程仓库地址" --delete "远程分支"
从远程仓库里取出内容
- git fetch
git fetch "远程仓库地址 [远程分支]"
要执行 git fetch,前提已初始化一个仓库。
将远程仓库所有分支更新到本地。
通过 git fetch 更新到的分支只是记录在本地仓库中,并不会更新到工作目录中。
使用 git merge "远程分支" 来进行合并。
- git pull
git pull "远程仓库地址 [远程分支]"
要执行 git pull,前提已初始化一个仓库。
git pull = git fetch + git merge
- git clone
可以在不存在本地仓库的情况下执行此命令。
git clone "远程仓库地址 [远程分支]"
git clone = git init + git fetch + git merge
其它
.gitignore 忽略文件
在项目根目录下创建一个 .gitignore 文件,可以将不希望提交的文件或目录罗列在这个文件里。
比较差异
git difftool // 比较工作区与暂存区的差异
git difftool "SHA" // 比较工作区与历史提交版本的差异
git difftool "SHA" "SHA" // 比较两个历史提交版本的差异
git difftoll "分支名称" // 比较当前分支与特定分支的差异