保健励志美文体育育儿作文
投稿投诉
作文动态
热点娱乐
育儿情感
教程科技
体育养生
教案探索
美文旅游
财经日志
励志范文
论文时尚
保健游戏
护肤业界

45个Git经典操作场景

  文章转载于:江南一点雨
  git对于大家应该都不太陌生,熟练使用git已经成为程序员的一项基本技能,尽管在工作中有诸如Sourcetree这样牛X的客户端工具,使得合并代码变的很方便。但找工作面试和一些需彰显个人实力的场景,仍然需要我们掌握足够多的git命令。
  下边我们整理了45个日常用git合代码的经典操作场景,基本覆盖了工作中的需求。
  我刚才提交了什么?
  如果你用gitcommita提交了一次变化(changes),而你又不确定到底这次提交了哪些内容。你就可以用下面的命令显示当前HEAD上的最近一次的提交(commit):(main)gitshow
  或者gitlogn1p
  我的提交信息(commitmessage)写错了
  如果你的提交信息(commitmessage)写错了且这次提交(commit)还没有推(push),你可以通过下面的方法来修改提交信息(commitmessage):gitcommitamendonly
  这会打开你的默认编辑器,在这里你可以编辑信息。另一方面,你也可以用一条命令一次完成:gitcommitamendonlymxxxxxxx
  如果你已经推(push)了这次提交(commit),你可以修改这次提交(commit)然后强推(forcepush),但是不推荐这么做。
  我提交(commit)里的用户名和邮箱不对
  如果这只是单个提交(commit),修改它:gitcommitamendauthorNewAuthorname
  如果你需要修改所有历史,参考gitfilterbranch的指南页。
  我想从一个提交(commit)里移除一个文件
  通过下面的方法,从一个提交(commit)里移除一个文件:gitcheckoutHEADmyfile
  gitaddA
  gitcommitamend
  这将非常有用,当你有一个开放的补丁(openpatch),你往上面提交了一个不必要的文件,你需要强推(forcepush)去更新这个远程补丁。
  我想删除我的的最后一次提交(commit)
  如果你需要删除推了的提交(pushedcommits),你可以使用下面的方法。可是,这会不可逆的改变你的历史,也会搞乱那些已经从该仓库拉取(pulled)了的人的历史。简而言之,如果你不是很确定,千万不要这么做。gitresetHEADhard
  gitpushf〔remote〕〔branch〕
  如果你还没有推到远程,把Git重置(reset)到你最后一次提交前的状态就可以了(同时保存暂存的变化):(mybranch)gitresetsoftHEAD{1}
  这只能在没有推送之前有用。如果你已经推了,唯一安全能做的是gitrevertSHAofBadCommit,那会创建一个新的提交(commit)用于撤消前一个提交的所有变化(changes);或者,如果你推的这个分支是rebasesafe的(例如:其它开发者不会从这个分支拉),只需要使用gitpushf。
  删除任意提交(commit)
  同样的警告:不到万不得已的时候不要这么做。gitrebaseontoSHA1OFBADCOMMITSHA1OFBADCOMMIT
  gitpushf〔remote〕〔branch〕
  或者做一个交互式rebase删除那些你想要删除的提交(commit)里所对应的行。
  我尝试推一个修正后的提交(amendedcommit)到远程,但是报错:Tohttps:github。comyourusernamerepo。git
  !〔rejected〕mybranchmybranch(nonfastforward)
  error:failedtopushsomerefstohttps:github。comtanay1337webmaker。org。git
  hint:Updateswererejectedbecausethetipofyourcurrentbranchisbehind
  hint:itsremotecounterpart。Integratetheremotechanges(e。g。
  hint:gitpull。。。)beforepushingagain。
  hint:SeetheNoteaboutfastforwardsingitpushhelpfordetails。
  注意,rebasing(见下面)和修正(amending)会用一个新的提交(commit)代替旧的,所以如果之前你已经往远程仓库上推过一次修正前的提交(commit),那你现在就必须强推(forcepush)(f)。注意总是确保你指明一个分支!(mybranch)gitpushoriginmybranchf
  一般来说,要避免强推。最好是创建和推(push)一个新的提交(commit),而不是强推一个修正后的提交。后者会使那些与该分支或该分支的子分支工作的开发者,在源历史中产生冲突。
  我意外的做了一次硬重置(hardreset),我想找回我的内容
  如果你意外的做了gitresethard,你通常能找回你的提交(commit),因为Git对每件事都会有日志,且都会保存几天。(main)gitreflog
  你将会看到一个你过去提交(commit)的列表,和一个重置的提交。选择你想要回到的提交(commit)的SHA,再重置一次:(main)gitresethardSHA1234
  这样就完成了。
  暂存(Staging)我需要把暂存的内容添加到上一次的提交(commit)(mybranch)gitcommitamend
  我想要暂存一个新文件的一部分,而不是这个文件的全部
  一般来说,如果你想暂存一个文件的一部分,你可这样做:gitaddpatchfilename。x
  p简写。这会打开交互模式,你将能够用s选项来分隔提交(commit);然而,如果这个文件是新的,会没有这个选择,添加一个新文件时,这样做:gitaddNfilename。x
  然后,你需要用e选项来手动选择需要添加的行,执行gitdiffcached将会显示哪些行暂存了哪些行只是保存在本地了。
  我想把在一个文件里的变化(changes)加到两个提交(commit)里
  gitadd会把整个文件加入到一个提交。gitaddp允许交互式的选择你想要提交的部分。
  我想把暂存的内容变成未暂存,把未暂存的内容暂存起来
  多数情况下,你应该将所有的内容变为未暂存,然后再选择你想要的内容进行commit。但假定你就是想要这么做,这里你可以创建一个临时的commit来保存你已暂存的内容,然后暂存你的未暂存的内容并进行stash。然后reset最后一个commit将原本暂存的内容变为未暂存,最后stashpop回来。gitcommitmWIP
  gitadd。
  gitstash
  gitresetHEAD
  gitstashpopindex0
  注意1:这里使用pop仅仅是因为想尽可能保持幂等。注意2:假如你不加上index你会把暂存的文件标记为为存储。
  未暂存(Unstaged)的内容我想把未暂存的内容移动到一个新分支gitcheckoutbmybranch
  我想把未暂存的内容移动到另一个已存在的分支gitstash
  gitcheckoutmybranch
  gitstashpop
  我想丢弃本地未提交的变化(uncommittedchanges)
  如果你只是想重置源(origin)和你本地(local)之间的一些提交(commit),你可以:onecommit
  (mybranch)gitresethardHEAD
  twocommits
  (mybranch)gitresethardHEAD
  fourcommits
  (mybranch)gitresethardHEAD4
  or
  (main)gitcheckoutf
  重置某个特殊的文件,你可以用文件名做为参数:gitresetfilename
  我想丢弃某些未暂存的内容
  如果你想丢弃工作拷贝中的一部分内容,而不是全部。
  签出(checkout)不需要的内容,保留需要的。gitcheckoutp
  Answerytoallofthesnippetsyouwanttodrop
  另外一个方法是使用stash,Stash所有要保留下的内容,重置工作拷贝,重新应用保留的部分。gitstashp
  Selectallofthesnippetsyouwanttosave
  gitresethard
  gitstashpop
  或者,stash你不需要的部分,然后stashdrop。gitstashp
  Selectallofthesnippetsyoudontwanttosave
  gitstashdrop
  分支(Branches)我从错误的分支拉取了内容,或把内容拉取到了错误的分支
  这是另外一种使用gitreflog情况,找到在这次错误拉(pull)之前HEAD的指向。(main)gitreflog
  ab7555fHEAD{0}:pulloriginwrongbranch:Fastforward
  c5bc55aHEAD{1}:checkout:checkoutmessagegoeshere
  重置分支到你所需的提交(desiredcommit):gitresethardc5bc55a
  完成。
  我想扔掉本地的提交(commit),以便我的分支与远程的保持一致
  先确认你没有推(push)你的内容到远程。
  gitstatus会显示你领先(ahead)源(origin)多少个提交:(mybranch)gitstatus
  Onbranchmybranch
  Yourbranchisaheadoforiginmybranchby2commits。
  (usegitpushtopublishyourlocalcommits)
  一种方法是:(main)gitresethardoriginmybranch
  我需要提交到一个新分支,但错误的提交到了main
  在main下创建一个新分支,不切换到新分支,仍在main下:(main)gitbranchmybranch
  把main分支重置到前一个提交:(main)gitresethardHEAD
  HEAD是HEAD1的简写,你可以通过指定要设置的HEAD来进一步重置。
  或者,如果你不想使用HEAD,找到你想重置到的提交(commit)的hash(gitlog能够完成),然后重置到这个hash。使用gitpush同步内容到远程。
  例如,main分支想重置到的提交的hash为a13b85e:(main)gitresetharda13b85e
  HEADisnowata13b85e
  签出(checkout)刚才新建的分支继续工作:(main)gitcheckoutmybranch
  我想保留来自另外一个refish的整个文件
  假设你正在做一个原型方案(原文为workingspike(seenote)),有成百的内容,每个都工作得很好。现在,你提交到了一个分支,保存工作内容:(solution)gitaddAgitcommitmAddingallchangesfromthisspikeintoonebigcommit。
  当你想要把它放到一个分支里(可能是feature,或者develop),你关心是保持整个文件的完整,你想要一个大的提交分隔成比较小。
  假设你有:
  分支solution,拥有原型方案,领先develop分支。
  分支develop,在这里你应用原型方案的一些内容。
  我去可以通过把内容拿到你的分支里,来解决这个问题:(develop)gitcheckoutsolutionfile1。txt
  这会把这个文件内容从分支solution拿到分支develop里来:Onbranchdevelop
  Yourbranchisuptodatewithorigindevelop。
  Changestobecommitted:
  (usegitresetHEADfile。。。tounstage)
  modified:file1。txt
  然后,正常提交。
  Note:Spikesolutionsaremadetoanalyzeorsolvetheproblem。Thesesolutionsareusedforestimationanddiscardedonceeveryonegetsclearvisualizationoftheproblem。
  我把几个提交(commit)提交到了同一个分支,而这些提交应该分布在不同的分支里
  假设你有一个main分支,执行gitlog,你看到你做过两次提交:(main)gitlog
  commite3851e817c451cc36f2e6f3049db528415e3c114
  Author:AlexLee
  Date:TueJul2215:39:2720140400
  Bug21AddedCSRFprotection
  commit5ea51731d150f7ddc4a365437931cd8be3bf3131
  Author:AlexLee
  Date:TueJul2215:39:1220140400
  Bug14Fixedspacingontitle
  commita13b85e984171c6e2a1729bb061994525f626d14
  Author:AkiRose
  Date:TueJul2101:12:4820140400
  Firstcommit
  让我们用提交hash(commithash)标记bug(e3851e8for21,5ea5173for14)。
  首先,我们把main分支重置到正确的提交(a13b85e):(main)gitresetharda13b85e
  HEADisnowata13b85e
  现在,我们对bug21创建一个新的分支:(main)gitcheckoutb21
  (21)
  接着,我们用cherrypick把对bug21的提交放入当前分支。这意味着我们将应用(apply)这个提交(commit),仅仅这一个提交(commit),直接在HEAD上面。(21)gitcherrypicke3851e8
  这时候,这里可能会产生冲突,参见交互式rebasing章冲突节解决冲突。
  再者,我们为bug14创建一个新的分支,也基于main分支(21)gitcheckoutmain
  (main)gitcheckoutb14
  (14)
  最后,为bug14执行cherrypick:(14)gitcherrypick5ea5173
  我想删除上游(upstream)分支被删除了的本地分支
  一旦你在github上面合并(merge)了一个pullrequest,你就可以删除你fork里被合并的分支。如果你不准备继续在这个分支里工作,删除这个分支的本地拷贝会更干净,使你不会陷入工作分支和一堆陈旧分支的混乱之中。gitfetchp
  我不小心删除了我的分支
  如果你定期推送到远程,多数情况下应该是安全的,但有些时候还是可能删除了还没有推到远程的分支。让我们先创建一个分支和一个新的文件:(main)gitcheckoutbmybranch
  (mybranch)gitbranch
  (mybranch)touchfoo。txt
  (mybranch)ls
  README。mdfoo。txt
  添加文件并做一次提交(mybranch)gitadd。
  (mybranch)gitcommitmfoo。txtadded
  (mybranch)foo。txtadded
  1fileschanged,1insertions()
  createmode100644foo。txt
  (mybranch)gitlog
  commit4e3cd85a670ced7cc17a2b5d8d3d809ac88d5012
  Author:siemiatjsiemiatjexample。com
  Date:WedJul3000:34:1020140200
  foo。txtadded
  commit69204cdf0acbab201619d95ad8295928e7f411d5
  Author:KateHudsonkatehudsonexample。com
  Date:TueJul2913:14:4620140400
  Fixes6:Forcepushingafteramendingcommits
  现在我们切回到主(main)分支,‘不小心的’删除mybranch分支(mybranch)gitcheckoutmain
  Switchedtobranchmain
  Yourbranchisuptodatewithoriginmain。
  (main)gitbranchDmybranch
  Deletedbranchmybranch(was4e3cd85)。
  (main)echoohnoes,deletedmybranch!
  ohnoes,deletedmybranch!
  在这时候你应该想起了reflog,一个升级版的日志,它存储了仓库(repo)里面所有动作的历史。(main)gitreflog
  69204cdHEAD{0}:checkout:movingfrommybranchtomain
  4e3cd85HEAD{1}:commit:foo。txtadded
  69204cdHEAD{2}:checkout:movingfrommaintomybranch
  正如你所见,我们有一个来自删除分支的提交hash(commithash),接下来看看是否能恢复删除了的分支。(main)gitcheckoutbmybranchhelp
  Switchedtoanewbranchmybranchhelp
  (mybranchhelp)gitresethard4e3cd85
  HEADisnowat4e3cd85foo。txtadded
  (mybranchhelp)ls
  README。mdfoo。txt
  看!我们把删除的文件找回来了。Git的reflog在rebasing出错的时候也是同样有用的。
  我想删除一个分支
  删除一个远程分支:(main)gitpushorigindeletemybranch
  你也可以:(main)gitpushorigin:mybranch
  删除一个本地分支:(main)gitbranchDmybranch
  我想从别人正在工作的远程分支签出(checkout)一个分支
  首先,从远程拉取(fetch)所有分支:(main)gitfetchall
  假设你想要从远程的daves分支签出到本地的daves(main)gitcheckouttrackorigindaves
  Branchdavessetuptotrackremotebranchdavesfromorigin。
  Switchedtoanewbranchdaves
  (track是gitcheckoutb〔branch〕〔remotename〕〔branch〕的简写)
  这样就得到了一个daves分支的本地拷贝,任何推过(pushed)的更新,远程都能看到。
  Rebasing和合并(Merging)我想撤销rebasemerge
  你可以合并(merge)或rebase了一个错误的分支,或者完成不了一个进行中的rebasemerge。Git在进行危险操作的时候会把原始的HEAD保存在一个叫ORIGHEAD的变量里,所以要把分支恢复到rebasemerge前的状态是很容易的。(mybranch)gitresethardORIGHEAD
  我已经rebase过,但是我不想强推(forcepush)
  不幸的是,如果你想把这些变化(changes)反应到远程分支上,你就必须得强推(forcepush)。是因你快进(Fastforward)了提交,改变了Git历史,远程分支不会接受变化(changes),除非强推(forcepush)。
  这就是许多人使用merge工作流,而不是rebasing工作流的主要原因之一,开发者的强推(forcepush)会使大的团队陷入麻烦。使用时需要注意,一种安全使用rebase的方法是,不要把你的变化(changes)反映到远程分支上,而是按下面的做:(main)gitcheckoutmybranch
  (mybranch)gitrebaseimain
  (mybranch)gitcheckoutmain
  (main)gitmergeffonlymybranch
  我需要组合(combine)几个提交(commit)
  假设你的工作分支将会做对于main的pullrequest。一般情况下你不关心提交(commit)的时间戳,只想组合所有提交(commit)到一个单独的里面,然后重置(reset)重提交(recommit)。确保主(main)分支是最新的和你的变化都已经提交了,然后:(mybranch)gitresetsoftmain
  (mybranch)gitcommitamNewawesomefeature
  如果你想要更多的控制,想要保留时间戳,你需要做交互式rebase(interactiverebase):(mybranch)gitrebaseimain
  如果没有相对的其它分支,你将不得不相对自己的HEAD进行rebase。例如:你想组合最近的两次提交(commit),你将相对于HEAD2进行rebase,组合最近3次提交(commit),相对于HEAD3,等等。(main)gitrebaseiHEAD2
  在你执行了交互式rebase的命令(interactiverebasecommand)后,你将在你的编辑器里看到类似下面的内容:picka9c8a1dSomerefactoring
  pick01b2fd8Newawesomefeature
  pickb729ad5fixup
  picke3851e8anotherfix
  Rebase8074d12。。b729ad5onto8074d12
  Commands:
  p,pickusecommit
  r,rewordusecommit,buteditthecommitmessage
  e,editusecommit,butstopforamending
  s,squashusecommit,butmeldintopreviouscommit
  f,fixuplikesquash,butdiscardthiscommitslogmessage
  x,execruncommand(therestoftheline)usingshell
  Theselinescanbereordered;theyareexecutedfromtoptobottom。
  IfyouremovealinehereTHATCOMMITWILLBELOST。
  However,ifyouremoveeverything,therebasewillbeaborted。
  Notethatemptycommitsarecommentedout
  所有以开头的行都是注释,不会影响rebase。
  然后,你可以用任何上面命令列表的命令替换pick,你也可以通过删除对应的行来删除一个提交(commit)。
  例如,如果你想单独保留最旧(first)的提交(commit),组合所有剩下的到第二个里面,你就应该编辑第二个提交(commit)后面的每个提交(commit)前的单词为f:picka9c8a1dSomerefactoring
  pick01b2fd8Newawesomefeature
  fb729ad5fixup
  fe3851e8anotherfix
  如果你想组合这些提交(commit)并重命名这个提交(commit),你应该在第二个提交(commit)旁边添加一个r,或者更简单的用s替代f:picka9c8a1dSomerefactoring
  pick01b2fd8Newawesomefeature
  sb729ad5fixup
  se3851e8anotherfix
  你可以在接下来弹出的文本提示框里重命名提交(commit)。Newer,awesomerfeatures
  Pleaseenterthecommitmessageforyourchanges。Linesstarting
  withwillbeignored,andanemptymessageabortsthecommit。
  rebaseinprogress;onto8074d12
  Youarecurrentlyeditingacommitwhilerebasingbranchmainon8074d12。
  Changestobecommitted:
  modified:README。md
  如果成功了,你应该看到类似下面的内容:(main)Successfullyrebasedandupdatedrefsheadsmain。
  安全合并(merging)策略
  nocommit执行合并(merge)但不自动提交,给用户在做提交前检查和修改的机会。noff会为特性分支(featurebranch)的存在过留下证据,保持项目历史一致。(main)gitmergenoffnocommitmybranch
  我需要将一个分支合并成一个提交(commit)(main)gitmergesquashmybranch
  我只想组合(combine)未推的提交(unpushedcommit)
  有时候,在将数据推向上游之前,你有几个正在进行的工作提交(commit)。这时候不希望把已经推(push)过的组合进来,因为其他人可能已经有提交(commit)引用它们了。(main)gitrebasei{u}
  这会产生一次交互式的rebase(interactiverebase),只会列出没有推(push)的提交(commit),在这个列表时进行reorderfixsquash都是安全的。
  检查是否分支上的所有提交(commit)都合并(merge)过了
  检查一个分支上的所有提交(commit)是否都已经合并(merge)到了其它分支,你应该在这些分支的head(或任何commits)之间做一次diff:(main)gitloggraphleftrightcherrypickonelineHEAD。。。feature120onscroll
  这会告诉你在一个分支里有而另一个分支没有的所有提交(commit),和分支之间不共享的提交(commit)的列表。另一个做法可以是:(main)gitlogmainfeature120onscrollnomerges
  交互式rebase(interactiverebase)可能出现的问题
  这个rebase编辑屏幕出现noop
  如果你看到的是这样:noop
  这意味着你rebase的分支和当前分支在同一个提交(commit)上,或者领先(ahead)当前分支。你可以尝试:
  检查确保主(main)分支没有问题
  rebaseHEAD2或者更早
  有冲突的情况
  如果你不能成功的完成rebase,你可能必须要解决冲突。
  首先执行gitstatus找出哪些文件有冲突:(mybranch)gitstatus
  Onbranchmybranch
  Changesnotstagedforcommit:
  (usegitaddfile。。。toupdatewhatwillbecommitted)
  (usegitcheckoutfile。。。todiscardchangesinworkingdirectory)
  modified:README。md
  在这个例子里面,README。md有冲突。打开这个文件找到类似下面的内容:HEAD
  somecode
  somecode
  newcommit
  你需要解决新提交的代码(示例里,从中间线到newcommit的地方)与HEAD之间不一样的地方。
  有时候这些合并非常复杂,你应该使用可视化的差异编辑器(visualdiffeditor):(main)gitmergetooltopendiff
  在你解决完所有冲突和测试过后,gitadd变化了的(changed)文件,然后用gitrebasecontinue继续rebase。(mybranch)gitaddREADME。md
  (mybranch)gitrebasecontinue
  如果在解决完所有的冲突过后,得到了与提交前一样的结果,可以执行gitrebaseskip。
  任何时候你想结束整个rebase过程,回来rebase前的分支状态,你可以做:(mybranch)gitrebaseabort
  Stash暂存所有改动
  暂存你工作目录下的所有改动gitstash
  你可以使用u来排除一些文件gitstashu
  暂存指定文件
  假设你只想暂存某一个文件gitstashpushworkingdirectorypathfilename。ext
  假设你想暂存多个文件gitstashpushworkingdirectorypathfilename1。extworkingdirectorypathfilename2。ext
  暂存时记录消息
  这样你可以在list时看到它gitstashsavemessage
  或gitstashpushmmessage
  使用某个指定暂存
  首先你可以查看你的stash记录gitstashlist
  然后你可以apply某个stashgitstashapplystash{n}
  此处,n是stash在栈中的位置,最上层的stash会是0
  除此之外,也可以使用时间标记(假如你能记得的话)。gitstashapplystash{2。hours。ago}
  暂存时保留未暂存的内容
  你需要手动create一个stashcommit,然后使用gitstashstore。gitstashcreate
  gitstashstoremcommitmessageCREATEDSHA1
  杂项(MiscellaneousObjects)克隆所有子模块gitclonerecursivegit:github。comfoobar。git
  如果已经克隆了:gitsubmoduleupdateinitrecursive
  删除标签(tag)gittagdtagname
  gitpushremote:refstagstagname
  恢复已删除标签(tag)
  如果你想恢复一个已删除标签(tag),可以按照下面的步骤:首先,需要找到无法访问的标签(unreachabletag):gitfsckunreachablegreptag
  记下这个标签(tag)的hash,然后用Git的updaterefgitupdaterefrefstagstagnamehash
  这时你的标签(tag)应该已经恢复了。
  已删除补丁(patch)
  如果某人在GitHub上给你发了一个pullrequest,但是然后他删除了他自己的原始fork,你将没法克隆他们的提交(commit)或使用gitam。在这种情况下,最好手动的查看他们的提交(commit),并把它们拷贝到一个本地新分支,然后做提交。
  做完提交后,再修改作者,参见变更作者。然后,应用变化,再发起一个新的pullrequest。
  跟踪文件(TrackingFiles)我只想改变一个文件名字的大小写,而不修改内容(main)gitmvforcemyfileMyFile
  我想从Git删除一个文件,但保留该文件(main)gitrmcachedlog。txt
  配置(Configuration)我想给一些Git命令添加别名(alias)
  在OSX和Linux下,你的Git的配置文件储存在。gitconfig。我在〔alias〕部分添加了一些快捷别名(和一些我容易拼写错误的),如下:〔alias〕
  aadd
  amendcommitamend
  ccommit
  cacommitamend
  cicommita
  cocheckout
  ddiff
  dcdiffchanged
  dsdiffstaged
  ffetch
  lollloggraphdecorateprettyonelineabbrevcommit
  mmerge
  onelogprettyoneline
  outstandingrebasei{u}
  sstatus
  unpushedlog{u}
  wcwhatchanged
  wiprebasei{u}
  zapfetchp
  我想缓存一个仓库(repository)的用户名和密码
  你可能有一个仓库需要授权,这时你可以缓存用户名和密码,而不用每次推拉(pushpull)的时候都输入,Credentialhelper能帮你。gitconfigglobalcredential。helpercache
  Setgittousethecredentialmemorycache
  gitconfigglobalcredential。helpercachetimeout3600
  Setthecachetotimeoutafter1hour(settingisinseconds)
  我不知道我做错了些什么
  你把事情搞砸了:你重置(reset)了一些东西,或者你合并了错误的分支,亦或你强推了后找不到你自己的提交(commit)了。有些时候,你一直都做得很好,但你想回到以前的某个状态。
  这就是gitreflog的目的,reflog记录对分支顶端(thetipofabranch)的任何改变,即使那个顶端没有被任何分支或标签引用。基本上,每次HEAD的改变,一条新的记录就会增加到reflog。遗憾的是,这只对本地分支起作用,且它只跟踪动作(例如,不会跟踪一个没有被记录的文件的任何改变)。(main)gitreflog
  0a2e358HEAD{0}:reset:movingtoHEAD2
  0254ea7HEAD{1}:checkout:movingfrom2。2tomain
  c10f740HEAD{2}:checkout:movingfrommainto2。2
  上面的reflog展示了从main分支签出(checkout)到2。2分支,然后再签回。那里,还有一个硬重置(hardreset)到一个较旧的提交。最新的动作出现在最上面以HEAD{0}标识。
  如果事实证明你不小心回移(moveback)了提交(commit),reflog会包含你不小心回移前main上指向的提交(0254ea7)。gitresethard0254ea7
  然后使用gitreset就可以把main改回到之前的commit,这提供了一个在历史被意外更改情况下的安全网。

docker容器与虚拟机有什么区别?谢邀我们单位最近在推docker,已经在开发测试环境使用(稍显落后),下面我就谈谈自己的Docker的理解,以及Docker和虚拟机的区别。虚拟机先说说什么是……葡萄作文600字无论是苹果的脆生生,还是水蜜桃的甜滋滋:无论是橘子的酸溜溜,还是西瓜的甜蜜蜜:无论是甘蔗的美味,还是柠檬的酸甜都无法忘怀,可在水果里,我的最爱还是葡萄。葡萄的颜色大致相同……高一叙事作文高中生活(十)给我你的心作纪念,这份爱何时打开都新鲜,有我的陪伴多苦都变成甜,睁开眼就看见永远。三年的初中生活就像歌词一样匆匆地流过了,毕业了,大家曾经承诺的永远都不复存在,转眼间,我们在不……行业新秀获百亿投资,新能源车迎新一轮加速渗透首款车型将对标保时捷Taycan。今日重要性:据36氪、界面新闻等媒体2月15日消息,宾理智能科技近日获得了来自武汉长江资本的100亿人民币战略投资。资料显示,宾理……初中作文时间都去哪儿了时间都去哪儿了,还没好好看你眼睛就花了柴米油盐,半辈子,转眼就只剩下满脸的皱纹了。选自与文题同名歌曲在年初一下午暖暖的阳光里,我问起妈妈这首歌,妈妈说她最感动……雨中的花折伞我从来都不喜欢我的妈妈,因为她不会理解人,因为她不会宽容,因为总之,我和她之间就好像有一层隐形的墙,让我们一直无法进行沟通。记得有一次,我放学回家,见她没在家,于是便看起……在日本,怎么在国内网购淘宝买东西?中日转运帮您中日国际快递很多刚到日本的同学还不知道,在日本,怎么在淘宝买东西?大家好,我是上海传物国际物流的业务经理小曾,今天来回答一下这个问题,在国外逛淘宝,拼多多,非常方便,尤其是日本,韩国,几乎……致十年后的自己作文550字光阴似箭,日月如梭,伴随着元旦的到来,新的一年又开始了。此时,已经是十年以后了。你脸上的稚嫩已经褪去,在社会这个大熔炉了,你一次次被提炼,淘汰不利的条件,留下适合发展自己……我的故乡500字作文我的故乡,天高、云淡、水净、风轻、花香、草绿我爱故乡的河。它静静地从故乡中间穿过。我不知道它的源头在哪里,只知道它从遥远的地方来,要到遥远的地方去。河水很净,净得能看见水……大学校园生活优秀作文800字【800字,大学校园生活】金秋时节,丹桂飘香,我们带着父母的望子成龙,望女成凤的殷切期望,装着ldquo;学不成名誓不还rdquo;的志向,携着厚重的行李箱,怀着无限的热……如何看待英特尔收购Tower半导体2月15日,英特尔和Tower半导体(TowerSemiconductor,下简称Tower)宣布达成协议,该协议称,英特尔以每股53美元的现金收购Tower,总企业价值约为5……8点1氪丨小米否认裁员传闻蔚来回应注销科技公司iPhone6上市进行时康乐卫士36氪获悉,新三板公司康乐卫士发布公告称,公司拟向不特定合格投资者公开发行股票并在北京证券交易所上市。资料显示,康乐卫士是一家从事新型疫苗研究、开……
小学生优秀作文爱国就是对祖国的忠诚和热爱(以爱国为话题)小学生优秀作文mdash;爱国就是对祖国的忠诚和热爱(以爱国为话题)爱国就是对祖国的忠诚和热爱。历朝历代,许多仁人志士都具有强烈的忧国忧民思想,以国事为己任,前仆后继,临……浙西漂流记的小学生作文7月23日,我们去浙西大峡谷漂流了。那天天气晴朗,出来旅游的人真不少。等了半小时,我和妈妈、舅舅都穿好救生衣同,坐在一条橡皮船上。沿着溪水往前漂。开始的时候,水流平缓,溪……别低头别认输作文700字成长是憧憬和怀念的天平,当它倾斜得颓然倒下时,那些失去了月光的夜晚,该用怎样的声音去抚慰。我们总是憧憬最美好的未来,却总在最该拼搏奋斗的年纪放纵了自己;我们总是想要与众不……玩雪日记三篇在冬天到来的时候,我们也会进行玩雪的,下面是小编为大家整理的玩雪日记,欢迎大家的阅读。玩雪日记1下雪了,地上像铺满了一层厚厚的白白的大地毯。我拿着一盒鞭炮出去玩,我……乘兴而行兴尽而返六年级作文在几天前,老师宣布了一个令人振奋的好消息:过几天我们学校就要举行研学旅行了!这可是从来没有过的好消息啊。我们学校也是第一次举行研学旅行,所以一听到消息,全班就像炸开了锅。大家都……不属于你我的儿童节那些日子不属于你我的儿童节那些日子通过一双可爱稚嫩的脚丫,我们走过了那美丽纯真的六年。那些日子就是五彩斑斓,永远都没失去艳丽。不过现在的我已不再是那六年里的我。我只能够待在……故宫的作文400字8篇北京故宫是中国明清两代的皇家宫殿,位于北京中轴线的中心,是中国古代宫廷建筑之精华。以下是小编收集的故宫的作文,欢迎查看!故宫的作文1故宫,位于我国首都北京的中心。它是用1……惊吓今天放学我迈着轻快的步伐,走在回家的路上,心情格外的畅快,使我总想高歌一曲,表示我满心的愉快。我走着走着,就走到了小区,远远看见一个似乎是石头的东西,由于我近视眼,根本看……热门小学写人作文400字集锦五篇在我们平凡的日常里,大家都有写作文的经历,对作文很是熟悉吧,作文是从内部言语向外部言语的过渡,即从经过压缩的简要的、自己能明白的语言,向开展的、具有规范语法结构的、能为他人所理……匿名社交软件获年轻人青睐,媒体纵有千般好,风险始终在来源:中国青年报近来,匿名社交软件成为不少年轻人青睐的表达乌托邦。某匿名社交App所属公司发布的《2020年新世代社交趋势洞察》报告透露,95后、00后等是其用户主力。中……我爱我的祖国E度网专稿未经允许不得转载1949年10月1日毛泽东庄严宣告:中华人民共和国中央人民政府成立了!中国人民站起来了!在书中,我读到了一个最让我感动的故事,那些林县人为……关于小学生有创意自我介绍有时候,你看到别的小学生在进行自我介绍时既有创意又内容全面,并且花了很短的时间就得到了别人的认可。你是否曾在心底心生崇拜?下面是小编整理的小学生有创意的自我介绍,欢迎大家阅读。……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网