git 放弃merge_可能需要的Git填坑指南

在实际工作中,几乎所有的公司都用Git来管理代码。实际中的Git往往不像教程那样简单,仅仅是pull、push、merge是远远不能解决问题的。而Git一旦出了问题往往需要很多时间去Fix。为了避免这些人为错误,本文列举了一些实际工作中出现的Git的问题,可以避免更严重的情况发生。

本文翻译自:

Oh, shit, git!​ohshitgit.com

Git很难:搞砸很容易,弄清楚如何解决你的错误是不可能的。 Git文档有这个鸡和蛋的问题,你无法搜索如何让自己摆脱困境,除非你已经知道如何精确描述解决你的问题需要知道的事情。

所以这里有一些我自己陷入的糟糕情况,以及用人话说明我最终是如何将自己从这些情况中解脱出来的。

我做了一件非常糟糕的事,请告诉我git有一台神奇的时间机器

git 

您可以使用它来获取意外删除的内容,或者仅删除您尝试的导致Repo破坏的某些内容,或者在错误的合并恢复,或者只是回到一切都没问题的时间点。我经常使用reflog。很多很多很多人建议添加它!

我提交了一个Commit并立即意识到我需要做一个小更改

#做出改变
git add . # or add individual files
git commit --amend
#根据提示更改或保留提交消息
#现在你的上次提交包含了这个改变!

这通常发生在我身上,如果我提交,然后运行tests / linters... 日,我没有在等号之后放置一个空格。您也可以将更改作为新提交进行,然后执行rebase -i将它们压缩在一起,但上述方法大约快一百万倍。

我需要更改上次提交时的消息

git commit --amend
#根据提示更改Commit消息

愚蠢的提交邮件格式要求。

我不小心向Master上Commit了一些应该在一个全新的分支上的东西

#从当前master状态创建一个新分支
git branch some-new-branch-name
#从主分支中删除提交
git reset HEAD~ - hard
git checkout some-new-branch-name
#你的提交现在已经在这个分支:)

注意:如果你已经推送到线上,这不起作用。如果你先尝试了什么其他的东西,你可能需要git reset HEAD@{number}而不是HEAD~。这是一个悲伤的故事。此外,许多人建议了一种我不知道的很棒的方法来缩短它,谢谢!

我不小心Commit到了错误的分支

#撤消上次提交,但保留更改
git reset HEAD~ --soft
git stash
#移动到正确的分支
git checkout name-of-correct-branch
git stash pop
git add. #或添加单个文件
git commit -m “你的消息在这里”
#现在您的更改位于正确的分支上

很多人也建议在这种情况下使用cherry-pick,所以请选择你最能理解的操作

git checkout name-of-correct-branch
#抓住最后一次提交到master
git cherry-pick master
#从master中删除它
git checkout master
git reset HEAD~ - hard

我试图运行diff,但什么都没发生

git diff --staged

如果没有此标志,Git将不会对已添加到暂存区域的文件进行diff操作。¯ _(ツ)_ /¯(是的,这是一个功能,不是一个bug,但是第一次发生在你身上时,它是令人困惑和不明显的!)

一团糟,我放弃了

cd ..
sudo rm -r fucking-git-repo-dir
git clone https://some.github.url/fucking-git-repo-dir.git
cd fucking-git-repo-dir

从头再来,感谢Eric V.提供了这个

以上这些问题,几乎我也在工作中全部遇到过,有些是自己搞出来的,有些是别人的问题。希望这篇文章能对减少Git的问题有一点帮助,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值