以后看完一个不光有意思的中文网站 – Oh shit, git!
那个中文网站下面再次整理了许多 Git 初学者在采用 Git 时常会碰到的各式各样紧急状况,并周到的得出了应付计划。
我大体瞄了一看,该文里头提及的许多问题,绝大部分初学者的确会时常碰到,我单纯译者了呵呵,期望对你略有协助。
注:为的是使情景叙述更为生动活泼,因而再次加入了初学者雅典娜与高阶舔狗三个配角来相互配合传授
雅典娜:哎,才刚有位地方性弄错了,是不是再次来过呢?
雅典娜莫慌,Git 的牛逼之处,是它便携式时光机效用,能阳光普照工程项目的发展史标识符中任一穿行。
假如工程项目的某两处地方性它自己不留神装好了,何不紫菊下面的T5800指示:
$ git reflog这条指示能列举你在 Git 上的大部份操作方式记录,你假如找出 HEAD@{index} 后面所相关联的操作方式检索,并采用下面指示方可:
$ git reset HEAD@{index}注:采用时需将HEAD@{index}代替为相关联检索。
雅典娜:想改个罐子,但标识符不留神递交(commit)了,这可咋整?
那个单纯,具体来说,加进下现阶段已更动的标识符:
$ git add .接着,运转下面这条指示,它就会把你才刚加进的标识符分拆到最终一场递交上了:
$ git commit –amend雅典娜:哼!才刚写的递交发展史写得不够好,我想重写呵呵!
好的,还是下面提及过的那条标识符,运转呵呵,就可以重写递交发展史啦:
$ git commit –amend雅典娜:这下惨了,我才刚不留神把新分支的标识符递交到主分支上了!
雅典娜别着急,我们一步步来,你先创建个新分支(some-new-branch-name):
$ git branch some-new-branch-name接着把刚才的递交从主分支中移除:
$ git reset HEAD~ –hard需要注意的是,下面的标识符只会切换到最终一条递交发展史记录上,假如你已跑到其它递交发展史记录上是不是办?没关系,你可以用 git reset HEAD@{number} 再跑回来。
等你跑回来之后,我们再切换到新分支上:
$ git checkout some-new-branch-name好了,完成啦,现在主分支干干净净,才刚不留神递交的标识符也被移到新分支上了。
需要注意的是,下面的标识符只对本地仓库有效,假如你已经把标识符递交到远程仓库上,那就得跟队友商量下解决计划了。
啥?我就是你队友?这可真让我受宠若惊☺️ 不过没事,等下我帮你在线上主分支上 reset 接着 push -f 呵呵就好啦~
雅典娜:完蛋了,我把标识符递交到错误的分支上了!
别怕别怕,有我在呢。
我们先撤销最终一场递交,但保留变更标识符:
$ git reset HEAD~ –soft $ git stash再切到你想要递交的正确分支(
name-of-the-correct-branch)上,并把变更标识符递交上去: $ git checkout name-of-the-correct-branch $ git stash pop $ git add . $ git commit -m“your message here”OK,到这里就搞定了。
假如想要逼格高点,也可以用 cherry-pick 那个指示来完成下面那些操作方式。具体的操作方式步骤如下。
具体来说,切换到正确的分支上:
$ git checkout name-of-the-correct-branch接着采用 cherry-pick
$ git cherry-pick master最终再把主分支上那条递交错误的发展史记录删除:
$ git checkout master $ git reset HEAD~ —-hard雅典娜:咦?为啥我运转 diff 后啥都没有?
碰到这种情况,应该是文件没有再次加入到暂存区的缘故。解决计划很单纯,咱们要么把文件再次加入到暂存区,要么就直接采用下面这条指示:
$ git diff –staged这样,就可以看到未存入暂存区文件的 diff 效用啦。
雅典娜:这工程项目是不是这么乱!好烦呐!我不玩了!
别气别气,别气坏了身子就不好了,么么哒
假如本地标识符仓库把自己折腾得乱七八糟,不用怕,用下面这招,一击必杀:
$ cd .. $ sudo rm -r fucking-git-repo-dir $ git clonehttps://some.github.url/fucking-git-repo-dir.git $ cd fucking-git-repo-dir是的,这就是备胎(线上仓库)的强大之处,假如你备胎尚在,你就可以大大方方的把本地仓库删了,clone 备胎,从头再来。
雅典娜:好啦,我没什么问题了,谢谢你哦~
不不不,这块问题还多着呢?你打开下面那个中文网站,听我跟你细细道来…