创建版本库
- 在文件夹下使用命令
git init,将会在文件夹下多出来一个.git的文件夹 - 在此文件夹下创建文件,例如自述文件
readme.md - 将文件添加到仓库
git add readme.md - 将文件提交到仓库
git commit -m "提交说明"
时光穿梭机
版本退回
-
使用
git log查看历史版本信息,可以得到从近到远的提交日志。太眼花缭乱的话可以在后面加上
git log --pretty=oneline其中
commit xxxxxxxxxxxx一串数字和字母是版本号 -
在
git中,HEAD表示当前版本,由^个数表示上几个版本,HEAD^^表示上上个版本,过多的话使用HEAD~100表示上100个版本 -
使用命令
git reset --hard HEAD^退回到上一个版本,也可以使用版本号进行退回,将HEAD^改为版本号的前面几位就可以,不固定位数,git会自己查 -
在退回之前版本之后,重新检查版本信息就没了你退到此版本之后的版本信息了
-
若是之前版本号还有的话,可以直接使用版本号回去,若是没有版本号,使用
git reflog可以查询历史每一次命令,就可以见到命令位置前面的版本号了,表示的是此命令得到结果的版本号
git log命令可以查到对版本库的历史信息,但是若是你退回到了之前的版本之后,该命令不会再显示之后版本库信息。
git reflog则是会查询所有的历史命令,并在每一行之前标注此行所在的版本库id,通过此版本号,可以重新找回丢失的版本信息
工作区与暂存区
工作区是指当前这个目录,我们能看到的文件夹,版本库是指.git隐藏文件,不属于工作区,是git的版本库,其中最重要的是stage或者是index的暂存区,还有git为我们创建的第一个分支master,以及指向master的一个指针叫做HEAD
-
对之前文件进行修改,并创建一个新的文件之后。使用
git status查看状态,显示情况为:
提示对于提交的文件没有暂存的修改,可以使用add提交到暂存,也可以使用checkout放弃,红字是文件名。未跟踪的文件,有
LICENSE -
使用
git add提交两个文件,是将文件修改添加到暂存区,,重新使用git status查看状态
显示更改没有被提交
-
git commit是将暂存区的文件提交到当前分支。再次查看状态,显示
暂存区没有任何内容了
管理修改
git的管理修改是指,只对使用add提交在暂存区的修改就行管理。若是修改完之后提交到了暂存区,然后再次对文件进行修改之后,没有提交暂存,而是直接提交到了分支,查看当前状态会告诉你当前又修改没有提交到暂存区。使用git diff HEAD -- readme.md此命令是查看工作区与暂存区的区别,会发现显示

若是将修改的也提交暂存再提交到分支,重新查询之后显示

撤销修改
-
对文件修改过了,未提交到了暂存区。此时想删除修改,使用
git checkout -- readme.md将修改的文件内容去掉,工作区修改的内容就没有了,此命令将工作区的内容,撤销到最近一次的git commit或者git add。 -
若是对文件进行了修改,提交到了暂存区,还未提交到分支。
使用
git reset HEAD readme.md,把暂存区的修改撤回到工作区,此时工作区有修改,暂存区是干净的。
删除文件
-
对工作区的文件进行了直接的删除或是在git中使用
rm <file>删除了文件,查看git状态,可显示
显示
test.txt文件已经被删除了,但是版本库中还保存的有 -
若是想在版本库中也进行删除,使用
git rm <file>,此步表示你将工作区的删除提交到了暂存区中,此时这个命令与git add的作用相同,并且提交到分支的版本库中git commit,显示为
可以看到在提交版本库之后,是不能再指定恢复单个文件的,但是仍然可以通过回复版本库的形式完成对文件的恢复。
-
若是想完成对文件的恢复,可以使用
git checkout -- <file>使用版本库里的指定文件版本替换工作区的版本。可以恢复单个文件若是只有删除文件,也可以查询版本号,通过退回到指定的版本库,实现版本库对工作区的更改。
git reset --hard xxxx,注意恢复的是指定的某个版本库
若是将文件提交到版本库中,你不需要担心误删,能将文件恢复到最新的版本库版本,也就是说,这样你会丢失,最新提交之后到删除之间,进行修改的内容
远程仓库
添加远程仓库
-
在电脑用户目录里有
.ssh文件夹,先cd到达该文件夹,否则会在当前目录直接创建 -
创建密钥对。
$ ssh-keygen -t rsa -C "aaa",其中aaa是名称??常见使用的 是自己的邮箱。
Enter file in which to save the key需要你为密钥对创建一个名字,若是直接回车创建的默认名字为id_rsa,接着会让输入两次密码,然后生成私钥(不可泄漏)和公钥.pub -
登录GitHub,在账户设置里找到SSH,将公钥的内容添加进去就可以了
从远程仓库克隆
git clone git@XXXXXXclone之后的是需要克隆仓库的SSH协议地址
分支管理
分支的作用是保持当前的内容不变,在此基础上创建分支进行操作,此时主分支的提交点并没有改变,达到一定效果将分支与主分支进行合并。
创建分支与合并分支
在git中,主分支为master分支(习惯把它作为主分支,也可以把其他的作为)。HEAD严格来说并不是指向提交而是指向master,master才是指向提交,HEAD指向的就是当前分支
-
创建并切换分支。
git checkout -b xxx=git branch xxx创建分支git checkout xxx切换分支。因为git checkout -- <file>命令是撤销文件可能会引起歧义,所以使用git switch -c xxx表示创建并切换分支=git branch xxx创建分支git switch xxx切换分支 -
使用
git branch不加分支名称,表示的是查看所有分支,当前分支会在名称前加上一个*
git merge xxxxxx为需要合并的分支,将它合并到主分支上
然后删除
dev分支,使用git branch -d xxx完成
解决冲突
如果对同一段内容在不同的分支上进行了不同的修改,提交到分支版本之后然后进行合并,会显示

提示内容为:自动合并文件,冲突(内容)为在文件中合并冲突了,自动合并失败请修改冲突再提交
查看当前状态会显示

在主分支上,有未合并的路径,(修复冲突并运行“git Commit”)(使用“git Merge–Abort”中止合并),取消合并路径:(使用“git add<file>.” 标记解决方案)
查看当前文件内容cat <file>

其中标记处了不同分支的内容,(但是)
修改之后重新进行提交,合并成功

使用log查看历史版本信息,加上参数--graph可显示图谱,分支合并的情况,加上参数--abbrev-commit可将版本号只显示前几位,加上参数--pretty=oneline可以只显示简略历史版本信息。

分支管理策略
通常合并使用的是Fast forward模式,但是这种模式下,删除分支之后会丢失分支消息。如第一条历史记录所示,该条是在dev分支提交之后,然后合并的,已经看不到分叉的显示。

如果要强制禁用此模式,git就会在合并时生成一个新的提交(commit),这样就可以看出分支信息。git merge --no-ff -m "xxxxx" dev,因为生成新的commit,所以需要-m xxxx给出提交的信息,此时可以看到在历史记录的第三条显示着在其他分支提交之后,然后再一次的合并到主分支上了,并且将这一次的合并作为一个提交记录下来。
Bug分支
每个bug通过新的临时分支来修复,修复之后合并分支,再将临时分支删除。