背景
- Git是一个开源的分布式版本控制系统,被广泛用于跟踪和管理源代码的变更。它由Linux创始人林纳斯·托瓦兹于2005年创造。
- Git的主要目标是提供速度、数据完整性和对非线性工作流程(如多个同时并行工作的分支)的支持。
- 以下是关于Git的一些重要特性:
1.分布式架构:与集中式版本控制系统不同,每个开发者的电脑上都有一个完整的仓库副本,包含所有的文件和历史记录。这使得开发者在没有网络连接时也能进行工作,并且可以减少对中央服务器的依赖。
2.数据完整性:Git使用SHA-1哈希来标识对象(如提交、文件内容等),确保了数据的完整性和一致性。
3.分支和合并:Git的一个核心特性是它对分支的处理。创建、删除和切换分支的操作都非常快速和轻量级。同时,Git的合并操作也设计得很好,保证了在并行开发过程中的效率。
4.性能:Git优化了许多操作以提高性能,比如通过压缩数据存储和传输、延迟推送等方式。
5.安全性:Git的设计注重安全性,比如通过权限管理和加密技术保护数据。
6.灵活性:Git支持多种工作流程,可以适应不同大小和类型的项目。
git常用十二命令集
1.git init:在当前目录下创建新的Git仓库。
2.git clone [url]:克隆(即下载)一个项目和它的整个代码历史。
3.git add [file]:将文件添加到暂存区。
4.git commit -m "[message]":提交暂存区的文件变动到仓库中,并附加上修改信息。
5.git status:查看仓库当前的状态,显示你有文件被修改但还未提交。
6.git diff:查看执行git status的结果的详细信息。
7.git log:查看所有提交记录。
8.git branch:列出所有本地分支。
9.git checkout [branch-name]:切换到指定分支并更新工作区。
10.git merge [branch]:将指定分支的历史变动合并到当前分支。
11.git pull:获取并合并远程仓库中的数据到本地。
12.git push [remote-name] [branch-name]:将本地的修改推送到远程仓库。
git分支管理
- 查看分支: git branch -a
- 创建分支: git branch name
- 切换分支: git checkout name
- 创建并切换: git checkout -b name
- 合并某分支到当前分支: git merge name
- 删除分支: git branch -d name
git stash
当您想记录工作目录和索引的当前状态,但又想返回一个干净的工作目录时,请使用git stash。该命令将保存本地修改,并恢复工作目录以匹配头部提交。
# 保存当前未commit的代码
git stash
# 保存当前未commit的代码并添加备注
git stash save "备注的内容"
# 列出stash的所有记录
git stash list
# 删除stash的所有记录
git stash clear
# 应用最近一次的stash
git stash apply
# 应用最近一次的stash,随后删除该记录
git stash pop
# 删除最近的一次stash
git stash drop
- 当有多条 stash,可以指定操作stash,首先使用stash list 列出所有记录:
$ git stash list
stash@{0}: WIP on ...
stash@{1}: WIP on ...
stash@{2}: On ...
- 应用第二条记录,pop,drop同理:
$ git stash apply stash@{1}
git revert
将现有的提交还原,恢复提交的内容,并生成一条还原记录。
- revert普通提交
git revert <commitHash>
- revert合并提交
主要针对merge的分支合并提交,使用上会有些不一样
-m 后面要跟一个 parent number 标识出"主线",一般使用 1 保留主分支代码。
git revert -m 1 <commitHash>
查看tag
// 查看tag,列出所有tag,列出的tag是按字母排序的,和创建时间没关系。
$ git tag
v0.1
//查看指定版本的tag,git tag -l “v1.4.2.**”
$ git tag -l 'v1.4.2.*'
v1.4.2.1
//显示指定tag的信息
$ git show v1.4
tag v1.4
Tagger: Scott Chacon <schacon@gee-mail.com>
Date: Mon Feb 9 14:45:11 2009 -0800
创建tag
//创建轻量级tag:这样创建的tag没有附带其他信息
git tag v1.0
//带信息的tag:-m后面带的就是注释信息,这样在日后查看的时候会很有用
git tag -a v1.0 -m 'first version'
共享tag
//我们在执行 git push 的时候,tag是不会上传到服务器的,比如现在的github,创建 tag 后 git push ,在github网页上是看不到tag 的,为了共享这些tag,你必须这样:
git push origin v1.0
//将所有tag 一次全部push到github上。
git push origin --tags
删除tag
//删除本地tag
git tag -d v1.0
//删除github远端的指定tag
git push origin :refs/tags/v1.0.0
创建基于指定tag的分支
git checkout -b test v0.1.0
git小技巧
- git撤销本地修改
git reset--hard origin/master
git pull
- git回退到前n个版本
git reset --hard HEAD~n
分支合并git merge --no-ff
在做项目开发时会用到分支,合并时采用以下步骤:
$ git checkout feature-branch
$ git rebase master
$ git checkout master
$ git merge --no-ff feature-branch
$ git push origin master