GIT-常用命令

GIT-常用命令

0. 撤销commit

提交commit 后,还没有push时,想要撤销刚刚的 commit 。

git reset --soft HEAD^

 注意,仅仅是撤回commit操作,您写的代码仍然保留。

1. 合并分支

把远端分支dev1 合并到 当前分支。

$ git merge --no-ff origin/dev1 -m 'merge to 主分支'

merge的三种方式: 

  • fast-forward
    Git 合并两个分支时,如果顺着一个分支走下去可以到达另一个分支的话,那么 Git 在合并两者时,只会简单地把指针右移,叫做“快进”(fast-forward)不过这种情况如果删除分支,则会丢失merge分支信息。
    在merge时如果什么都不加,则使用默认的 --ff , 即 fast-forward 方式则使用默认的 --ff , 即 fast-forward 方式
    如:git merge origin/dev1
  • –squash
    把一些不必要commit进行压缩,比如说,你的feature在开发的时候写的commit很乱,那么我们合并的时候不希望把这些历史commit带过来,于是使用–squash进行合并,此时文件已经同合并后一样了,但不移动HEAD,不提交。需要进行一次额外的commit来“总结”一下,然后完成最终的合并。
  • --no-ff
    关闭fast-forward模式,在提交的时候,会创建一个merge的commit信息,然后合并的和master分支
    0merge的不同行为,向后看,其实最终都会将代码合并到master分支,而区别仅仅只是分支上的简洁清晰的问题,然后,向前看,也就是我们使用reset 的时候,就会发现,不同的行为就带来了不同的影响
    如:git merge --no-ff origin/dev1 -m 'merge to 主分支'
 
分支图区别如下:
 


2.  删除分支

删除本地分支:

 git branch -d dev20181018

删除本地分支-强制

git branch -D dev20181018

删除远端分支:

git push origin --delete dev20181018

3. 修改commit 注释

git commit --amend 

此时会进入默认vim编辑器,修改注释完毕后保存就好了。

4. 撤销本地提交节点

撤销本地的commit,在本地commit后,还没有push。

想要撤回,可执行以下命令

git reset --soft HEAD^

这样就成功的撤销了你的commit,注意,仅仅是撤回commit操作,您写的代码仍然保留。

参数解释如下:

  • --mixed 
    意思是:不删除工作空间改动代码,撤销commit,并且撤销git add . 操作
    这个为默认参数,git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一样的。
  • --soft  
    不删除工作空间改动代码,撤销commit,不撤销git add . 
  •  --hard

    删除工作空间改动代码,撤销commit,撤销git add . 

    注意完成这个操作后,就恢复到了上一次的commit状态。

5. 撤销远端提交节点

如图,我想撤销 dev1分支下的 dev1.3 节点的提交 ,查看到其commit的版本号为 fcb025fc 

//撤销语句
$ git revert fcb025fc

//提交上去即可 $ git push origin dev1

修改后分支图如下:

  

6. 撤销远端merge节点

我有两个分支 dev1、developMas。 

分支dev1 修改后提交 merge 到 developMas,注释:dev1.1

分支dev1 再次修改后提交 merge 到 developMas,注释:dev1.2

  

现在想把developMas 分支上的 dev1.1 合并撤销掉。查看到其版本号为:ad6aa32c 

执行revert语句报错如下

$ git revert ad6aa32c
error: commit ad6aa32c9b691067b701864f8cc7bf713a7725a1 is a merge but no -m option was given.
fatal: revert failed 

如果ad6aa32c 这只是一个普通的提交,其实是不会报错的!
但是,这是一个merge的提交。那么在撤销时,git并不知道我要撤销具体哪次!
可通过show语句查看这次commit的详细信息。

$ git show ad6aa32c
commit ad6aa32c9b691067b701864f8cc7bf713a7725a1
Merge: 57260e7 8059573
Author: lihongyuan <lihongyuan@MF11-XXZXLHY01>
Date: Wed Jan 8 08:26:00 2020 +0800

merge

在GitLab管理页面中也可以看到

 

从图中可以看到,每当你使用 git merge 时,是合并两个分支得到一个新的 merge commit。而Merge 这一行代表的是这个合并 parents,它可以用来表明 merge 操作的线索。
可参考如下语句:
git revert ad6aa32c -m 1
git push

 注解:参数 -m 就是选择一个主线从左往右(按图中的parents版本号顺序),从1开始数。在这个例子中,我要撤销到 57260e7e 下。因此-m 后跟参数1。

(传1表示撤销到57260e7e 所代表的commit,传2表示撤销到80595737所代表的commit)
 
结果图如下:

7. 回退到指定节点

当前master分支图如下,想要回退master 到 指定节点(init prod)下

先用 git pull 保存本地与远端一致。

git pull

查看指定版本号

执行回退命令:

git reset --hard f21b8069

强制提交本地分支覆盖远程分支

git push origin 分支名 --force

8. 取消merge

git merge后想取消merge状态 

 如上图,分支处于|MERGING状态,只需下面命令即可

git reset --hard

 引用:https://www.jianshu.com/p/418323ed2b03

 引用:https://www.cnblogs.com/bellkosmos/p/11409904.html

 引用:https://www.cnblogs.com/lfxiao/p/9378763.html


原文地址:https://www.cnblogs.com/1285026182YUAN/p/12161026.html