【GIT】GIT 使用中的一些实用技巧

【GIT】GIT使用中的一些实用技巧

HEAD

HEAD~~ 或 HEAD~2 前两次修改

改写最后一次提交 commit --amend

有时难免粗心大意,commit后,又发现代码中又一些小问题,我们可以通过 –amend 选项将 最后一次提交的内容给修改掉!

$ git add .
$ git commit --amend

问题:
那么,如果我已经提交了MR,在MR的submit界面上,是如何体现这次修改的呢?

回退代码 revert 和 reset

revert 是取消过去的提交,执行 revert 命令后, 会生成一个Revert xxx 内容的提交
reset 是遗弃提交,所以它不会生成一次新的提交

reset 有三种模式,可以根据情况使用:

模式 HEAD 的位置索引工作树
soft 修改不修改不修改
mixed 修改修改不修改
hard 修改修改修改

如果 reset 错了,可以通过

git reset --hard ORIG_HEAD

还原到 reset 前的状态。

问题一:
我可以指定revert任意一次提交吗?revert的内容是仅那次提交的修改,还是那次提交之后所有的修改?
问题二:
soft 和 mixed 用法示例,场景
问题三:
对于已经发布的提交,reset后是如何在MR中体现的?

提取提交 cherry-pick

如果我代码的修改上错了分支,或者想将分支的修改导入到另一个分支,可以使用 cherry-pick
比如我想将某个分支上的 提交 1111 导入到 master

git checkout master
git cherry-pick 1111
git add
git commit

问题:
只能导入那一次提交的内容吗?
比如 master 上有一次提交了,fix 分支上有两次提交,cherry-pick fix上的第二次提交,那么fix上的第一次提交,没有的 ?

合并分支 merge 和 rebase

merge 和 rebase 都可以合并分支的代码,主要差异在于合并后的历史纪录
个人比较喜欢 rebase ,生成的历史纪录更简洁易懂
比如说有两个分支 master 和 fix
merge fix 和 master 两个分支的修改会生成一个提交,保持了修改内容的纪录,但是修改纪录很复杂

git checkout master
git merge fix

解决冲突

git commit . -m "合并fix分支到master"

rebase fix 分支的修改会添加在 master 后面,这样可能会有冲突,但处理之后,历史纪录是一条直线,非常好懂

git checkout fix
git rebase master

解决冲突
rebase 的时候,修改冲突后的提交不是使用 commit 命令,而是执行 rebase --continue。若要取消 rebase,指定 --abort。

git add .
git rebase --continue

这个时候, master 的最后一次修改后面,又追加了 fix 的修改,
然后切换到 master 分支后合并,将 master 分支的 HEAD 挪到后面加入的 fix 的修改

git checkout master
git merge issue3

建议:
在 master 分支中更新 fix 分支的代码,使用 rebase
在 fix 分支中导入 master 分支的修改,先使用rebase,再使用 merge

问题:
没看懂建议…

我只想看看远端的代码长什么样子了 fetch

执行 pull,远程数据库的内容就会自动合并。但是,有时只是想确认本地数据库的内容而不想合并。这种情况下,请使用 fetch。
执行 fetch 就可以取得远程数据库的最新历史记录。取得的提交会导入到没有名字的分支,这个分支可以从名为 FETCH_HEAD 的退出。

汇合提交 rebase -i

比如说

git rebase -i HEAD~~

然后会打开一个文本编辑器,会显示 HEAD 到 HEAD~~ 的提交
将 HEAD commit 前面的 pick 改成 squash
保存退出
然后会自动合并后提交,接着会显示提交信息的编辑器,编辑信息后保存退出
这样两个提交就汇合成一个提交了

修改提交 rebase -i

前面的 commit --amend 只能修改最后一次提交,但是使用 rebase -i 我们可以修改任意一次提交!
首先选择要修改的提交,比如前两次的提交

git rebase -i HEAD~~

然后将第一行的 pick 改成 eidt,保存退出
这个时候修改过的提交会呈现退出状态
然后打开要修改的文件,编辑
再用

git add .
git commit --amend

保存修改
要改的提交都改完了的话,执行

git rebase --continue

这个时候很可能出现冲突,需要修改冲突后再执行 addrebase --continue

如果想要还原到 rebase 之前的状态

git reset --hard ORIG_HEAD

汇合分支的提交然后合并到指定分支

git checkout master
git merge --squash fix

修改冲突

git commit . -m "合并fix分支上的所有提交到master分支"

参考:
https://backlog.com/git-tutorial/cn/reference/
https://blog.csdn.net/qq_32452623/article/details/79599503

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值