Git 是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。说白了就是一个版本控制工具,帮助大家管理自己的代码。Git 最初是 Linus 为了帮助管理 Linux 内核开发而编写,取得良好效果,之后向社区开源,于是就有免费而超级好用的 Git 。
1、工作原理
- Remote:远程仓库,就是类似 github,coding 等网站所提供的仓库
- Repository:本地仓库,执行
git push origin master
提交到远程仓库,执行git clone
地址将克隆远程仓库到本地 - Workspace:工作区,执行
git add *
命令就把改动提交到了暂存区,执行git pull
命令将远程仓库的数据拉到当前分支并合并,执行git checkout branch-name
切换分支 - Index:暂存区,执行
git commit -m "修改说明"
命令就把改动提交到了仓库区(当前分支)
注:实际操作命令和上述命令会有所不同,这里是解释清楚命令和仓库的关系。
2、版本控制方法
- 当文件变更提交时,Git 底层文件系统存储的则为文件快照,即整个文件内容,并保存指向快照的索引,考虑到性能因素,如果文件内容没有发生任何变化,该文件系统则不会重复保存文件,只是简单地保存文件的链接。
- Git 之所以选择这样的底层存储数据结构,主要是为了提高 git 分支的使用效率。实际上,Git 分支本质上是一个指向索引对象的可变指针,而每一个索引对象又指向文件快照,这样一来,创建分支可以瞬间完成。
- Git 可以没有中心服务器的,每个人机器上都是一个完整的库,自带备份效果,我们平时开发代码时的中央服务器其实和我们自己机器上的库内容是完全一样的(格式有点不同,是bare的)。虽然平时大家都是将代码提交到中央服务器上再统一 pull 别人的代码,但实际情况你可以总是 pull 张三的库,然后 push 给李四等等操作。去中心化设计思想所带来的另外一大好处是支持离线工作,在 Git 中的绝大多数操作都只需要访问本地文件和资源。
3、基本操作
3.1、安装
- 下载:Git 下载 可下载 GUI 版本,也可以安装命令版本。
- mac 下如果有安装 Xcode ,Xcode 自带 Git ,如果没有安装 Xcode ,可以通过 Homebrew 安装 Git :
brew install git
3.2、初始化仓库
- 仓库文件夹目录下打开终端运行命令完成初始化:
git int
- 如果从远端仓库开始项目,先要克隆远程仓库:
git clone url
url 为仓库地址。
3.3、配置跟踪文件
- 编辑 .gitignore 设置不需要跟踪的文件夹一夹文件。
3.4、工作流
- git diff 查看文件变化
git diff file_addr
查看某个文件变化;git diff
查看所有文件变化。
- git add 暂存
git add file_addr
暂存某个文件;git add -u
暂存所有已追踪文件,不包含新增文件;git add .
暂存工作区所有变化文件,不包含删除文件;git add -A
暂存工作区所有文件,包含增加 / 删除文件。
- git commit 提交
git commit -m "本次提交说明"
建议多次分类提交,便于管理。
- git push 推送
git push origin branch_name
如:master 或 dev_xx,origin 为主机名。
- git pull 拉取合并
git pull origin branch_name
pull 包含拉取( fetch )和合并( merge )两个操作;- 可分开执行:
git fetch origin branch_name
;git merge branch_name
合并 branch_name 分支到当前分支。
- 分支操作
git checkout dev_xx
切换到 dev_xx 分支;git stash
当需要切换到其他分支又不想提交保存时用于暂存,切换回来之后git stash pop
恢复即可;git checkout -b dev_xx
创建并且换到dev_xx分支;git checkout -d dev_xx
删除 dev_xx 分支。
- git log 查看日志
git log
。
- 撤销 add 文件
git reset HEAD .
撤销所有 add 文件;git reset HEAD filename
撤销指定名字的 add 文件。
- 撤销 commit 文件
git reset HEAD commit_id
完整撤销到某个 commit 状态,不保留修改的代码,无法恢复,危险操作;git reset --mixed commit_id
撤销到某个commit状态,修改的代码保留,且代码未添加到暂存区,需要重新 add;git reset --soft commit_id
撤销到某个commit状态,修改的代码保留且,代码保留在暂存区,可以直接 commit。
git rebase 与 git merge 两者产生不同的历史记录
变基 git rebase 历史 合并 git merge 历史
下一篇
修正笔记本内建显示器连接类型
上一篇
Markdown 基本语法
查看评论