版本控制
首先理解一下版本控制,版本控制是一种记录若干个文件变化内容,以便将来查阅特定版本修订情况的系统。
创建版本库
可以将其理解为一个目录,这个目录里所有文件都可以被管理,所有文件的修改,删除,git都可以跟踪,以便将来追踪历史,因而也可以还原。
mkdir + 文件夹名 这样就创建了一个文件夹
cd + 文件夹名 这样就打开了文件夹
pwd 显示当前目录
将当前目录变为git可管理的仓库
git init
在当前文件夹中创建文件
直接新建txt文件。
把文件添加到版本库
把文件放到git仓库需要两步
- git add + 文件 包括文件后缀,将文件添加到暂存区。
- 用命令git commit 告诉Git,将文件添加到仓库,将暂存区添加到当前分支。
git commit -m “这里面的内容是说明”
查看仓库当前状态
git status
查看具体修改的内容
git diff + 文件名
显示提交日志
git log
版本号
commit id 不是递增的数字,是根据SHA1计算出来的一个非常大的数字,用十六进制表示,每提交一个新版本,git将其自动串成一条时间线。
HEAD表示当前版本,HEAD^表示当前版本的上一版本 HEAD^^ 表示当前版本的上两版本,往上数100个版本呢,不可能吧一百个^,因此存在另一种方法为HEAD~100。
版本回退
Git 内部有一个指向当前版本的HEAD指针,回退的时候,指针就指向需要回退的那个版本去了。
git reset –hard HEAD^ // 会退到上一版本
git reset –hard + 版本号 // 就会来到版本号的那个版本
记录每一次命令
git reflog
名词解释
Changes to be committed 已暂存状态 还没到分区
modified: readme.txt readme.txt 这个文件被修改过了
nothing to commit, working tree clean 没有需要提交的
Changes not staged for commit: 还没到暂存区
Untracked files未被添加的文件
工作区 电脑上能看到的目录。
版本库 工作区的隐藏目录.git,这个不是工作区,二十git的版本库
暂存区 stage 或者 叫做index master
git为我们自动创建的第一个分支
Fast-forward 快进模式
查看工作区与版本库最新版本的区别 ######
git diff HEAD – 文件名// 注意– 与文件名之间有空格
提交的理解
第一次修改然后git add即将文件添加到暂存区中
第二次修改了然后直接git commit -m 将暂存区的文件提交到分区里,那么分区里是不会有第二次修改的内容。
为什么呢?因为git commit -m 是把暂存区里的文件提交到分区里,而第二次修改的内容没有在暂存区里。
提交的顺序
- 先手动修改文件
- 查看当前状态
- 查看修改的与之前的版本有何差别
- 添加到暂存区
- 将暂存区的文件添加到分区
丢弃工作区的修改
git checkout – file –非常重要,不要漏掉
这边需要分两种情况
1. 文件修改后未添加到暂存区中,撤销修改就回到未修改的情况。
2. 文件修改后并且添加到暂存区后再次修改(第二次修改了),撤销修改就把第二次修改撤销了,回到添加到暂存区的状态。
丢弃暂存区的修改
git reset HEAD file 将暂存区的修改撤销掉重新放回工作区,但是工作区现在被修改了,所以我们需要再一次丢弃工作区的修改
git checkout – file
删除文件
rm + file 工作区的删除但是版本库里面还有
从版本库中删除
git rm test.txt
从版本库中恢复到工作区
git checkout – test.txt
git checkout 就是用版本库的内容覆盖工作区的内容。
与本地的仓库关联
命令 git remote add origin git@github.com: stevenling/learngit.git
第一次将本地库的内容推送到远程库上
git push -u origin master master是当前分支名
以后本地直接提交
git push origin master
克隆仓库
需知道仓库的地址
git clone git@github.com:
stevenling/gitskills.git
创建与合并分支
每次提交,git把它们串成一条时间线,这条时间线就是分支。目前只有一个主分支,即master分支。HEAD不是指向提交,而是指向master分支,master指向提交,HEAD指向的就是当前分支。
当我们创建一个新的分支,例如dev时,git新建了一个指针dev指向和master一样的提交,就是dev与master共同指向一个相同的提交,然后让HEAD指向dev,就表示当前分支在dev上面了。从现在开始,对工作区的修改和提交就是针对dev分支了,比如新提交一下,dev指针往前移动一步,master原地不动。
合并就让master指向完成一切操作的dev的当前提交。
合并完,也可以删除dev分支。
创建并切换分支
git checkout -b dev 分支名
相当于以下两条命令
git branch dev 创建分支
git checkout dev 切换分支
查看当前分支
git branch
会列出所有分支,当前分支前面有*号
合并指定分支到当前分支
git merge + 分支名
删除分支
git branch -d + 分支名