目录
一、集中式版本控制和分布式版本控制的区别
- SVN 是集中式版本控制工具,它会将所有的内容存储到一台服务器上,用户通过对服务器中的内容进行操作,从而获取最新的内容。用户的本地只有用户自己需要的文件,不会全量下载服务器中的所有内容。当服务器出现异常,意味着整个文件内容的异常。
- Git 是分布式版本控制工具,他会将所有的内容存储到服务器上,但用户的本地是对该服务器的镜像下载,即:用户本地的文件和服务器中的文件是完全一样的,即使服务器出现异常,用户本地的内容也可以作为一个新的服务器内容进行发布。
二、Bash - CMD - GUI 的区别
- Git Bash 命令行工具,基于CMD,并在CMD 的基础上添加了新的命令和功能,可以执行linux 命令
- Git CMD 命令行提示符,是Windows操作系统上的命令行解释程序
- Git GUI 提供了图形用户界面来运行git 命令
三、Git 基础
1、git init 初始化Git 仓库
该命令将创建一个名为.git 的子目录,但项目里的文件并没有被跟踪
2、git clone 从Git 远程仓库拉取代码
3、git 划分文件状态
- 未跟踪:默认情况下,Git 仓库下的文件也没有添加到Git 仓库管理中,需要通过git add 命令来操作
- 已跟踪:添加到Git 仓库管理的文件处于已跟踪的状态,Git 可以对其进行各种跟踪管理。
对于已跟踪的状态还可以进一步细分
- staged: 暂缓区中的文件状态
- Unmodified: commit 命令,可以将staged 中文件提交到Git 仓库
- Modified: 修改了某个文件后,会处于Modified 状态
4、.gitignore 忽略文件
文件名:.gitignore
5、git log 查看提交历史
git log (查看每条提交历史明细)
git log --pretty=oneline (每条提交历史作为一行显示,更加清晰)
git log --pretty=oneline --graph (每条提交历史的分支结构更加清晰)
6、git reset 版本回退
- Git 通过HEAD 指针记录当前版本
- HEAD 是当前分支引用的指针,它总是指向该分支上的最后一次提交;
- HEAD 可以看做为该分支上的最后一次提交的快照
回退Git 版本指令
- git reset --hard HEAD^ 回退到上一个版本
- git reset --hard HEAD~10 回退到上10 个版本
- git reset --hard 2d449823 回退到指定版本(先通过git log 查看唯一校验和)
7、git remote 查看和连接远程仓库
- git remote 查看是否有远程仓库
- git remote -v 查看远程仓库明细
- git remote add <name> <url> :将本地仓库与远程仓库建立连接,如:git remote add origin https://...,然后git branch --set-upstream-to=origin/master,然后git fetch,git merge --allow-unrelated-histories
8、Git tag 创建版本标签
- 添加本地的tag:git tag v1.0.0
- 添加本地tag 并为tag 添加备注:git tag -a v1.1.0 -m "添加备注"
- 将某个tag push 到远程服务器:git push origin v1.0.0
- 将所有tag push 到远程服务器:git push origin --tags
- 删除本地tag:git tag -d v1.0.0
- 删除远程服务器的tag:git push origin -d v1.0.0
- 检出(回到)某个tag 版本:git checkout v1.0.0
9、切换分支的本质
有一个名为HEAD 的指针,目前处于哪个分支则表示HEAD 的指针指向这个分支
10、切换分支操作
- 查看分支:git branch
- 切换分支:git checkout dev
- 创建新的分支,并切换到该分支:git checkout -b dev
- 当远程仓库没有dev 分支,本地仓库存在dev 分支时,将本地的dev 分支push 到远程仓库:git push origin dev,git branch --set-upstream-to=origin/dev
- 将dev 分支合并到master 分支中:git checkout master , git merge dev
- git checkout dev 相当于 git checkout --track <remote>/<branch> 所做的操作:1、先检查远程是否含有dev 分支;2、在本地创建dev 分支;3、将本地的dev 分支跟踪远程的dev 分支
- git pull 相当于 git fetch + git merge
11、移除分支
移除分支知只是除该dev 指针,不会移除commit 提交记录
- 删除本地分支:git branch -d dev
- 删除远程分支:git push origin --delete <branch>