创建版本库
- 在文件夹下使用命令
git init
,将会在文件夹下多出来一个.git
的文件夹 - 在此文件夹下创建文件,例如自述文件
readme.md
- 将文件添加到仓库
git add readme.md
- 将文件提交到仓库
git commit -m "提交说明"
时光穿梭机
版本退回
-
使用
git log
查看历史版本信息,可以得到从近到远的提交日志。太眼花缭乱的话可以在后面加上
git log --pretty=oneline
其中
commit xxxxxxxx
xxxx一串数字和字母是版本号 -
在
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@XXXXXX
clone之后的是需要克隆仓库的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 xxx
xxx为需要合并的分支,将它合并到主分支上然后删除
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通过新的临时分支来修复,修复之后合并分支,再将临时分支删除。