分布式版本控制 - Git 使用技巧
分布式版本控制系统 Git
一、git介绍:
Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
分布式版本管理:多个贡献者本地都有完整的控制版本功能,可进行版本管理。且通过一个版本服务器共享彼此的代码。 是本地化和集中化的汇总。好处:没有单点问题,不强制依赖服务器,不强制依赖网络环境。典型工具 如 Git
。
二 、如何安装:
管网下载: https://git-scm.com/
Git安装除了安装位置外,其他一直下一步即可。
# 安装后,打开cmd ,自报家门 # 如下信息会在提交代码时要使用,记录在你的每次提交中。以后才知道哪次提交是谁做的,"git log"可以查看 # 执行: git config --global user.name "Your Name" #用户名 git config --global user.email "[email protected]" #邮箱 # 查看信息 git config -l测试:cmd中执行
git version
查看git版本
二、 仓库
对应的就是一个目录
,这个目录中的所有文件被git管理起来。
以后会将一个项目的根目录
,作为仓库。
仓库中的每个文件的修改、删除 git都能跟踪。
三、git基本指令
创建版本仓库:创建一个文件夹,cmd指向该文件夹,然后执行
git init
即可
.git目录
保存仓库的所有内容新增文件:在文件夹中创建一个文件: xx.txt ,然后cmd执行该文件夹,
执行
git add xx.txt
增加一个文件
git add xx.txt xx2.txt
增加多个文件
git add abc
增加当库目录下的abc目录中的所有文件
git add .
增加库目录中所有文件提交文件:
git commit -m "this is a test file"
【-m 后是对本次提交的描述】【提交添加的所有文件】
git commit hello.txt hello2.txt -m "this is a test file"
提交某些文件
git commit -a -m "this is a test file"
自动add并commit所有已跟踪并修改或删除的文件文件状态:
git status
在提交后,如果文件有改动,可以看到文件改动:
git diff hello.txt
查看该文件的改动情况注意:每次对库中内容改动后,都需要 add 和 commit操作,同步git,git中会记录当前仓库的快照(版本)。
删除文件:
git rm hello.txt
并git commit hello.txt -m "xxx"
即可
帮助:
git help commit
或git commit --help
日志 - 提交历史:
每次 commit,随着版本的记录,也会留下日志。
执行:git log
# 显示从最早的提交点 到 当前提交点的 日志
git log --oneline
#简洁日志显示
git log --oneline -2
#简洁日志显示,最近2次提交日志
git log --oneline --graph
#图形化显示分支走向
# commitID 描述
1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master) append xxx
e475afc93c209a690c39c13a46716e8fa000c366 add words
eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0 add one line
注意git的 commitID
是通过SHA1计算出来的一个非常大的数字,用十六进制表示,在分布式中保证唯一。
版本回退:
每次的修改文件并add、commit 。git中也会记录一个版本。如果有需要可以回退到之前的一个数据版本状态。
执行:
git reset --hard HEAD~
# 回退到上一个版本
git reset --hard HEAD~~
# 回退到上上一个版本
git reset --hard HEAD~5
# 回退到上5个版本
执行:
git rest --hard e475a
#回退到commitID 为 "e475a..."的版本, commitID可以只写前几位,唯一即可
总结:
1> 每次commit,git都会保留一个版本,每个版本都有一个全局唯一的commitID
2> git有个游标:HEAD
,指向当前的版本,所以可以移动游标来回退版本
3> 也可以通过 commitID 回退到某个版本
4> 回退并不会删除任何版本,所以版本间可以来回切换
细节:发生版本回退后,通过 git log
只能看到最原始提交点 至 当前提交点的 日志。git reflog
可以看全部日志
四、架构
版本库:工作区中有一个隐藏目录 .git
,这个目录不属于工作区,而是git的 版本库
,是git管理的所有内容
暂存区:版本库中包含一个临时区域,保存下一步要提交的文件。
分支:版本库中包含若干分支,提交的文件存储在分支中
如下图:
1、文件首先出现在工作区,如果需要有git管理,则通过 git add xx
将文件添加到暂存区 通过 git commit ...
将暂存区的文件一次性提交到分支
中 同时提交行为将触发git的一次commit日志记录。
2.关于分支
是git的一个重要概念,master分支是安装git时默认创建的 。
五、文件状态
切换到某分支,在工作区操作其文件,文件的状态会有如下可能:
未跟踪
工作区中新创建的文件,git中并未保存它的任何记录
git add 增加到暂存时,即可建立跟踪
修改
已跟踪的文件,在工作区被修改了。
暂存
git add 的文件,处于暂存状态。
每次暂存的是文件的当时状态,如果暂存后又做了修改,需要再次 git add文件。
每次提交时,是将所有暂存的文件提交。
提交
git commit 的文件,处于提交状态。
每次提交,增加一个快照版本,分支指针后移,指向最新版本。
3.3 文件状态查看
在工作区中一系列操作后,要查看文件状态:
执行:
git status
可以看到文件状态:On branch master #分支 master
Changes to be committed:
#说明有内容在暂存区可以提交
(use "git reset HEAD <file>..." to unstage)
modified: hello.txt
On branch master #分支 master
Changes to be committed:
#说明有内容在暂存区可以提交
(use "git reset HEAD <file>..." to unstage)
modified: hello.txt
Changes not staged for commit:
#说明有内容没有增加到暂存区
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: hello.txt
细节:通过
git diff
比对变动情况:
git diff hello10.txt
比对工作区和暂存区(若暂存区没有,比分支)
git diff HEAD -- hello10.txt
比对工作区和分支中的最新结果 ( 了解或忽略此点 )
git diff --staged hello10.txt
对比暂存和分支中的最新结果 ( 了解或忽略此点 )坑:
-- hello10.txt
之间需要分隔,不能写成--hello10.txt
撤销修改 、
工作区撤销 :
执行:git checkout -- hello9.txt
可以撤销到最近一次 git add 或 git commit
的状态
即:如果 暂存区有此文件,则将暂存区中的文件内容恢复到工作区。 如果 暂存区没有此文件,则将分支中的文件内容恢复到工作区。
注意:-- hello9.txt
一定不能少写 --
,否则就是其他语意啦。
暂存区撤销:
如果在工作区中修改了文件并发送到暂存区中,但文件中有需要撤销的内容
则可以执行:git reset HEAD hello9.txt
将hello.txt在暂存区的内容清除。
然后可执行:git checkout -- hello9.txt
回退到上一个版本