git常用命令

 

 

git教程参考(廖雪峰的教程):https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

1、基础命令

1)初始本地库

命令:git init 

 

2)添加修复到缓冲区

命令:git add

命令:git add . 【注意有个句点】是添加所有文件的修改到缓冲区

不管是新增的文件还是修改的文件,都要add到缓冲区再commit提交

 

3)删除版本库里面的一个文件

命令:git rm 文件名

比如项目里有个文件要删除,先在工作区删除,然后执行上面的命令,就会在把删除操作添加到缓冲区,commit后会生效

 

4)查看状态:比如当前分支、文件修改情况

命令:git status

 

5)把缓冲区的修改提交到版本库

命令:git commit -m ‘提交的说明’

 

6)修改撤回

命令:

git reset --hard HEAD^           回退到上一个版本
git reset --hard HEAD^^         回退到上2个版本
git reset --hard HEAD~100    回退到上100个版本
git reset --hard 版本号(commit id)       回退到指定版本

 注意:git log 命令可以查看提交的版本号

 

7)回退工作区文件的修改

命令:git checkout -- 文件名 

注意:如果文件的修改提交到了缓冲区,而且之后还有修改,那么此命令会让工作区内容和缓冲区一致

  

8)从缓冲区撤回修改到工作区

命令:git reset HEAD 

 

9)查看提交日志

命令: git log
git log --pretty=oneline  按时间线查看

 

10)查看历史操作命令

命令: git reflog

 

11)克隆仓库

命令: git clone 仓库地址

仓库地址可以是 git@.....  或者https://......执行这2种协议,git协议的传输会快些

 

12)分支相关

git branch  查看本地分支

git branch -a 查看远程库分支

git branch 分支名  创建新分支

git branch -d dev  删除分支。如果分支没有合并到其他分支,那么会有报错提示。

git branch -D dev 强制删除分支 

 

13)切换分支

git check 分支名

git check -b 分支名  创建并切换到新分支

 

14)关联远程库分支

git remote add origin 远程库地址

注意:

git remote add 远程库名 远程库地址
本地代码可以关联多个远程库,远程库名和地址要区别开来,不能都用origin

 

15)推送代码到远程库

git push -u origin 分支名 

git push origin 分支名

 

16)合并分支

git merge 分支名

这里比如当前是在master,然后执行 git merge dev,是把dev分支合并到master分支

git merge -m ‘合并分支说明’ 合并分支并提交说明

 

17)暂存修改

git stash 把工作区的修改暂存

git stash list  查看存储的内容列表

git stash apply stash内容恢复到工作区,stash列表里面不删除该内容,需要用 git stash drop 来删除

git stash pop stash内容恢复到工作区,stash列表里面会删除该内容

 

18)查看远程库信息

git remote  查看远程库信息  

git remote -v会展示更详细信息

 

19)拉取代码

命令: git pull 
如果失败,可能是本地分支和远程分支没有做关联
git branch --set-upstream-to=origin/dev dev
git branch --set-upstream-to <branch-name> origin/<branch-name>

 

20)标签相关

git tag 查看所有的标签,结果按照字母排序,而不是按照时间排序
git tag 标签名 打标签,根据当前分支的最新commit id
git tag 标签名 指定commit id
git tag -a 标签名 -m 标签说明
git show 标签名 查看标签的信息

git tag -d 标签名 删除一个本地标签
git push origin 标签名 把标签推送到远程库
git push origin --tags 推送本地尚未推送到远程的所有标签
如果标签已经推送到远程,则要分两步删除,先删除本地,再删除远程
第一步  git tag -d 标签名
第二步  git push origin :refs/tags/标签名

 

21)回退版本

命令: git revert 版本号 

 

2、实操

1)github上创建仓库,注意要创建一个新文件,名字没关系,比如readme.txt或者index.html等都行

2)电脑上打开git bash,然后git clone,选择git协议的

前提是必须把自己电脑上的.ssh目录下的公钥在github上配置下。

备注:使用git协议的,如果ssh生成公钥密钥时没有设置密码,那么以后git push 就不需要输入密码。

使用https方式的,每次都要输入密码。所以推荐git协议的。

 3)修改文件,git clone后本地有一个index.html,修改文件内容,然后提交

git add index.html

git commit -m "111"

4)推送到远程库

5)本地新建分支dev,并切换到dev分支

 

本地分支是dev,远程分支还没有dev

6)修改文件并提交dev分支

当前在dev分支,修改index.html的内容然后提交

git add index.html

git commit -m "222"

7)推送到远程的dev分支

先测试下直接git push会不会报错:

报错了,表示本地dev分支没有关联一个远程分支。此时远程也没有dev分支。

下面执行正确的命令:git push origin dev

 

推送成功。

在github上查看:

 

而dev分支:

 

8)合并dev分支代码到master分支

首先,先切换到master分支:

开始合并分支:

 

推送到远程库:

 

然后在github上查看:

 

3、其他

1)reset 和 revert都能回退,有什么区别呢?

先看下reset命令。新建reset.txt文件,提交了3次:

文件内容:

现在回退到第一次提交:

现在看下文件的内容:

文件内容已经改为第一次提交的情况

看下远程库的:

本地的先提交下:

提示说没有可以提交的。因为reset是回退版本,工作区的文件内容会退到了第一版。缓冲区没有修改的,所以会有这种提示。

远程库的也没有改变,

直接push也失败了。原因是远程库的代码版本领先本地的版本,因为本地的版本是回退了。所以直接push会提示不能用老版本覆盖掉新版本。

强制推送,成功了。因为是强制推送,表示可以覆盖,所以远程库也就跟本地一样,回退了。

 

 

下面看下revert的操作过程:

新增revert.txt,提交了三个版本:

 

revert.txt文件内容:

现在回退到上一版:

 

这里是因为我在编辑器打开了这个文件,所以有警告。但是实际上文件内容已经修改了:

可以看到回退的内容是到了缓冲区,需要提交

这样推送后,本地和远程的就一致了。

现在开始对比下reset和revert的区别

第一、reset回退版本,首先是回退本地的,如果此时就要提交到远程,要强制提交;

第二、revert回退版本,也是首先回退本地的,本地文件会被修改,而且是直接提交到了缓冲区,需要commit,然后可以推送到远程库;

第三、reset回退的,中间有版本提交信息丢失,revert的能看到每一次提交的,回退本身也是一个提交操作。

第四、从第三点可以看出,如果是reset提交,那么如果回退后并且提交到远程库,还想恢复,应该恢复不了。而revert的,因为每一次提交都保留了记录,所以很安全。

综上,还是建议用revert命令。reset用来恢复文件比较好。

 

posted @ 2018-11-24 15:28  汤姆雷特  阅读(224)  评论(0编辑  收藏  举报