版本控制

首先理解一下版本控制,版本控制是一种记录若干个文件变化内容,以便将来查阅特定版本修订情况的系统。

创建版本库

可以将其理解为一个目录,这个目录里所有文件都可以被管理,所有文件的修改,删除,git都可以跟踪,以便将来追踪历史,因而也可以还原。

mkdir + 文件夹名 这样就创建了一个文件夹

cd + 文件夹名 这样就打开了文件夹

pwd 显示当前目录

将当前目录变为git可管理的仓库

git init

在当前文件夹中创建文件

直接新建txt文件。

把文件添加到版本库

把文件放到git仓库需要两步

  1. git add + 文件 包括文件后缀,将文件添加到暂存区。
  2. 用命令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 是把暂存区里的文件提交到分区里,而第二次修改的内容没有在暂存区里。

提交的顺序
  1. 先手动修改文件
  2. 查看当前状态
  3. 查看修改的与之前的版本有何差别
  4. 添加到暂存区
  5. 将暂存区的文件添加到分区
丢弃工作区的修改

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 + 分支名