游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

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)里移除一个文件:gitcheckoutHEADmyfilegitaddAgitcommitamend
  这将非常有用,当你有一个开放的补丁(openpatch),你往上面提交了一个不必要的文件,你需要强推(forcepush)去更新这个远程补丁。我想删除我的的最后一次提交(commit)
  如果你需要删除推了的提交(pushedcommits),你可以使用下面的方法。可是,这会不可逆的改变你的历史,也会搞乱那些已经从该仓库拉取(pulled)了的人的历史。简而言之,如果你不是很确定,千万不要这么做。gitresetHEADhardgitpushf〔remote〕〔branch〕
  如果你还没有推到远程,把Git重置(reset)到你最后一次提交前的状态就可以了(同时保存暂存的变化):(mybranch)gitresetsoftHEAD{1}
  这只能在没有推送之前有用。如果你已经推了,唯一安全能做的是gitrevertSHAofBadCommit,那会创建一个新的提交(commit)用于撤消前一个提交的所有变化(changes);或者,如果你推的这个分支是rebasesafe的(例如:其它开发者不会从这个分支拉),只需要使用gitpushf。删除任意提交(commit)
  同样的警告:不到万不得已的时候不要这么做。gitrebaseontoSHA1OFBADCOMMITSHA1OFBADCOMMITgitpushf〔remote〕〔branch〕
  或者做一个交互式rebase删除那些你想要删除的提交(commit)里所对应的行。我尝试推一个修正后的提交(amendedcommit)到远程,但是报错:Tohttps:github。comyourusernamerepo。git!〔rejected〕mybranchmybranch(nonfastforward)error:failedtopushsomerefstohttps:github。comtanay1337webmaker。org。githint:Updateswererejectedbecausethetipofyourcurrentbranchisbehindhint: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回来。gitcommitmWIPgitadd。gitstashgitresetHEADgitstashpopindex0
  注意1:这里使用pop仅仅是因为想尽可能保持幂等。注意2:假如你不加上index你会把暂存的文件标记为为存储。未暂存(Unstaged)的内容我想把未暂存的内容移动到一个新分支gitcheckoutbmybranch我想把未暂存的内容移动到另一个已存在的分支gitstashgitcheckoutmybranchgitstashpop我想丢弃本地未提交的变化(uncommittedchanges)
  如果你只是想重置源(origin)和你本地(local)之间的一些提交(commit),你可以:onecommit(mybranch)gitresethardHEADtwocommits(mybranch)gitresethardHEADfourcommits(mybranch)gitresethardHEAD4or(main)gitcheckoutf
  重置某个特殊的文件,你可以用文件名做为参数:gitresetfilename我想丢弃某些未暂存的内容
  如果你想丢弃工作拷贝中的一部分内容,而不是全部。
  签出(checkout)不需要的内容,保留需要的。gitcheckoutpAnswerytoallofthesnippetsyouwanttodrop
  另外一个方法是使用stash,Stash所有要保留下的内容,重置工作拷贝,重新应用保留的部分。gitstashpSelectallofthesnippetsyouwanttosavegitresethardgitstashpop
  或者,stash你不需要的部分,然后stashdrop。gitstashpSelectallofthesnippetsyoudontwanttosavegitstashdrop分支(Branches)我从错误的分支拉取了内容,或把内容拉取到了错误的分支
  这是另外一种使用gitreflog情况,找到在这次错误拉(pull)之前HEAD的指向。(main)gitreflogab7555fHEAD{0}:pulloriginwrongbranch:Fastforwardc5bc55aHEAD{1}:checkout:checkoutmessagegoeshere
  重置分支到你所需的提交(desiredcommit):gitresethardc5bc55a
  完成。我想扔掉本地的提交(commit),以便我的分支与远程的保持一致
  先确认你没有推(push)你的内容到远程。
  gitstatus会显示你领先(ahead)源(origin)多少个提交:(mybranch)gitstatusOnbranchmybranchYourbranchisaheadoforiginmybranchby2commits。(usegitpushtopublishyourlocalcommits)
  一种方法是:(main)gitresethardoriginmybranch我需要提交到一个新分支,但错误的提交到了main
  在main下创建一个新分支,不切换到新分支,仍在main下:(main)gitbranchmybranch
  把main分支重置到前一个提交:(main)gitresethardHEAD
  HEAD是HEAD1的简写,你可以通过指定要设置的HEAD来进一步重置。
  或者,如果你不想使用HEAD,找到你想重置到的提交(commit)的hash(gitlog能够完成),然后重置到这个hash。使用gitpush同步内容到远程。
  例如,main分支想重置到的提交的hash为a13b85e:(main)gitresetharda13b85eHEADisnowata13b85e
  签出(checkout)刚才新建的分支继续工作:(main)gitcheckoutmybranch我想保留来自另外一个refish的整个文件
  假设你正在做一个原型方案(原文为workingspike(seenote)),有成百的内容,每个都工作得很好。现在,你提交到了一个分支,保存工作内容:(solution)gitaddAgitcommitmAddingallchangesfromthisspikeintoonebigcommit。
  当你想要把它放到一个分支里(可能是feature,或者develop),你关心是保持整个文件的完整,你想要一个大的提交分隔成比较小。
  假设你有:分支solution,拥有原型方案,领先develop分支。分支develop,在这里你应用原型方案的一些内容。
  我去可以通过把内容拿到你的分支里,来解决这个问题:(develop)gitcheckoutsolutionfile1。txt
  这会把这个文件内容从分支solution拿到分支develop里来:OnbranchdevelopYourbranchisuptodatewithorigindevelop。Changestobecommitted:(usegitresetHEADfile。。。tounstage)modified:file1。txt
  然后,正常提交。
  Note:Spikesolutionsaremadetoanalyzeorsolvetheproblem。Thesesolutionsareusedforestimationanddiscardedonceeveryonegetsclearvisualizationoftheproblem。我把几个提交(commit)提交到了同一个分支,而这些提交应该分布在不同的分支里
  假设你有一个main分支,执行gitlog,你看到你做过两次提交:(main)gitlogcommite3851e817c451cc36f2e6f3049db528415e3c114Author:AlexLeeDate:TueJul2215:39:2720140400Bug21AddedCSRFprotectioncommit5ea51731d150f7ddc4a365437931cd8be3bf3131Author:AlexLeeDate:TueJul2215:39:1220140400Bug14Fixedspacingontitlecommita13b85e984171c6e2a1729bb061994525f626d14Author:AkiRoseDate:TueJul2101:12:4820140400Firstcommit
  让我们用提交hash(commithash)标记bug(e3851e8for21,5ea5173for14)。
  首先,我们把main分支重置到正确的提交(a13b85e):(main)gitresetharda13b85eHEADisnowata13b85e
  现在,我们对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)lsREADME。mdfoo。txt
  添加文件并做一次提交(mybranch)gitadd。(mybranch)gitcommitmfoo。txtadded(mybranch)foo。txtadded1fileschanged,1insertions()createmode100644foo。txt(mybranch)gitlogcommit4e3cd85a670ced7cc17a2b5d8d3d809ac88d5012Author:siemiatjsiemiatjexample。comDate:WedJul3000:34:1020140200foo。txtaddedcommit69204cdf0acbab201619d95ad8295928e7f411d5Author:KateHudsonkatehudsonexample。comDate:TueJul2913:14:4620140400Fixes6:Forcepushingafteramendingcommits
  现在我们切回到主(main)分支,‘不小心的’删除mybranch分支(mybranch)gitcheckoutmainSwitchedtobranchmainYourbranchisuptodatewithoriginmain。(main)gitbranchDmybranchDeletedbranchmybranch(was4e3cd85)。(main)echoohnoes,deletedmybranch!ohnoes,deletedmybranch!
  在这时候你应该想起了reflog,一个升级版的日志,它存储了仓库(repo)里面所有动作的历史。(main)gitreflog69204cdHEAD{0}:checkout:movingfrommybranchtomain4e3cd85HEAD{1}:commit:foo。txtadded69204cdHEAD{2}:checkout:movingfrommaintomybranch
  正如你所见,我们有一个来自删除分支的提交hash(commithash),接下来看看是否能恢复删除了的分支。(main)gitcheckoutbmybranchhelpSwitchedtoanewbranchmybranchhelp(mybranchhelp)gitresethard4e3cd85HEADisnowat4e3cd85foo。txtadded(mybranchhelp)lsREADME。mdfoo。txt
  看!我们把删除的文件找回来了。Git的reflog在rebasing出错的时候也是同样有用的。我想删除一个分支
  删除一个远程分支:(main)gitpushorigindeletemybranch
  你也可以:(main)gitpushorigin:mybranch
  删除一个本地分支:(main)gitbranchDmybranch我想从别人正在工作的远程分支签出(checkout)一个分支
  首先,从远程拉取(fetch)所有分支:(main)gitfetchall
  假设你想要从远程的daves分支签出到本地的daves(main)gitcheckouttrackorigindavesBranchdavessetuptotrackremotebranchdavesfromorigin。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)后,你将在你的编辑器里看到类似下面的内容:picka9c8a1dSomerefactoringpick01b2fd8Newawesomefeaturepickb729ad5fixuppicke3851e8anotherfixRebase8074d12。。b729ad5onto8074d12Commands:p,pickusecommitr,rewordusecommit,buteditthecommitmessagee,editusecommit,butstopforamendings,squashusecommit,butmeldintopreviouscommitf,fixuplikesquash,butdiscardthiscommitslogmessagex,execruncommand(therestoftheline)usingshellTheselinescanbereordered;theyareexecutedfromtoptobottom。IfyouremovealinehereTHATCOMMITWILLBELOST。However,ifyouremoveeverything,therebasewillbeaborted。Notethatemptycommitsarecommentedout
  所有以开头的行都是注释,不会影响rebase。
  然后,你可以用任何上面命令列表的命令替换pick,你也可以通过删除对应的行来删除一个提交(commit)。
  例如,如果你想单独保留最旧(first)的提交(commit),组合所有剩下的到第二个里面,你就应该编辑第二个提交(commit)后面的每个提交(commit)前的单词为f:picka9c8a1dSomerefactoringpick01b2fd8Newawesomefeaturefb729ad5fixupfe3851e8anotherfix
  如果你想组合这些提交(commit)并重命名这个提交(commit),你应该在第二个提交(commit)旁边添加一个r,或者更简单的用s替代f:picka9c8a1dSomerefactoringpick01b2fd8Newawesomefeaturesb729ad5fixupse3851e8anotherfix
  你可以在接下来弹出的文本提示框里重命名提交(commit)。Newer,awesomerfeaturesPleaseenterthecommitmessageforyourchanges。Linesstartingwithwillbeignored,andanemptymessageabortsthecommit。rebaseinprogress;onto8074d12Youarecurrentlyeditingacommitwhilerebasingbranchmainon8074d12。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)gitstatusOnbranchmybranchChangesnotstagedforcommit:(usegitaddfile。。。toupdatewhatwillbecommitted)(usegitcheckoutfile。。。todiscardchangesinworkingdirectory)modified:README。md
  在这个例子里面,README。md有冲突。打开这个文件找到类似下面的内容:HEADsomecodesomecodenewcommit
  你需要解决新提交的代码(示例里,从中间线到newcommit的地方)与HEAD之间不一样的地方。
  有时候这些合并非常复杂,你应该使用可视化的差异编辑器(visualdiffeditor):(main)gitmergetooltopendiff
  在你解决完所有冲突和测试过后,gitadd变化了的(changed)文件,然后用gitrebasecontinue继续rebase。(mybranch)gitaddREADME。md(mybranch)gitrebasecontinue
  如果在解决完所有的冲突过后,得到了与提交前一样的结果,可以执行gitrebaseskip。
  任何时候你想结束整个rebase过程,回来rebase前的分支状态,你可以做:(mybranch)gitrebaseabortStash暂存所有改动
  暂存你工作目录下的所有改动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。gitstashcreategitstashstoremcommitmessageCREATEDSHA1杂项(MiscellaneousObjects)克隆所有子模块gitclonerecursivegit:github。comfoobar。git
  如果已经克隆了:gitsubmoduleupdateinitrecursive删除标签(tag)gittagdtagnamegitpushremote: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〕aaddamendcommitamendccommitcacommitamendcicommitacocheckoutddiffdcdiffchangeddsdiffstagedffetchlollloggraphdecorateprettyonelineabbrevcommitmmergeonelogprettyonelineoutstandingrebasei{u}sstatusunpushedlog{u}wcwhatchangedwiprebasei{u}zapfetchp我想缓存一个仓库(repository)的用户名和密码
  你可能有一个仓库需要授权,这时你可以缓存用户名和密码,而不用每次推拉(pushpull)的时候都输入,Credentialhelper能帮你。gitconfigglobalcredential。helpercacheSetgittousethecredentialmemorycachegitconfigglobalcredential。helpercachetimeout3600Setthecachetotimeoutafter1hour(settingisinseconds)我不知道我做错了些什么
  你把事情搞砸了:你重置(reset)了一些东西,或者你合并了错误的分支,亦或你强推了后找不到你自己的提交(commit)了。有些时候,你一直都做得很好,但你想回到以前的某个状态。
  这就是gitreflog的目的,reflog记录对分支顶端(thetipofabranch)的任何改变,即使那个顶端没有被任何分支或标签引用。基本上,每次HEAD的改变,一条新的记录就会增加到reflog。遗憾的是,这只对本地分支起作用,且它只跟踪动作(例如,不会跟踪一个没有被记录的文件的任何改变)。(main)gitreflog0a2e358HEAD{0}:reset:movingtoHEAD20254ea7HEAD{1}:checkout:movingfrom2。2tomainc10f740HEAD{2}:checkout:movingfrommainto2。2
  上面的reflog展示了从main分支签出(checkout)到2。2分支,然后再签回。那里,还有一个硬重置(hardreset)到一个较旧的提交。最新的动作出现在最上面以HEAD{0}标识。
  如果事实证明你不小心回移(moveback)了提交(commit),reflog会包含你不小心回移前main上指向的提交(0254ea7)。gitresethard0254ea7
  然后使用gitreset就可以把main改回到之前的commit,这提供了一个在历史被意外更改情况下的安全网。

从瓦片到芯片北京再添一科技园海淀区东部西三旗建材城区域将成为北京市最新一片双创热土,如今又一处聚焦高精尖产业的科创园区上新。截至日前,金隅集团所属北京西三旗(金隅)科技园一期已经投用,首批入驻企业开展办公……空气能热水器不加热是怎么回事?基本上泄露是主要原因,其它的原因很少。我们的空气能热水器出现过这情况。售后检查后是因为空气压缩机坏掉了。所以最靠谱的还是直接售后服务!一、水垢太多热水器的水箱……为什么要选择联通流量卡?(一个从业流量产品三年的老司机,给你答案)干货分享,告诉你为什么流量卡要选择联通?首先,流量卡一共分为三种,企业定制卡,特定套餐优惠卡,和物联网卡。企业定制卡……智能穿戴设备智能穿戴USB摄像机适配眼镜第一视角直播推流这是一个经典的USB摄像头案例,它适配各种眼镜,可以直接推流直播,让第一视角成为主流的拍摄角度。PC材质,轻质量,不影响穿戴效果。USB摄像头以轻便小巧著称,而且合适于各种合法……澳大利亚要求谷歌和Facebook为新闻付费,但新闻网站可能财经网科技12月24日讯,据新浪科技消息,澳大利亚通过一项法案,要求谷歌、Facebook等平台向当地出版商支付新闻内容使用费,但这一政策碰到了问题。专家们说,有网站利用假记者……美国极力打压华为,我们应该全力打击苹果吗?华为大家知道华为面对美国的全球打压,损失惨重,被迫卖出荣耀,华为手机缺货严重,国家最引以为傲的科技公司被美国欺负的遍体鳞伤,与此同时,竟然还有好多国内网友侮辱诋毁华为,赞……从这件事就能看出华为为什么能做到今天的成就任正非说,2001年当时就想把华为卖掉。为什么要卖掉华为?原因就是为了避免和米国碰撞。当时华为和摩托罗拉已经达成了协议,摩托罗拉出100亿美元收购华为。当时摩托罗拉的董事长是高……没买iPhone12,也不等iPhone13了,小米MIX4本来想在8月份买个iPhone12,可以体验一下苹果手机的设计之美。不过,早有耳闻iPhone存在续航差、信号差两个问题,而且设计也比较老套了,这确实是苹果手机的弊端。但……捷豹谷歌宣布合作IPACE成为谷歌首款电动街景车谷歌终于拥有了第一个用于捕获街景的全电动汽车。美国东部时间5月25日,这家科技巨头和捷豹路虎宣布,他们已合作组装全电动IPACESUV,并配备了拍摄街景图像所需的设备,并将该车……海信掀起画质革命!美的海尔海信三大巨头到底谁更胜一筹?海信不再低调,以最强阵容亮相上海AWE!13万平方米的展出面积,吸引全球近900家企业参加,亚洲最大的家电和消费电子主题展会,没错,它就是2019年3月14日在上海新国际……华为P50超出预期,并带来四个优点三个遗憾从目前的市场角度来看,华为手机的发展节奏已经跟上来了,不出意外的话,华为P50系列应该会在7月29日发布,届时大家应该可以看到新机来袭。不过,在华为P50系列正式发布之前……工业文明的时代已经结束了,时代进入了农业文明与科技文明工业文明的时代已经结束了,时代进入了农业文明与科技文明,第一次工业革命出现了蒸汽机,人类进入了蒸汽时代,开创了以机器代替手工劳动的时代,第二次工业革命人类进入了电器时代内燃机被……
会议助手思必驰AI会议方案,运筹帷幄的智慧大脑一场会议,往往会花费大量的时间在与议题无关的筹备工作上。一场会议,常常需占用若干人力成本提供会议支持与服务。贯穿始终的会议精灵K510月16日,科达视讯重磅推出全场……比悲伤更悲伤的故事北京首映男女老少泪崩刘以豪爱心抱抱引尖叫星关系3月12日讯同档期最受期待催泪爱情电影《比悲伤更悲伤的故事》3月11日在北京举行首映,导演林孝谦、编剧吕安弦和男主角刘以豪惊喜现身,贴心送上定制纸巾和爱的抱抱,引爆全场。……张赫宣助力盛世金鸡百花香港华鼎奖热力开唱星关系11月13日讯11月09日第27届中国金鸡百花电影节百花奖提名者表彰仪式在广东佛山隆重举行。张赫宣个性潮装亮相现场,与诸多演艺明星共同见证中国电影行业盛世,并为盛世献歌。……ChinaJoy2021存储新发现铠侠亮相多款高性能存储新品不一样的时期,一样精彩的ChinaJoy。作为目前全球最具专业性、权威性和国际性的数字娱乐产业展会之一,第十九届ChinaJoy目前正于2021年7月30日8月2日在上海新国际……电影大轰炸定档817预告海报双发突显过硬品质与精神内涵《大轰炸》定档8月17日首发预告海报彰显中华民族不屈精神电影《大轰炸》于今日正式宣布进军暑期,定档8月17日。该片自开拍以来,始终备受关注,无论从演员阵容还是制作投入都堪……捷豹路虎第四财季营收同比增长20。5,中国市场带动全球业务增日前,捷豹路虎公布了202021财年(2020年4月2021年3月)及第四季度(2021年13月)业绩表现,得益于中国市场的贡献,捷豹路虎第四财季实现全球营收65亿英镑,同比增……传奇IP不为人知的故事最长被告19年,最惨被索赔76亿十余年,数百亿,谁能想到碰瓷也能碰出一个游戏大厂。今年4月初,恺英网络公告称将终止对九翎的收购。由于后者中了娱美德的招,一年内由盈转亏,可能将面临高达76亿元的赔款。……泄密者危境情长海报全球首发经典港片组合敢拍重聚《泄密者》危境情长海报全球首发经典港片组合敢拍重聚由著名导演邱礼涛执导,吴镇宇、张智霖、佘诗曼、周秀娜、郑则士、刘浩龙领衔主演,张继聪、李璨琛主演的犯罪动作悬疑电影《泄密……电影邪不压正还等什么?!姜文新作定档7月13日最热的天儿,看最爽的片儿。姜文新作《邪不压正》今晚官宣定档,影片将于7月13日在全国公映。新片主题与复仇有关,姜文导演一言以蔽之,如同北平的哈姆雷特,如同李小龙智取危机四伏的卡……电影猛虫过江全国路演笑出河南小沈阳宋芸桦数钱到手软《猛虫过江》全国路演笑出河南小沈阳宋芸桦数钱到手软日前,小沈阳和宋芸桦携手现身河南郑州高校,为即将于6月15日全国上映的黑帮动作喜剧电影《猛虫过江》宣传造势。两位主创将影……电影完美陌生人曝鉴渣启示预告手机炸出身边的隐形失婚人口话题佳作《完美陌生人》将于5月25日全国公映,日前片方发布鉴渣启示版预告片。影片由保罗格诺维塞执导,马可贾利尼、卡夏斯穆特尼亚克、瓦莱里奥马斯坦德雷亚等主演,讲述三对半夫妻在饭……碟中谍6全面瓦解发布全新海报特工全员集结惊魂一刻再现2018年备受瞩目的经典特工系列新作《碟中谍6:全面瓦解》今日发布全新特工集结版海报,再次引发关注热潮。海报中,本系列的灵魂人物汤姆克鲁斯携IMF特工组织原班人马整齐亮相,重磅……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网