Git基本指令的学习

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010639500/article/details/82384659

Git基本指令的学习

     最近工作中用到了很多git的指令,发现学好git的确可以大大提高工作效率,现在就一些个人常用的git指令做一些总结。本篇文章只涉及到一些指令的操作,对于git的基本原理请自行百度。


目录

使用场景

  • 版本回滚
  • 补丁
  • 工作现场保存
  • 查看操作记录

版本回滚

     在开发迭代的过程中,难免会遇到已经将本地工作push到远端后,发现push的内容是不需要的,这个时候就需要进行版本会滚了。版本回滚有两种操作:
1. git revert

#撤销前一次commit
git revert HEAD

#撤销前前一次commit
git revert HEAD^

#撤销撤回指定commit-id
#比如:git revert 0818badf6882ea2664a205bc8ef3a85425bb2537
git revert commitId
git push ##不会有冲突

     这一种版本回滚的方式用一个新提交来消除一个历史提交所做的任何修改。
2. git reset

#先利用git log查看commitjilu
git log
#再利用git reset回退到希望回退的版本
#git reset --mixed 会保留源码,只是将git commit和index 信息回退到了某个版本
#git reset --hard 改变了HEAD指向,同时抛弃了本地当前工作区的修改
#git reset --soft 回退到之前的版本,但是保留当前工作区的修改,可以重新提交,不涉及index的回退
#此时如果使用git push会提示本地的版本落后于远端的版本
#为了覆盖掉远端的版本信息,使远端的仓库也回退到相应的版本,需要加上参数--force
git push origin <分支名> --force

     这种回滚的方式则是直接删除commit节点。

git revert和git reset的区别

  1. git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit。git reset之后的git push可能导致一大堆冲突.但是revert 并不会.
  2. 如果在日后现有分支和历史分支需要合并的时候,reset 恢复部分的代码依然会出现在历史分支里.但是revert 方向提交的commit 并不会出现在历史分支里。
  3. reset 是在正常的commit历史中,删除了指定的commit,这时 HEAD 是向后移动了,而 revert 是在正常的commit历史中再commit一次,只不过是反向提交,他的 HEAD 是一直向前的。

补丁

     git支持这样一种场景,即:客户使用git 生成patch 给到我们,那我们就需要把客户给到patch 打入到我们的project。git的这一特性能够极大地推进版本的迭代开发。
1. 生成Patch的方法(根据commit记录生成patch)

(1)方法一:利用git format -patch指令
#当前分支所有超前master的提交
git format-patch -M master
#某次提交以后的所有patch
git format-patch 4e16 --4e16指的是commit名
#某两次提交之间的所有patch
git format-patch 365a..4e16 --365a和4e16分别对应两次提交的名称
#某次提交(含)之前的几次提交
git format-patch –n 07fe --n指patch数,07fe对应提交的名称
#git format-patch生成的补丁文件默认从1开始顺序编号,并使用对应提交信息中的第一行作为文件名。
#如果使用了-- numbered-files选项,则文件名只有编号,不包含提交信息;
#如果指定了--stdout选项,可指定输出位置,如当所有patch输出到一个文件;可指定-o <dir>指定patch的存放目录;
2)方法二:利用git diff生成patch
#acb8cd15和4ff35d80为commit的ID号
git diff acb8cd15   4ff35d80  > patch

2.打入patch的方法
将上述过程产生的patch放入代码的根目录

1)方法一:利用git apply patch
git apply xxx.patch
2)利用git am
#在使用git am之前, 你要首先git am --abort 一次,来放弃掉以前的am信息,这样才可以进行一次全新的am。
git am --abort
#git am 可以一次合并一个文件,或者一个目录下所有的patch
#先检查patch文件
git apply --stat newpatch.patch
#检查能否应用成功
git apply --check newpatch.patch
#打补丁
git am  newpatch.patch

工作现场保存

     这也是经常使用的git指令,stash是存放在.git下的一个类似于堆栈的地方,其可以被广泛的应用于分支切换等领域

#git stash常用指令
#查看现有stash
git stash list
#git stash会把所有未提交的修改(包括暂存的和非暂存的)都保存起来,用于后续恢复当前工作目录。
#需要说明一点,stash是本地的,不会通过git push命令上传到git server上。
git stash
#实际应用中推荐给每个stash加一个message,用于记录版本,使用git stash save取代git stash命令
git stash save "xxxxxx"
#重新应用缓存的stash
git stash pop//这个指令将缓存堆栈中的第一个stash删除,并将对应修改应用到当前的工作目录下。
git stash apply//将缓存堆栈中的stash多次应用到工作目录中,但并不删除stash拷贝
# 移除stash
git stash drop xxxx
# 查看指定stash的diff
git stash show

查看操作记录

     git reflog 可以查看所有分支的所有操作记录(包括(包括commit和reset的操作),包括已经被删除的commit记录,git log则不能察看已经删除了的commit记录

猜你喜欢

转载自blog.csdn.net/u010639500/article/details/82384659