git 修改commit_动图详解常用的git命令

1.git merge

git merge用于将一个分支(branch)的修改应用到另一个分支(branch)上。git merge包含两种类型:fast-forward和no-fast-forward。

1.1 Fast-Forward merge

当目标分支(branch)相对于源分支(branch)没有额外的修改时,git不会创建额外的commit,直接进行merge。

eecaf6d0aeaf0423c0862e0902967df7.gif

1.2 No-Fast-Forward merge

当目标分支(branch)相对于源分支(branch)都有修改时,git会在目标分支(branch)上创建新的merging commit。

0346a7d9588c8b380c0230a94c7981ec.gif
Merge Conflicts

git能够解决一部分合并冲突的问题,但当我们想要合并的两个分支(branch)的同一文件中的同一行代码上有不同的修改,或者一个分支删除了一个文件而另一个分支修改了这个文件时,git就不知所措了。

如下图所示,我们同时修改了README.md文件的同一行:

ba7651ce32fe557de39e43c8df51409a.png

git在merge时,会告知冲突位置以及冲突的内容。这时候需要手动解决冲突,并手动提交commit。

7c7b0a6d8af21b31576a7d9b484e2e32.gif

2. git rebase

git rebase拷贝当前分支的提交,然后将这些提交放在目标分支的顶部。

1cc38ca2838175fdca8c04b5567dceb3.gif

Interactive Rebase

Interactive Rebase允许我们在rebase过程中对commit内容进行一些修改。

reword: Change the commit message

edit: Amend this commit

squash: Meld commit into the previous commit

fixup: Meld commit into the previous commit, without keeping the commit's log message

exec: Run a command on each commit we want to rebase

drop: Remove the commit

移除一个commit:

a595357cb9cb2bd64d084008903a9cf5.gif

合并两个commit:

f260088353284add43799cc1e76f6f27.gif

3. git reset

当我们想丢掉之前提交的修改内容时,就可以使用git reset。

3.1 Soft Reset

Soft Reset将HEAD移至指定的commit,但不会移除该commit之后加入的修改。

69f7645c49c3eff9907347f6f98f7b62.gif

3.2 Hard Reset

Hard Reset除了将HEAD移动到指定的commit外,还重置了该commit之后的所有修改,包括暂存区和工作区的所有修改。

4759b52798c50f248d9d79665c91badd.gif

4.git revert

另一种回退commit的方法是使用git revert。git revert创建了一个新的commit,该commit包含了reverted changes。

如下所示,在commit ec5be增加了一个index.js文件,然后我们想要回退该Commit:

c61eecebd8e3a3e722c88fc919a5b3b4.gif

5. git cherry-pick

cherry-pick将其它分支(branch)的某个commit拿过来,合并到当前分支(branch)。

比如我们在dev分支修改了index.js文件,增加了一个commit 76d12,我们需要这个commit应用到master分支:

ce9441a188e37f334694f0684b6485a9.gif

6. git fetch

git fetch从远程分支拉取数据,但不修改本地的状态。

4634e61b02f1d6f63cf004d88ac32a09.gif

7. git pull

git pull相当于git fetch + git merge。

a51c7719f8cfa5a500aee1496f345dea.gif

8. git reflog

git reflog是一个非常有用的命令,可以展示已经执行过的所有动作的日志,括合并、重置、还原,基本上包含你对你的分支所做的任何修改。通过它几乎可以还原你所做的所有修改。

63dea33f309c3d8eb9c14e666442f856.gif

假设我们要回退分支merge操作。当我们执行git reflog命令时,我们可以看到当前repo的状态在合并前位于HEAD@{1}。我们就执行一次git reset,将HEAD重新指向在HEAD@{1}的位置,就可以实现回退merge的功能了。

60ab8c6d87c9b5d3f1aa996b2a6f3c2d.gif

参考材料

1.https://dev.to/lydiahallie/cs-visualized-useful-git-commands-37p1

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值