### 简介:
Git 是一个版本控制工具,除了git外还有其他版本控制工具,例如svn,主要是用来解决不同系统不同开发者分工协作的问题,git是一个分布式版本控制系统,每次克隆都将仓库代码完整镜像下来,也是对代码仓库的一次备份,正因如此,git可以在本地进行工作任务处理。相比其它版本控制工具,git以每次提交的文件快照作为处理,而不是以每一次文件的差异性作为信息保存。
官网:<https://git-scm.com/>
<!-- more -->
### 常用命令以及场景
1. 环境设置
通过下面命令设置git confit 命令设置提交的用户信息,通过 git config --list 命令可列出配置信息
```
git config --global user.name "John Doe"
git config --global user.email johndoe@example.com
```
2. 项目建立
有两种方式可以开始项目,第一种是本地新建项目推送到远程代码仓库,第二种是通过远程仓库克隆到本地进行工作
执行下面命令进行代码仓库初始化,并会生成.git隐藏文件,该文件包含了git相关信息
```
git init (本地项目目录下初始化)
git clone *** (远程仓库克隆项目到本地,***代表代码仓库地址)
```
3. 提交工作
修改完代码后,先将文件添加到暂存区,然后检查文件状态,最后整理好提交信息提交代码
```
git add . (添加所有文件到暂存区)
git status -s(文件状态简览)
git diff (查看所有文件修改)
git reset HEAD *** (撤销已暂存文件修改,***代表文件路径)
git checkout *** (撤销未暂存文件修改,***代表文件路径)
git comit -m "commit info"(提交代码)
git commit -amend -m "commit info"(修改上一次提交信息)
```
4. 分支管理
当项目有了不同特性需求后,需要多个版本时,这时用到了git分支相关功能
```
git ls-remote (查看项目远程仓库分支)
git branch (查看本地分支)
git branch *** (创建分支,***代表分支名)
git branch -d *** (删除本地分支,***代表分支名)
git branch -D *** (强制删除本地分支,***代表分支名)
git push origin --delete branchname (删除远程分支)
git push origin *** (推送分支到远程代码仓库,***代表分支名)
git checkout -b *** origin/*** (拉取远程分支代码到本地分支,***代表分支名)
```
5. 推拉远程代码
当项目多人进行工作时,需要拉取最新代码,以及推送自己代码到远程代码仓库,remote代表远程仓库根目录,branch代表分支名
```
git pull (remote)(branch)
git push (remote)(branch)
```
6. 回滚代码
当项目代码出现问题时,需要返回以前版本的代码时,可通过下面命令进行代码回滚
```
git reset --hard *** (*** 代表回滚地方的代码提交id)
```
7. 标签管理
当代码需要标记,或者版本需要标记时,可在提交处打上标签进行代码管理
```
git tag (列出标签)
git tag *** (新建轻量标签,***代表标签名)
git tag -a *** -m "tag info" (新建附注标签)
git tag -a tagname commitId (补签,tagname表示标签名,commitId表示补签提交的id)
git tag show ***(查看标签信息,***代表标签名)
git push origin *** (推送标签到远程仓库共,***代表标签名享)
git push origin -tags (推送所有标签)
git checkout -b branchname tagname (检出标签到新建分支,branchname表示分支名,tagname表示标签名)
```
8. 分支合并
开发过程中,会因为项目特性,需求,以及bug等原因需要开多个分支进行编码处理,当处理完之后则需要合并到稳定分支或线上分支上,这里有两种方式,一是合并分支,二是变基分支。
```
git merge branchname (合并分支会将两个分支的末端提交和共同的祖先提交进行三方合并形成新的分支)
```
变基分支则需要多个步骤,假设主分支为master, 被合并的分支为 branch1,先切换到branch1分支进行变基,然后再切换到主分支进行快进合并,变基分支和合并分支不同的特点在于它是相当于在主分支上重新建立分支上的修改提交,在log上显的更加清晰一些,要注意的是,避免在协作过程中将已经推送的提交进行变基操作。
```
git checkout branch1
git rebase master
git checkout master
git merge branch1
```
网友评论