分布式版本控制 Git
基本原理
- 每个库都存有完整的提交历史,可以直接在本地进行代码提交。
- 每次提交记录的都是完整的文件快照,而不是记录增量。
- 通过Push等操作来完成和远端代码的同步。
优点
- 分布式开发,每个库都是完整的提交历史,支持本地提交,强调个体。
- 分支管理功能强大,方便团队合作,多人协同开发。
- 校验和机制保证完整性,一般只添加数据,很少执行制除操作,不容易导致代码丢失。
git的基本命令及使用方式
一、新建代码库
| 1. 在当前目录新建一个Git代码库 | $ git init |
|---|
| 2. 新建一个目录,将其初始化为Git代码库 | $ git init [project-name] |
| 3. 下载一个项目和它的整个代码历史 | $ git clone [url] |
二、配置
Git配置信息在.git/config里面
$ git --version: 查看Git版本号
$ which git: 显示当前Git路径
$ git config --list: 查看配置信息。可以看到user.name和user.email信息。在当前项目下查看的配置是全局配置+当前项目的配置,使用的时候会优先使用当前项目的配置。
配置全局用户名和邮箱:
$ git config --global user.name "yourName"
$ git config --global user.email "yourEmail"
单独针对某一个项目配置Git用户名和邮箱:
$ git config user.name "yourName"
$ git config user.email "yourEmail"
三、增加、删除文件
| 1. 添加指定文件到暂存区 | $ git add [file1] [file2] |
|---|
| 2. 添加指定目录到暂存区,包括子目录 | $ git add [dir] |
| 3. 添加当前目录的所有文件到暂存区 | $ git add . |
| 4. 删除工作区文件,并且将这次删除放入暂存区 | $ git rm [file1] [file2] |
| 5. 停止追踪指定文件,但该文件会保留在工作区 | $ git rm --cached [file] |
| 6. 改名文件,并将这个改名放入暂存区 | $ git mv [file-name] [file-renamed] |
四、代码提交
| 1. 提交暂存区到仓库区 | $ git commit -m [message] |
|---|
| 2. 提交指定区的指定文件到仓库区 | $ git commit [file1] [file2] ... -m [message] |
| 3. 提交工作区自上次提交之后的变化,直接到仓库区 | $ git commit -a |
| 4. 提交时显示所有的diff信息 | $ git commit -v |
| 5. 使用一次新的提交,替代上一次提交(如果代码没有任何变化,则用来改写上一次提交的提交信息) | $ git commit --amend -m [message] |
| 6. 重做上一次提交,并包括指定文件的新变化 | $ git commit --amend [file1] [file2] |
五、分支
| 1. 列出所有本地分支 | $ git branch |
|---|
| 2. 列出所有远程分支 | $ git branch -r |
| 3. 列出所有本地分支和远程分支 | $ git branch -a |
| 4. 新建一个分支,但依然停留在当前分支 | $ git branch [branch-name] |
| 5. 新建一个分支,并切换到该分支 | $ git checkout -b [branch-name] |
| 6. 切换到指定分支,并更新工作区 | $ git checkout [branch-name] |
| 7. 将现有分支与指定远程分支建立追踪关系 | $ git branch --track [branch] [remote-branch] |
| 8. 合并指定分支到当前分支 | $ git merge [branch] |
| 9. 删除分支 | $ git branch -d [branch-name] |
| 10. 删除远程分支 | $ git push origin --delete [branch-name] |
六、标签
| 1. 列出所有tag | $ git tag |
|---|
| 2. 新建一个tag在当前commit | $ git tag [tag] |
| 3. 新建一个tag在指定commit | $ git tag [tag] [commit] |
| 4. 删除本地tag | $ git tag -d [tag] |
| 5. 删除远程tag | $ git push origin :refs/tags/[tagName] |
| 6. 查看tag信息 | $ git show [tag] |
| 7. 提交指定tag | $ git push [remote] [tag] |
| 8. 提交所有tag | $ git push [remote] --tags |
七、查看信息
| 1. 显示变更的文件 | $ git status |
|---|
| 2. 显示暂存区和工作区的差异 | $ git diff |
| 3. 显示你今天写了多少行代码 | $ git diff --shortstat "{0 day ago}" |
| 4. 显示当前分支的最近几次提交 | $ git reflog |
八、远程同步
| 1. 将现有仓库与远程仓库建立联系 | $ git remote add origin [remote address] |
|---|
| 2. 下载远程仓库的所有变动 | $ git fetch [remote] |
| 3. 显示所有远程仓库 | $ git remote -v |
| 4. 取回远程仓库的变化,并与本地分支合并 | $ git pull [remote] [branch] |
| 5. 上传指定分支到远程仓库 | $ git push [remote] [branch] |
| 6. 推送所有分支到远程仓库 | $ git push [remote] --all |
九、回退
| 1. 恢复暂存区的指定文件到工作区 | $ git checkout [file] |
|---|
| 2. 重置当前HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致 | $ git reset --hard [commit] |
| 3. 恢复暂存区所有文件到工作区 | $ git checkout . |
| 4. 远程版本回退 | 先本地版本回退后再使用命令:$ git push origin HEAD --force |
十、暂存
| 1. 暂存 | $ git stash |
|---|
| 2. 查看暂存记录 | $ git stash list |
| 3. 恢复暂存并删除这个记录 | $ git stash pop stash@{index} |
| 4. 恢复暂存并保留这个记录 | $ git stash apply stash@{index} |
| 5. 删除某个暂存记录 | $ git stash drop stash@{index} |
| 6. 删除全部暂存记录 | $ git stash clear |
十一、其他
| 1. 生成一个可供发布的压缩包 | $ git archive |
|---|
| 2. 将一个或多个特定的提交应用到当前分支(非常有用) | $ cherry pick |
为什么要学习git
git是目前企业进行代码管理非常主流的工具,掌握git工具是非常重要的,而且git的功能并不只有平时push,clone这些简单的拉取代码,推送代码,它还能对代码暂存、分支合作、合并分支、解决分支冲突等功能,在实际应用中非常重要,希望每个同学都能够多多了解git,对于以后的代码管理能有很大的帮助。