Git 一个开源的分布式版本控制系统,最常用于代码开发过程中版本控制
这里简单总结记录一下git常用命令,最主要是由于某些原因提交错误要进行回滚撤销操作。
你电脑上的本地目录,该目录中存放着将要或者已经被Git所管理的项目文件
英文叫 stage 或 index。一般存放在工作区 .git 目录下的 index 二进制文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
工作区有一个隐藏目录 .git,这个是 Git 的版本库。
一般服务器上(如:Github或者自己搭建的Gitlab)会存在一个项目文件的版本库,服务器上的版本库就叫远程版本库。
git pull 命令
从远程的版本库clone 拉取文件到本地版本库
git push 命令
从本地版本库推送更新的文件到远程版本库,达到本地和远程文件一致
一般采用 git log 命令查看如下内容:
这里面的 HEAD origin是什么意思?
可以将 HEAD 看做当前工作区文件所属的是哪一个分支
指的就是远程仓库
上面图中 git log 后的第一条信息:
commit a3bc6e672da90112565e76b50474e2b09ab99a99 (HEAD -> master, origin/master, origin/HEAD)
表示 当前本地电脑上的文件归属 master 分支(HEAD -> master), 本次commit后也推送到了远程master上
$ git checkout -- aaa.txt # 丢弃文件 aaa.txt的修改
$ git checkout -- . # 丢弃全部没有提交的文件的修改
注意:
该命令将丢弃文件的全部修改,回到和远程服务器上版本一致
$ git reset HEAD aaa.txt # 取消暂存,将文件重置回场景1
$ git reset HEAD . # 取消刚刚add的所有文件的暂存,将文件重置回场景1
该命令不会丢弃文件的修改,如果你还想丢弃这两个文件的全部修改,参考 场景1的方法
使用 git log 命令可以发现,当前本地版本库的版本要高于远程版本,也就是说已经commit了但没有push,此时可以采用下面的命令回滚本地仓库。
$ git reset --hard # 回到其中你想要的某个版
注意:例如上图,commit_id 应该是 “测试提交1”的commitId
$ git reset --hard # 回到其中你想要的某个版
$ git push origin HEAD --force # 强制提交远程 此时本地远程仓库版本一致,一并回退到
针对场景3 :
如果此时又返回刚刚的回退版本操作,想还是恢复刚刚的操作怎么办?
采用 git reflog 查看所有的git操作命令日志
看到 HEAD@{0} HEAD@{1} HEAD@{2} HEAD@{3} … 了吗,
当前版本是 HEAD@{0},其实之前 HEAD@{1}是最新的版本的,我们想**前滚**到 HEAD@{1}这个commit_id 上怎么做?
还是和场景3的做法一致!
$ git reset --hard c45051284d211114cdce1499e635bc8252e0bbba # 强制前滚到 "测试提交2" 那一次提交操作
$ git push origin HEAD --force # 强制提交远程 此时本地远程仓库版本一致,一并恢复到
例如下面的情况,我想撤销 “测试提交3” 这一次的全部文件修改,怎么弄?
采用 git revert 命令进行撤销提交操作
通过revert命令反做一个版本的提交,git revert是用于“反做”某一个版本,以达到撤销该版本的修改的目的。
git revert -n c45051284d211114cdce1499e635bc8252e0bbba # 撤销 “测试提交3” 那一次的提交,不影响“测试提交4”的提交 ,-n 是--no-commit 如果不带这个参数会自动提交一条commit
git revert 之后,反做的操作已经add到了暂存区,可以进行本地文件修改操作,然后再次做commit操作和push操作。
THANKS OVER .