Git操作指令一

创建版本库

选择一个地方创建空目录

  • mkdir <filename>,创建一个空目录;
  • cd <filename>,打开这个目录;
  • pwd显示当前目录
  • git init把这个某变为Git可管理的仓库
  • 给目录中添加文件
  • git add <filename>将文件添加到仓库
  • git commit -m "说明文字"把文件提交到仓库
  • git status查看当前仓库的状态
  • git diff <filename>查看修改的内容
版本回退
  • git log查看详细的历史记录;
  • 如果不想看太详细的信息,使用git log --pretty=oneline,它显示的信息是commitID和commit的说明;
  • 回退到上一个版本git reset --hard HEAD^HEAD表示当前版本,HEAD^上一个版本,HEAD^^上上个版本。如果版本数太大,使用HEAD~n,表示上n个版本,如HEAD~5,往上5个版本。
  • 使用commitId回退,通过git log得到版本信息的commitId,使用指令git reset --hard <commitId>,就能回退到指定的版本。
  • git reflog记录了操作的每一个指令;
  • HEAD是git内部指向当前版本的指针,回退版本就是把HEAD重指向,所以git回退非常迅速。

回退总结:

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

Git和SVN的不同之处在于Git存在暂存区的概念。

  • 工作区:就是在电脑里能看到的目录,比如使用mkdir创建的目录,就是一个工作区;
  • 版本库:工作区有一个隐藏的文件.git,它不算工作区,而是git的版本库。
  • git的版本库存在了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有git为我们自动创建的第一个分支master,以及指向masterHEAD指针。
git的添加操作

这里写图片描述

  • git add把文件添加进去,实际上就是把文件添加进暂存区;
  • git commit提交更改,就是把暂存区的所有内容提交到当前分支;
  • 因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在git commit就是往master分支上提交更改;
  • 一旦提交后,如果又没有对工作区做任何修改,那么工作区就是“干净”的;

为什么Git比其他版本控制系统设计得优秀,因为Git跟踪并管理的是修改,而非文件。 什么是修改?比如你新增了一行,这就是一个修改,删除了一行,也是一个修改,更改了某些字符,也是一个修改,删了一些又加了一些,也是一个修改,甚至创建一个新文件,也算一个修改。

  • git add .提交当前的所有修改;
  • git add <filename>提交修改的文件;
  • git add把修改的内容提交到暂存区;
  • git commit把暂存区的修改提交到当前分支;
  • 如果当前的修改没有git add,则git commit提交的是暂存区的修改,并不会把当前工作区的修改提交到当前分支上;
  • 查看工作区和版本库的区别,使用:git diff HEAD --<fielname>
  • 每次修改,如果不add到暂存区,那就不会加入到commit中;
  • 可以多次add后,再commit
撤销修改
  • 工作区的撤销指令:git checkout --<filename>,把文件在工作区的修改全部撤销掉。git checkout --<filename>中的--很重要,没有--就成了切换到另一个分支的命令。
    1. 修改后的内容还没有被放到暂存区,撤销修改就会回到和版本库一样的状态;
    2. 添加到暂存区后,又修改了新的内容,撤销修改就回到添加到暂存区前的状态;
    3. 总之就是让当前文件回到最近一次git add 和git commit时的状态。
  • 修改提交到暂存区,使用修改指令:git reset HEAD <filename>把暂存区的修改撤销掉,重新放回工作区,重复工作区的撤销;
  • 修改的内容提交到版本库,撤销使用版本回退的指令,git reset --hard <commitid>git reset --hard HEAD^上一个版本库;
  • --hard 删除工作空间的改动代码,撤销commit且撤销add;
  • --soft 不删除工作空间的改动代码 ,撤销commit,不撤销add;
  • 只修改commit的注释:git commit --amend 进入vim编辑模式,修改完保存即可;
  • git reset --hard <commitid>适用于回退到commit-id的那个版本,且commit-id之后提交的版本都不要了.
撤销push操作

推荐使用git reset --hard commit-idgit push origin <分支名> --force:

  • 先执行git reset --hard <commit-id>,回滚到commit-id的提交版本;
  • 再执行git push origin <分支名> --force,本地代码回到commit-id的提交版本;
  • 或使用git push -f提交更改,用git push会报错,因为我们本地库HEAD指向的版本比远程库的要旧,所以要用git push -f强制推上去,此时远程库的HEAD已经指向commit-id的版本;
  • 执行git log 查看版本信息,此时本地的HEAD已经指向commit-id的版本;
  • 步骤二/三作用相同。

使用revert

  • 使用场景:git revert是用于反做某一个版本,以达到撤销该版本的修改的目的。比如,我们commit了三个版本(版本一、版本二、 版本三),突然发现版本二不行(如:有bug),想要撤销版本二,但又不想影响撤销版本三的提交,就可以用 git revert 命令来反做版本二,生成新的版本四,这个版本四里会保留版本三的东西,但撤销了版本二的东西。
  • git log查看版本号,选择要revertcommit-id
  • 执行git revert -n <commit-id>
  • 上一步执行后,可能存在冲突,修改冲突后执行git commit -m '提交说明'
  • 执行git push
  • revert之后再提交,历史纪录里面会有两个commit是无用的。一个错误提交,一个提交revert这个错误的提交。当然你也可以用reset,比如git reset --hard <commit hash>,然后push的时候加上-f 强制更新。但是这个操作很危险,如果别人已经checkout你错误的commit,你又把它reset,这样其他人下次pull,或者push就会有错误。
  • 利用git reset操作回滚代码到指定版本,此种方式比直接revert要好一些,采用soft模式会保留本地代码的变化,hard则不会。
删除文件

在Git中删除也是一个修改操作。
在文件管理器中删除没用的文件使用指令:rm <filename>
Git检测到你删除了文件,因此,工作区和版本库就不一致了,git status命令会立刻告诉你哪些文件被删除了,这时候有两种操作:

  1. 确定要从版本库中删除该文件,用命令git rm <fielname>删掉,并且git commit.
  2. 删错了,如何还原:git checout --<filename>,因为版本库里还存在这个文件。git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值