git指令操作说明

121 阅读7分钟

微信技术群:Day9884125

一 介绍

   本次安装和前提准备就不讲了,需要的自行百度吧。直接找git操作指令

二 指令介绍

2.1 版本管理

2.1.1 查看文件状态

git status

image.png
   git status命令可以让我们知道仓库当前的状态,当前红色文件代表在本地新产生的文件。当我们文件编辑完成之后,我们想提交到远程,我们首先要将文件添加到git缓存区里。

2.1.2 将文件添加到缓存区里

git add .

image.png
   git add .指令中的.代表将所有文件都添加到缓存里面。这时候再次查看状态,红色文件就变成了绿色。然后我们提交本次提交注释。

2.1.3 提交注释信息

git commit -m '测试提交文件'

image.png
   注释本次提交做了哪些变动,然后将代码推送到远程仓库

2.1.4 将代码推送到远程仓库

git push origin master

image.png
   然后登录远程仓库,查看文件是否推送到远程仓库上。然后对其中一个文件内容做修改。

2.1.5 查看修改文件后的状态

git status

image.png
   发现我们对read.txt文件做了修改。

2.1.6 查看修改了哪些内容

git diff

image.png
   确认好改变后的内容是否是我们想要修改的内容之后,再把它提交到仓库

git add .
git commit
git push origin master

2.1.7 总结

   要随时掌握工作区的状态,使用git status命令。如果git status告诉你有文件被修改过,用git diff可以查看修改内容。

2.2 版本回退

2.2.1 查看版本信息

git log
// 退出git log 
:q

image.png
   由图可以看出我们有三个版本.要是我们想回退到版本2,git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本,也就是版本3,用HEAD^^表示,如果往上50个版本,我们可以表示成HEAD~50。

2.2.2 版本回退到上一次

git reset --hard HEAD^

image.png
   然后用git log再看看现在版本库的状态,最新的已经看不到了。我们看到这里面也有版本号1d6b6ca41827d1a1b4522550faa3b1ed6b507ac5,所以我们可以指定回到某个版本,我们也可以回到回退前的版本号

git reset --hard be3cdfca8bae6850e9a6ddfc7b8217173fe2f9c2

   用git log再看一下,刚才回退的版本又回来了。git的版本回退速度非常快,因为git再内部有个指向当前版本的HEAD指针,当你回退版本的时候,git仅仅把HEAD从指向新的版本。
   git提供了一个命令git reflog用来记录你的每一次命令,你就可以查到所有版本的commit id,所以不用担心恢复不到以前的版本。

2.2.3 总结

   HEAD指向的版本就是当前版本,因此,git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id
   穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本
   要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

2.3 修改撤销

   在修改了文件之后,且还没有add之前,可以执行以下指令丢弃工作区的修改

git checkout --read.txt

   命令git checkout --read.txt意思就是,把read.txt文件在工作区的修改全部撤销,这里有两种情况: read.txt。

  • read.txt自修改后还没有被放到缓存区。现在,撤销修改就回到和版本库一模一样的状态。
  • read.txt已经添加到缓存区后,又做了修改,现在,撤销修改就回到缓存区后的状态。

   总之就是让这个文件回到最后一次git commit或git add时的状态。
   git checkout --file命令中的--很重要,没有--,就变成了"切换到另一分支"的命令,我们在后面的分支管理中会再次遇到git checkout命令。
   如果你想要修改,已经git add到缓存区,但还没有commit的内容。我们可以用命令git reset HEAD file可以把暂存缓存区的修改撤销掉,重新放回到工作区:

git reset HEAD read.txt

   git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。

2.4 删除文件

   一般情况,你通常直接在文件管理器中把没用的文件删了,或者用rm命令删了。
   这个时候,git知道你删了文件,因此,工作区和版本库就不一致了,git status命令会立刻告诉你哪些文件被删除了。
   现在你有两个选择,一是确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit。

git rm delete.txt

image.png
   现在,文件就从版本库中被删除了。
   另一种情况就是删除错了,因为版本库中还有,所以可以很轻松的把误删的文件恢复到最新版本。

// 这个指令不能直接恢复,后边再研究原因吧
git checkout --mar.txt

2.5 分支管理

   每次提交,git都把它们串成一条时间线,这条时间线就是一个分支。截至到目前,只有一条时间线,在git里,这个分支叫主分支,即master分支。HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以。HEAD指向的就是当前分支。

2.5.1 创建与合并分支

   当我们创建dev分支,git创建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,表示当前分支在dev上。

image.png
首先创建dev分支

// 将master上的内容复制到新创建的分支上
git checkout -b dev

2.5.2 查看仓库所有分支

// 查看仓库的所有分支
git branch -a

// 查看远程仓库的所有分支
git branch -r

// 列出所有分支,当前分支前面会标一个*号
git branch 

2.5.3 分支合并

   刚才我们是在dev环境上,将新的代码提交到dev上,当我们切换到master时候,刚才的代码没了。因为刚提交的是在dev上,而master的提交点没有变。

image.png
现在我们把dev上的代码合并到master上

// 首先当前所在分支是mster,然后将dev的代码合并到master
git merge dev

   这种合并是Fast-forward(快进模式),也就是直接将master指向dev的当前提交,所以合并速度很快。

2.5.4 删除分支

git branch -d dev

2.5.5 更新远程仓库的分支信息

   如果需要获取远程分支的commit信息,情景如下,当前本地clone的仓库分支,在多人多分支操作情况下,是无法通过切换分支等来感知其他分支的变化的,比如分支已经废弃,或者分支提交了新的commit等,这时需要更新远程仓库的分支信息,命令如下。

git fetch

2.6 解决冲突

准备新的分支,day

git checkout -b day

// 修改read.txt文件中的内容
git add .
git commit -m '添加新的内容'
git push origin day

// 切换到master
git checkout master
// 修改read.txt文件中内容,然后提交
git add .
git commit -m 'master添加新的内容'
git push origin master

   现在,master分支和day分支各自都分别有新的提交,变成了这样。 image.png
   这种情况,git无法执行"快速合并",只能试图把各自的修改合并起来,但这种合并会出现问题。我们来看看:

git merge day

image.png
   git告诉我们,read.txt文件存在冲突,必须手动解决冲突后再提交,git status也可以告诉我们冲突的文件。

image.png
我们可以直接查看read.txt文件的内容

image.png
   git用<<<<<<, ==========, >>>>>>>>标记出不同分支的内容,我们修改如下后保存: image.png

git add raed.txt

   现在,master分支和day分支变成了下图所示

image.png
   用带参数的git log也可以看到分支的合并情况,前提合并之后的代码已经提交到远程仓库。

git log --graph --pretty=oneline --abbrev-commit

image.png
   通常合并分支时,如果可能,git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
   如果要强制禁用Fast forward模式,git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。