",t=Object.assign({},t,{markdown:a,_dangerouslyInsertHTML:o}),A.__super__.initialize.apply(this,[t])}}),_=n.View.extend({initialize:function(e){this.grabBatons(),this.modalAlert=new C({markdowns:this.markdowns}),this.modalAlert.show()},grabBatons:function(){s.getEventBaton().stealBaton(this.eventBatonName,this.batonFired,this)},releaseBatons:function(){s.getEventBaton().releaseBaton(this.eventBatonName,this.batonFired,this)},finish:function(){this.releaseBatons(),this.modalAlert.die()}}),D=_.extend({initialize:function(e){this.eventBatonName="windowSizeCheck",this.markdowns=["## That window size is not supported :-/","Please resize your window back to a supported size","","(and of course, pull requests to fix this are appreciated :D)"],D.__super__.initialize.apply(this,[e])},batonFired:function(e){e.w>l.VIEWPORT.minWidth&&e.h>l.VIEWPORT.minHeight&&this.finish()}}),x=_.extend({initialize:function(e){if(!e||!e.level)throw new Error("need level");this.eventBatonName="zoomChange",this.markdowns=["## That zoom level of "+e.level+" is not supported :-/","Please zoom back to a supported zoom level with Ctrl + and Ctrl -","","(and of course, pull requests to fix this are appreciated :D)"],x.__super__.initialize.apply(this,[e])},batonFired:function(e){e<=l.VIEWPORT.maxZoom&&e>=l.VIEWPORT.minZoom&&this.finish()}}),M=h.extend({tagName:"div",className:"canvasTerminalHolder box flex1",template:i.template($("#terminal-window-bare-template").html()),events:{"click div.wrapper":"onClick"},initialize:function(e){e=e||{},this.parent=e.parent,this.minHeight=e.minHeight||200,this.destination=$("body"),this.JSON={title:e.title||c.str("goal-to-reach"),text:e.text||c.str("hide-goal")},this.render(),this.inDom=!0,this.$terminal=this.$el.find(".terminal-window-holder").first(),this.$terminal.height(.8*$(window).height()),this.$terminal.draggable({cursor:"move",handle:".toolbar",containment:"#interfaceWrapper",scroll:!1}),$(window).on("resize",u(this.recalcLayout.bind(this),300)),e.additionalClass&&this.$el.addClass(e.additionalClass)},getAnimationTime:function(){return 700},onClick:function(){this.die()},die:function(){this.minimize(),this.inDom=!1,setTimeout(function(){this.tearDown()}.bind(this),this.getAnimationTime())},minimize:function(){this.parent.trigger("minimizeCanvas",{left:this.$terminal.css("left"),top:this.$terminal.css("top")},{width:this.$terminal.css("width"),height:this.$terminal.css("height")}),this.$terminal.animate({height:"0px",opacity:0},this.getAnimationTime())},restore:function(e,t){var o=this;e=e||{top:this.$terminal.css("top"),left:this.$terminal.css("left")},t=t||{width:this.$terminal.css("width"),height:this.$terminal.css("height")},this.$terminal.css({top:e.top,left:e.left,width:t.width,height:"0px",opacity:"0"}),this.$terminal.animate({height:t.height,opacity:1},this.getAnimationTime(),(function(){o.recalcLayout()}))},recalcLayout:function(){var e=this.parent,t=0,o=0,i=0,a=this.$terminal.outerWidth(),n=this.$terminal.outerHeight(),r=this.$terminal.offset().left,s=this.$terminal.offset().top,c=$(window).width()-(r+a),l=$(window).height()-(s+n),m=.75*$(window).height(),u=.95*$(window).height();s<0&&(o=-s),r<0&&(t=-r),c<0&&(t=c),l<0&&(o=l),nu&&(i=u-n),r=Math.max(r+t,0),s=Math.max(s+o,0),n=Math.max(n+i,m),this.$terminal.animate({right:c+"px",top:s+"px",height:n+"px"},this.getAnimationTime(),(function(){e.trigger("resizeCanvas")}))},getCanvasLocation:function(){return this.$("div.inside")[0]}});o.BaseView=h,o.GeneralButton=b,o.ModalView=w,o.ModalTerminal=y,o.ModalAlert=C,o.ContainedBase=f,o.ConfirmCancelView=v,o.LeftRightView=k,o.ZoomAlertWindow=x,o.ConfirmCancelTerminal=z,o.WindowSizeAlertWindow=D,o.CanvasTerminalHolder=M,o.NextLevelConfirm=A}).call(this)}).call(this,e("_process"))},{"../app":52,"../dialogs/nextLevel":57,"../intl":67,"../log":73,"../util/constants":90,"../util/debounce":91,"../util/keyboard":98,"../util/throttle":101,_process:22,backbone:1,marked:19,q:29,underscore:47}],107:[function(e,t,o){var i=e("underscore"),a=(e("q"),e("backbone")),n=e("../stores/LocaleStore"),r=e("../util"),s=e("../util/debounce"),c=e("../intl"),l=e("../log"),m=e("../util/keyboard").KeyboardListener,u=e("../app"),d=e("../stores/LevelStore"),h=e("../views").ModalTerminal,p=e("../views").ContainedBase,g=e("../views").BaseView,f=e("../../levels"),b=p.extend({tagName:"div",className:"levelDropdownView box vertical",template:i.template($("#level-dropdown-view").html()),events:{"click div.levelDropdownTab":"onTabClick"},initialize:function(e){e=e||{};var t=r.parseQueryString(window.location.href);this.JSON={selectedTab:t.defaultTab||"main",tabs:[{id:"main",name:c.str("main-levels-tab")},{id:"remote",name:c.str("remote-levels-tab")}]},this.navEvents=Object.assign({},a.Events),this.navEvents.on("clickedID",s(this.loadLevelID.bind(this),300,!0)),this.navEvents.on("negative",this.negative,this),this.navEvents.on("positive",this.positive,this),this.navEvents.on("left",this.left,this),this.navEvents.on("right",this.right,this),this.navEvents.on("up",this.up,this),this.navEvents.on("down",this.down,this),this.keyboardListener=new m({events:this.navEvents,aliasMap:{esc:"negative",enter:"positive"},wait:!0}),this.sequences=d.getSequences(),this.sequenceToLevels=d.getSequenceToLevels(),this.container=new h({title:c.str("select-a-level")});var o=this;n.subscribe((function(){o.render.apply(o)})),d.subscribe((function(){o.render()})),this.render(),e.wait||this.show()},render:function(){this.container.updateTitle(c.str("select-a-level")),this.updateTabNames([c.str("main-levels-tab"),c.str("remote-levels-tab")]),b.__super__.render.apply(this,arguments),this.buildSequences()},onTabClick:function(e){var t=e.target||e.srcElement,o=$(t).attr("data-id");o!==this.JSON.selectedTab&&(this.selectedTab=o,this.updateTabTo(o))},updateTabTo:function(e){this.JSON.selectedTab=e,this.render(),this.selectedID&&(this.selectedSequence=this.getSequencesOnTab()[0],this.selectedIndex=0,this.updateSelectedIcon())},updateTabNames:function(e){for(var t=0;t=o.length&&this.getTabIndex()+1=0?(this.switchToTabIndex(this.getTabIndex()-1),this.selectedIndex=0):this.selectedIndex=this.wrapIndex(this.selectedIndex+e,this.getCurrentSequence()),this.updateSelectedIcon()},right:function(){this.turnOnKeyboardSelection()||this.leftOrRight(1)},up:function(){this.turnOnKeyboardSelection()||(this.selectedSequence=this.getPreviousSequence(),this.downOrUp())},down:function(){this.turnOnKeyboardSelection()||(this.selectedSequence=this.getNextSequence(),this.downOrUp())},downOrUp:function(){this.selectedIndex=this.boundIndex(this.selectedIndex,this.getCurrentSequence()),this.deselectIconByID(this.selectedID),this.updateSelectedIcon()},turnOnKeyboardSelection:function(){return!this.selectedID&&(this.selectFirst(),!0)},turnOffKeyboardSelection:function(){this.selectedID&&(this.deselectIconByID(this.selectedID),this.selectedID=void 0,this.selectedIndex=void 0,this.selectedSequence=void 0)},getTabIndex:function(){return this.JSON.tabs.map((function(e){return e.id})).indexOf(this.JSON.selectedTab)},switchToTabIndex:function(e){var t=this.JSON.tabs[e].id;this.updateTabTo(t)},wrapIndex:function(e,t){return e=(e=e>=t.length?0:e)<0?t.length-1:e},boundIndex:function(e,t){return e=(e=e>=t.length?t.length-1:e)<0?0:e},getSequencesOnTab:function(){return this.sequences.filter((function(e){return f.getTabForSequence(e)===this.JSON.selectedTab}),this)},getNextSequence:function(){var e=this.getSequenceIndex(this.selectedSequence),t=this.wrapIndex(e+1,this.getSequencesOnTab());return this.getSequencesOnTab()[t]},getPreviousSequence:function(){var e=this.getSequenceIndex(this.selectedSequence),t=this.wrapIndex(e-1,this.getSequencesOnTab());return this.getSequencesOnTab()[t]},getSequenceIndex:function(e){var t=this.getSequencesOnTab().indexOf(e);if(t<0)throw new Error("didnt find");return t},getIndexForID:function(e){return d.getLevel(e).index},selectFirst:function(){var e=this.sequenceToLevels[this.getSequencesOnTab()[0]][0].id;this.selectIconByID(e),this.selectedIndex=0,this.selectedSequence=this.getSequencesOnTab()[0]},getCurrentSequence:function(){return this.sequenceToLevels[this.selectedSequence]},getSelectedID:function(){return this.sequenceToLevels[this.selectedSequence][this.selectedIndex].id},selectIconByID:function(e){this.toggleIconSelect(e,!0)},deselectIconByID:function(e){this.toggleIconSelect(e,!1)},toggleIconSelect:function(e,t){this.selectedID=e,$("#levelIcon-"+e).toggleClass("selected",t),this.seriesViews.forEach((function(t){-1!==t.levelIDs.indexOf(e)&&t.updateAboutForLevelID(e)}),this)},negative:function(){this.hide()},testOption:function(e){return this.currentCommand&&new RegExp("--"+e).test(this.currentCommand.get("rawStr"))},show:function(e,t){this.currentCommand=t,this.updateSolvedStatus(),this.showDeferred=e,this.keyboardListener.listen(),b.__super__.show.apply(this)},hide:function(){this.showDeferred&&this.showDeferred.resolve(),this.showDeferred=void 0,this.keyboardListener.mute(),this.turnOffKeyboardSelection(),b.__super__.hide.apply(this)},loadLevelID:function(e){if(!this.testOption("noOutput")){u.getEventBaton().trigger("commandSubmitted","level "+e);var t=d.getLevel(e).name.en_US;l.levelSelected(t)}this.hide()},updateSolvedStatus:function(){this.seriesViews.forEach((function(e){e.updateSolvedStatus()}),this)},buildSequences:function(){this.seriesViews=[],this.getSequencesOnTab().forEach((function(e){this.seriesViews.push(new v({destination:this.$el,name:e,navEvents:this.navEvents}))}),this)}}),v=g.extend({tagName:"div",className:"seriesView box flex1 vertical",template:i.template($("#series-view").html()),events:{"click a.levelIcon":"click","mouseenter a.levelIcon":"enterIcon"},initialize:function(e){this.name=e.name||"intro",this.navEvents=e.navEvents,this.info=d.getSequenceInfo(this.name),this.levels=d.getLevelsInSequence(this.name),this.levelIDs=[];var t=null;this.levels.forEach((function(e){null===t&&(t=this.formatLevelAbout(e.id)),this.levelIDs.push(e.id)}),this),this.destination=e.destination,this.JSON={displayName:c.getIntlKey(this.info,"displayName"),about:c.getIntlKey(this.info,"about")||" ",levelInfo:t,ids:this.levelIDs},this.render(),this.updateSolvedStatus()},updateSolvedStatus:function(){this.$("a.levelIcon").each((function(e,t){var o=$(t).attr("data-id");$(t).toggleClass("solved",d.isLevelSolved(o))}))},getEventID:function(e){var t=e.target;return $(t).attr("data-id")},setAbout:function(e){this.$("p.levelInfo").text(e)},enterIcon:function(e){var t=this.getEventID(e);this.updateAboutForLevelID(t)},updateAboutForLevelID:function(e){this.setAbout(this.formatLevelAbout(e))},formatLevelAbout:function(e){var t=d.getLevel(e);return this.getLevelNumberFromID(e)+": "+c.getName(t)},getLevelNumberFromID:function(e){return e.replace(/[^0-9]/g,"")},click:function(e){var t=this.getEventID(e);this.navEvents.trigger("clickedID",t)}});o.LevelDropdownView=b},{"../../levels":121,"../app":52,"../intl":67,"../log":73,"../stores/LevelStore":88,"../stores/LocaleStore":89,"../util":96,"../util/debounce":91,"../util/keyboard":98,"../views":106,backbone:1,q:29,underscore:47}],108:[function(e,t,o){var i=e("q"),a=e("backbone"),n=e("../views").LeftRightView,r=e("../views").ModalAlert,s=e("../views/gitDemonstrationView").GitDemonstrationView,c=e("../views/builderViews").MarkdownPresenter,l=e("../util/keyboard").KeyboardListener,m=e("../util/debounce"),u=a.View.extend({tagName:"div",className:"multiView",navEventDebounce:550,deathTime:700,typeToConstructor:{ModalAlert:r,GitDemonstrationView:s,MarkdownPresenter:c},initialize:function(e){e=e||{},this.childViewJSONs=e.childViews||[{type:"ModalAlert",options:{markdown:"Woah wtf!!"}},{type:"GitDemonstrationView",options:{command:"git checkout -b side; git commit; git commit"}},{type:"ModalAlert",options:{markdown:"Im second"}}],this.deferred=e.deferred||i.defer(),this.childViews=[],this.currentIndex=0,this.navEvents=Object.assign({},a.Events),this.navEvents.on("negative",this.getNegFunc(),this),this.navEvents.on("positive",this.getPosFunc(),this),this.navEvents.on("quit",this.finish,this),this.navEvents.on("exit",this.finish,this),this.keyboardListener=new l({events:this.navEvents,aliasMap:{left:"negative",right:"positive",enter:"positive",esc:"quit"}}),this.render(),e.wait||this.start()},onWindowFocus:function(){},getAnimationTime:function(){return 700},getPromise:function(){return this.deferred.promise},getPosFunc:function(){return m(function(){this.navForward()}.bind(this),this.navEventDebounce,!0)},getNegFunc:function(){return m(function(){this.navBackward()}.bind(this),this.navEventDebounce,!0)},lock:function(){this.locked=!0},unlock:function(){this.locked=!1},navForward:function(){if(!this.locked)return this.currentIndex===this.childViews.length-1?(this.hideViewIndex(this.currentIndex),void this.finish()):void this.navIndexChange(1)},navBackward:function(){0!==this.currentIndex&&this.navIndexChange(-1)},navIndexChange:function(e){this.hideViewIndex(this.currentIndex),this.currentIndex+=e,this.showViewIndex(this.currentIndex)},hideViewIndex:function(e){this.childViews[e].hide()},showViewIndex:function(e){this.childViews[e].show()},finish:function(){this.keyboardListener.mute(),this.childViews.forEach((function(e){e.die()})),this.deferred.resolve()},start:function(){this.showViewIndex(this.currentIndex)},createChildView:function(e){var t=e.type;if(!this.typeToConstructor[t])throw new Error('no constructor for type "'+t+'"');return new this.typeToConstructor[t](Object.assign({},e.options,{wait:!0}))},addNavToView:function(e,t){var o=new n({events:this.navEvents,destination:e.getDestination(),showLeft:0!==t,lastNav:t===this.childViewJSONs.length-1});e.receiveMetaNav&&e.receiveMetaNav(o,this)},render:function(){this.childViewJSONs.forEach((function(e,t){var o=this.createChildView(e);this.childViews.push(o),this.addNavToView(o,t)}),this)}});o.MultiView=u},{"../util/debounce":91,"../util/keyboard":98,"../views":106,"../views/builderViews":103,"../views/gitDemonstrationView":105,backbone:1,q:29}],109:[function(e,t,o){e("../util/errors").GitError;var i=e("underscore"),a=e("q"),n=e("backbone"),r=e("../views").ModalTerminal,s=e("../views").ContainedBase,c=e("../views").ConfirmCancelView,l=e("../intl");e("jquery-ui/ui/widget"),e("jquery-ui/ui/scroll-parent"),e("jquery-ui/ui/data"),e("jquery-ui/ui/widgets/mouse"),e("jquery-ui/ui/ie"),e("jquery-ui/ui/widgets/sortable"),e("jquery-ui/ui/plugin"),e("jquery-ui/ui/safe-active-element"),e("jquery-ui/ui/safe-blur"),e("jquery-ui/ui/widgets/draggable");var m=s.extend({tagName:"div",template:i.template($("#interactive-rebase-template").html()),initialize:function(e){this.deferred=e.deferred,this.rebaseMap={},this.entryObjMap={},this.options=e,this.rebaseEntries=new d,e.toRebase.reverse(),e.toRebase.forEach((function(e){var t=e.get("id");this.rebaseMap[t]=e,this.entryObjMap[t]=new u({id:t}),this.rebaseEntries.add(this.entryObjMap[t])}),this),this.container=new r({title:l.str("interactive-rebase-title")}),this.render(),this.show(),e.aboveAll&&$("#canvasHolder").css("display","none")},restoreVis:function(){$("#canvasHolder").css("display","inherit")},confirm:function(){this.die(),this.options.aboveAll&&this.restoreVis();var e=[];this.$("ul.rebaseEntries li").each((function(t,o){e.push(o.id)}));var t=[];e.forEach((function(e){this.entryObjMap[e].get("pick")&&t.unshift(this.rebaseMap[e])}),this),t.reverse(),this.deferred.resolve(t),this.$el.html("")},render:function(){var e={num:Object.keys(this.rebaseMap).length,solutionOrder:this.options.initialCommitOrdering},t=this.container.getInsideElement();this.$el.html(this.template(e)),$(t).append(this.el);var o=this.$("ul.rebaseEntries");this.rebaseEntries.each((function(e){new h({el:o,model:e})}),this),o.sortable({axis:"y",placeholder:"rebaseEntry transitionOpacity ui-state-highlight",appendTo:"parent"}),this.makeButtons()},cancel:function(){this.hide(),this.options.aboveAll&&this.restoreVis(),this.deferred.resolve([])},makeButtons:function(){var e=a.defer();e.promise.then(function(){this.confirm()}.bind(this)).fail(function(){this.cancel()}.bind(this)).done(),new c({destination:this.$(".confirmCancel"),deferred:e,disableCancelButton:!!this.options.aboveAll})}}),u=n.Model.extend({defaults:{pick:!0},toggle:function(){this.set("pick",!this.get("pick"))}}),d=n.Collection.extend({model:u}),h=n.View.extend({tagName:"li",template:i.template($("#interactive-rebase-entry-template").html()),toggle:function(){this.model.toggle(),this.listEntry.toggleClass("notPicked",!this.model.get("pick"))},initialize:function(e){this.render()},render:function(){this.$el.append(this.template(this.model.toJSON())),this.listEntry=this.$el.children(":last"),this.listEntry.delegate("#toggleButton","click",function(){this.toggle()}.bind(this))}});o.InteractiveRebaseView=m},{"../intl":67,"../util/errors":93,"../views":106,backbone:1,"jquery-ui/ui/data":8,"jquery-ui/ui/ie":9,"jquery-ui/ui/plugin":10,"jquery-ui/ui/safe-active-element":11,"jquery-ui/ui/safe-blur":12,"jquery-ui/ui/scroll-parent":13,"jquery-ui/ui/widget":14,"jquery-ui/ui/widgets/draggable":15,"jquery-ui/ui/widgets/mouse":16,"jquery-ui/ui/widgets/sortable":17,q:29,underscore:47}],110:[function(e,t,o){e("backbone");var i=e("q"),a=e("./index").Animation,n=e("./index").PromiseAnimation,r=e("../../util/constants").GRAPHICS,s={},c=function(e,t){var o=1*r.defaultAnimationTime,i=2*o;return{animation:function(){e.refreshTree(o),t.setBirth(),t.parentInFront(),e.visBranchesFront(),t.animateUpdatedPosition(i,"bounce"),t.animateOutgoingEdges(o)},duration:Math.max(o,i)}};s.genCommitBirthAnimation=function(e,t,o){if(!e)throw new Error("Need animation queue to add closure to!");var i=t.get("visNode"),n=c(o,i);e.add(new a({closure:n.animation,duration:n.duration}))},s.genCommitBirthPromiseAnimation=function(e,t){var o=e.get("visNode");return new n(c(t,o))},s.highlightEachWithPromise=function(e,t,o){return t.forEach(function(t){e=e.then(function(){return this.playHighlightPromiseAnimation(t,o)}.bind(this))}.bind(this)),e},s.playCommitBirthPromiseAnimation=function(e,t){var o=this.genCommitBirthPromiseAnimation(e,t);return o.play(),o.getPromise()},s.playRefreshAnimationAndFinish=function(e,t){var o=new n({closure:function(){e.refreshTree()}});o.play(),t.thenFinish(o.getPromise())},s.genRefreshPromiseAnimation=function(e){return new n({closure:function(){e.refreshTree()}})},s.playRefreshAnimationSlow=function(e){var t=r.defaultAnimationTime;return this.playRefreshAnimation(e,2*t)},s.playRefreshAnimation=function(e,t){var o=new n({duration:t,closure:function(){e.refreshTree(t)}});return o.play(),o.getPromise()},s.refreshTree=function(e,t){e.add(new a({closure:function(){t.refreshTree()}}))},s.genHighlightPromiseAnimation=function(e,t){var o=t.get("visBranch")||t.get("visNode")||t.get("visTag");if(!o)throw console.log(t),new Error("could not find vis object for dest obj");var i=e.get("visNode");return new n(function(e,t){var o=.66*r.defaultAnimationTime*2;return{animation:function(){e.highlightTo(t,o,"easeInOut")},duration:1.5*o}}(i,o))},s.playHighlightPromiseAnimation=function(e,t){var o=this.genHighlightPromiseAnimation(e,t);return o.play(),o.getPromise()},s.getDelayedPromise=function(e){var t=i.defer();return setTimeout(t.resolve,e||1e3),t.promise},s.delay=function(e,t){t=t||r.defaultAnimationTime,e.add(new a({closure:function(){},duration:t}))},o.AnimationFactory=s},{"../../util/constants":90,"./index":111,backbone:1,q:29}],111:[function(e,t,o){var i=e("q"),a=e("backbone"),n=e("../../actions/GlobalStateActions"),r=e("../../util/constants").GRAPHICS,s=a.Model.extend({defaults:{duration:r.defaultAnimationTime,closure:null},validateAtInit:function(){if(!this.get("closure"))throw new Error("give me a closure!")},initialize:function(e){this.validateAtInit()},run:function(){this.get("closure")()}}),c=a.Model.extend({defaults:{animations:null,index:0,callback:null,defer:!1,promiseBased:!1},initialize:function(e){this.set("animations",[]),e.callback||console.warn("no callback")},thenFinish:function(e,t){e.then(function(){this.finish()}.bind(this)),e.fail((function(e){throw console.log("uncaught error",e),e})),this.set("promiseBased",!0),t&&t.resolve()},add:function(e){if(!(e instanceof s))throw new Error("Need animation not something else");this.get("animations").push(e)},start:function(){this.set("index",0),n.changeIsAnimating(!0),this.next()},finish:function(){n.changeIsAnimating(!1),this.get("callback")()},next:function(){var e=this.get("animations"),t=this.get("index");if(t>=e.length)this.finish();else{var o=e[t],i=o.get("duration");o.run(),this.set("index",t+1),setTimeout(function(){this.next()}.bind(this),i)}}}),l=a.Model.extend({defaults:{deferred:null,closure:null,duration:r.defaultAnimationTime},initialize:function(e){if(!e.closure&&!e.animation)throw new Error("need closure or animation");this.set("closure",e.closure||e.animation),this.set("duration",e.duration||this.get("duration")),this.set("deferred",e.deferred||i.defer())},getPromise:function(){return this.get("deferred").promise},play:function(){this.get("closure")(),setTimeout(function(){this.get("deferred").resolve()}.bind(this),this.get("duration"))},then:function(e){return this.get("deferred").promise.then(e)}});l.fromAnimation=function(e){return new l({closure:e.get("closure"),duration:e.get("duration")})},o.Animation=s,o.PromiseAnimation=l,o.AnimationQueue=c},{"../../actions/GlobalStateActions":49,"../../util/constants":90,backbone:1,q:29}],112:[function(e,t,o){var i=e("q"),a=e("../intl"),n=e("../util/constants").GRAPHICS,r=e("../util/debounce"),s=e("../stores/GlobalStateStore"),c=e("../visuals/visNode").VisNode,l=e("../visuals/visBranch").VisBranch,m=e("../visuals/visBranch").VisBranchCollection,u=e("../visuals/visTag").VisTag,d=e("../visuals/visTag").VisTagCollection,h=e("../visuals/visEdge").VisEdge,p=e("../visuals/visEdge").VisEdgeCollection;function g(t){t=t||{},this.options=t,this.visualization=t.visualization,this.commitCollection=t.commitCollection,this.branchCollection=t.branchCollection,this.tagCollection=t.tagCollection,this.visNodeMap={},this.visEdgeCollection=new p,this.visBranchCollection=new m,this.visTagCollection=new d,this.commitMap={},this.rootCommit=null,this.branchStackMap=null,this.tagStackMap=null,this.upstreamBranchSet=null,this.upstreamTagSet=null,this.upstreamHeadSet=null,this.paper=t.paper,this.gitReady=!1,this.branchCollection.on("add",this.addBranchFromEvent,this),this.branchCollection.on("remove",this.removeBranch,this),this.tagCollection.on("add",this.addTagFromEvent,this),this.tagCollection.on("remove",this.removeTag,this),this.deferred=[],this.flipFraction=.65;var o=e("../app"),i=this;this._onRefreshTree=function(){i.refreshTree()},o.getEvents().on("refreshTree",this._onRefreshTree,this)}g.prototype.defer=function(e){this.deferred.push(e)},g.prototype.deferFlush=function(){this.deferred.forEach((function(e){e()}),this),this.deferred=[]},g.prototype.resetAll=function(){this.visEdgeCollection.toArray().forEach((function(e){e.remove()}),this),this.visBranchCollection.toArray().forEach((function(e){e.remove()}),this),this.visTagCollection.toArray().forEach((function(e){e.remove()}),this),Object.values(this.visNodeMap).forEach((function(e){e.remove()}),this),this.visEdgeCollection.reset(),this.visBranchCollection.reset(),this.visTagCollection.reset(),this.visNodeMap={},this.rootCommit=null,this.commitMap={}},g.prototype.tearDown=function(){this.resetAll(),this.paper.remove(),e("../app").getEvents().removeListener("refreshTree",this._onRefreshTree)},g.prototype.assignGitEngine=function(e){this.gitEngine=e,this.initHeadBranch(),this.deferFlush()},g.prototype.getVisualization=function(){return this.visualization},g.prototype.initHeadBranch=function(){this.addBranchFromEvent(this.gitEngine.HEAD)},g.prototype.getScreenPadding=function(){var e=s.getFlipTreeY()?3:1.5;return{widthPadding:1.5*n.nodeRadius,topHeightPadding:n.nodeRadius*e,bottomHeightPadding:5*n.nodeRadius}},g.prototype.getPosBoundaries=function(){return this.gitEngine.hasOrigin()?{min:0,max:.5}:this.gitEngine.isOrigin()?{min:.5,max:1}:{min:0,max:1}},g.prototype.getFlipPos=function(){var e=this.getPosBoundaries(),t=e.min,o=e.max;return this.flipFraction*(o-t)+t},g.prototype.getIsGoalVis=function(){return!!this.options.isGoalVis},g.prototype.getLevelBlob=function(){return this.visualization.options.levelBlob||{}},g.prototype.toScreenCoords=function(e){if(!this.paper.width)throw new Error("being called too early for screen coords");var t,o,i,a,n=this.getScreenPadding(),r=function(e,t,o){return o+e*(t-2*o)}(e.x,this.paper.width,n.widthPadding),c=(t=e.y,o=this.paper.height,i=n.topHeightPadding,a=n.bottomHeightPadding,i+t*(o-a-i));return s.getFlipTreeY()&&(c=this.paper.height-c),{x:r,y:c}},g.prototype.animateAllAttrKeys=function(e,t,o,a){var r=i.defer(),s=function(i){i.animateAttrKeys(e,t,o,a)};this.visBranchCollection.each(s),this.visEdgeCollection.each(s),this.visTagCollection.each(s),Object.values(this.visNodeMap).forEach(s);var c=void 0!==o?o:n.defaultAnimationTime;return setTimeout((function(){r.resolve()}),c),r.promise},g.prototype.finishAnimation=function(e){if(!(e=e||1))throw new Error("need speed by time i finish animation "+e);var t=i.defer(),o=i.defer(),r=n.defaultAnimationTime,s=n.nodeRadius,c=a.str("solved-level"),l=null,m=function(){(l=this.paper.text(this.paper.width/2,this.paper.height/2,c)).attr({opacity:0,"font-weight":500,"font-size":"32pt","font-family":"Menlo, Monaco, Consolas, 'Droid Sans Mono', monospace",stroke:"#000","stroke-width":2,fill:"#000"}),l.animate({opacity:1},r)}.bind(this);return t.promise.then(function(){return this.animateAllAttrKeys({exclude:["circle"]},{opacity:0},1.1*r/e)}.bind(this)).then(function(){return this.animateAllAttrKeys({exclude:["arrow","rect","path","text"]},{r:2*s},1.5*r/e)}.bind(this)).then(function(){return this.animateAllAttrKeys({exclude:["arrow","rect","path","text"]},{r:.75*s},.5*r/e)}.bind(this)).then(function(){return m(),this.explodeNodes(e)}.bind(this)).then(function(){return this.explodeNodes(e)}.bind(this)).then(function(){return this.animateAllAttrKeys({exclude:["arrow","rect","path","text"]},{},1.25*r)}.bind(this)).then(function(){return l.animate({opacity:0},r,void 0,void 0,(function(){l.remove()})),this.animateAllAttrKeys({},{})}.bind(this)).then((function(){o.resolve()})).fail((function(e){console.warn("animation error "+e)})).done(),t.resolve(),o.promise},g.prototype.explodeNodes=function(e){var t=i.defer(),o=[];Object.values(this.visNodeMap).forEach((function(t){o.push(t.getExplodeStepFunc(e))}));var a=setInterval((function(){var e=[];if(o.forEach((function(t){t()&&e.push(t)})),!e.length)return clearInterval(a),void t.resolve();o=e}),1/40);return t.promise},g.prototype.animateAllFromAttrToAttr=function(e,t,o){var i=function(i){var a=i.getID();o.includes(a)||e[a]&&t[a]&&i.animateFromAttrToAttr(e[a],t[a])};this.visBranchCollection.each(i),this.visEdgeCollection.each(i),this.visTagCollection.each(i),Object.values(this.visNodeMap).forEach(i)},g.prototype.genSnapshot=function(){this.fullCalc();var e={};return Object.values(this.visNodeMap).forEach((function(t){e[t.get("id")]=t.getAttributes()}),this),this.visBranchCollection.each((function(t){e[t.getID()]=t.getAttributes()}),this),this.visEdgeCollection.each((function(t){e[t.getID()]=t.getAttributes()}),this),this.visTagCollection.each((function(t){e[t.getID()]=t.getAttributes()}),this),e},g.prototype.refreshTree=function(e){this.gitReady&&this.gitEngine.rootCommit&&(this.fullCalc(),this.animateAll(e))},g.prototype.refreshTreeHarsh=function(){this.fullCalc(),this.animateAll(0)},g.prototype.animateAll=function(e){this.zIndexReflow(),this.animateEdges(e),this.animateNodePositions(e),this.animateRefs(e)},g.prototype.fullCalc=function(){this.calcTreeCoords(),this.calcGraphicsCoords()},g.prototype.calcTreeCoords=function(){if(!this.rootCommit)throw new Error("grr, no root commit!");this.calcUpstreamSets(),this.calcBranchStacks(),this.calcTagStacks(),this.calcDepth(),this.calcWidth()},g.prototype.calcGraphicsCoords=function(){this.visBranchCollection.each((function(e){e.updateName()})),this.visTagCollection.each((function(e){e.updateName()}))},g.prototype.calcUpstreamSets=function(){this.upstreamBranchSet=this.gitEngine.getUpstreamBranchSet(),this.upstreamHeadSet=this.gitEngine.getUpstreamHeadSet(),this.upstreamTagSet=this.gitEngine.getUpstreamTagSet()},g.prototype.getCommitUpstreamBranches=function(e){return this.branchStackMap[e.get("id")]},g.prototype.getBlendedHuesForCommit=function(e){var t=this.upstreamBranchSet[e.get("id")];if(!t)throw new Error("that commit doesn't have upstream branches!");return this.blendHuesFromBranchStack(t)},g.prototype.blendHuesFromBranchStack=function(e){var t=[];return e.forEach((function(e){var o=e.obj.get("visBranch").get("fill");if("hsb"!==o.slice(0,3)){var i=Raphael.color(o);o=(o="hsb("+String(i.h)+","+String(i.l))+","+String(i.s)+")"}t.push(o)})),function(e){var t=0,o=0,i=0,a=0,n=e.length;e.forEach((function(e){var n=e.split("(")[1];n=(n=n.split(")")[0]).split(","),i+=parseFloat(n[1]),a+=parseFloat(n[2]);var r=parseFloat(n[0])*Math.PI*2;t+=Math.cos(r),o+=Math.sin(r)})),t/=n,o/=n,i/=n,a/=n;var r=Math.atan2(o,t)/(2*Math.PI);r<0&&(r+=1);return"hsb("+String(r)+","+String(i)+","+String(a)+")"}(t)},g.prototype.getCommitUpstreamStatus=function(e){if(!this.upstreamBranchSet)throw new Error("Can't calculate this yet!");var t=e.get("id"),o=this.upstreamBranchSet,i=this.upstreamHeadSet,a=this.upstreamTagSet;return o[t]?"branch":a[t]?"tag":i[t]?"head":"none"},g.prototype.calcTagStacks=function(){var e=this.gitEngine.getTags(),t={};e.forEach((function(e){var o=e.target.get("id");t[o]=t[o]||[],t[o].push(e),t[o].sort((function(e,t){var o=e.obj.get("id"),i=t.obj.get("id");return o.localeCompare(i)}))})),this.tagStackMap=t},g.prototype.calcBranchStacks=function(){var e=this.gitEngine.getBranches(),t={};e.forEach((function(e){var o=e.target.get("id");t[o]=t[o]||[],t[o].push(e),t[o].sort((function(e,t){var o=e.obj.get("id"),i=t.obj.get("id");return"main"==o||"main"==i?"main"==o?-1:1:o.localeCompare(i)}))})),this.branchStackMap=t},g.prototype.calcWidth=function(){this.maxWidthRecursive(this.rootCommit);var e=this.getPosBoundaries();this.assignBoundsRecursive(this.rootCommit,e.min,e.max)},g.prototype.maxWidthRecursive=function(e){var t=0;e.get("children").forEach((function(o){if(o.isMainParent(e)){var i=this.maxWidthRecursive(o);t+=i}}),this);var o=Math.max(1,t);return e.get("visNode").set("maxWidth",o),o},g.prototype.assignBoundsRecursive=function(e,t,o){var i=(o+t)/2;if(e.get("visNode").get("pos").x=i,0!==e.get("children").length){var a=o-t,n=0,r=e.get("children");r.forEach((function(t){t.isMainParent(e)&&(n+=t.get("visNode").getMaxWidthScaled())}),this);var s=t;r.forEach((function(t,o){if(t.isMainParent(e)){var i=t.get("visNode").getMaxWidthScaled()/n*a,r=s,c=r+i;this.assignBoundsRecursive(t,r,c),s=r+i}}),this)}},g.prototype.calcDepth=function(){var e=this.calcDepthRecursive(this.rootCommit,0);e>15&&console.warn("graphics are degrading from too many layers");var t=this.getDepthIncrement(e);Object.values(this.visNodeMap).forEach((function(e){e.setDepthBasedOn(t,this.getHeaderOffset())}),this)},g.prototype.animateNodePositions=function(e){Object.values(this.visNodeMap).forEach((function(t){t.animateUpdatedPosition(e)}),this)},g.prototype.addBranchFromEvent=function(e,t,o){var i=function(){this.addBranch(e)}.bind(this);this.gitEngine&&this.gitReady?i():this.defer(i)},g.prototype.addBranch=function(e){var t=new l({branch:e,gitVisuals:this,gitEngine:this.gitEngine});this.visBranchCollection.add(t),this.gitReady?t.genGraphics(this.paper):this.defer(function(){t.genGraphics(this.paper)}.bind(this))},g.prototype.addTagFromEvent=function(e,t,o){var i=function(){this.addTag(e)}.bind(this);this.gitEngine&&this.gitReady?i():this.defer(i)},g.prototype.removeTag=function(e,t,o){var i=function(){var t;this.visTagCollection.each((function(o){o.get("tag")==e&&(t=o)}),!0),t.remove(),this.removeVisTag(t)}.bind(this);this.gitEngine&&this.gitReady?i():this.defer(i)},g.prototype.addTag=function(e){var t=new u({tag:e,gitVisuals:this,gitEngine:this.gitEngine});this.visTagCollection.add(t),this.gitReady?t.genGraphics(this.paper):this.defer(function(){t.genGraphics(this.paper)}.bind(this))},g.prototype.removeVisBranch=function(e){this.visBranchCollection.remove(e)},g.prototype.removeVisTag=function(e){this.visTagCollection.remove(e)},g.prototype.removeVisNode=function(e){delete this.visNodeMap[e.getID()]},g.prototype.removeVisEdge=function(e){this.visEdgeCollection.remove(e)},g.prototype.animateRefs=function(e){this.visBranchCollection.each((function(t){t.animateUpdatedPos(e)}),this),this.visTagCollection.each((function(t){t.animateUpdatedPos(e)}),this)},g.prototype.animateEdges=function(e){this.visEdgeCollection.each((function(t){t.animateUpdatedPath(e)}),this)},g.prototype.getMinLayers=function(){return this.options.smallCanvas?2:7},g.prototype.getDepthIncrement=function(e){return e=Math.max(e,this.getMinLayers()),(1-this.getHeaderOffset())/e},g.prototype.shouldHaveHeader=function(){return this.gitEngine.isOrigin()||this.gitEngine.hasOrigin()},g.prototype.getHeaderOffset=function(){return this.shouldHaveHeader()?.05:0},g.prototype.calcDepthRecursive=function(e,t){e.get("visNode").setDepth(t);var o=e.get("children"),i=t;return o.forEach((function(e){var o=this.calcDepthRecursive(e,t+1);i=Math.max(o,i)}),this),i},g.prototype.canvasResize=function(e,t){this.resizeFunc||this.genResizeFunc(),this.resizeFunc(e,t)},g.prototype.genResizeFunc=function(){this.resizeFunc=r(function(e,t){this.refreshTree()}.bind(this),200,!0)},g.prototype.addNode=function(e,t){this.commitMap[e]=t,t.get("rootCommit")&&(this.rootCommit=t);var o=new c({id:e,commit:t,gitVisuals:this,gitEngine:this.gitEngine});return this.visNodeMap[e]=o,this.gitReady&&o.genGraphics(this.paper),o},g.prototype.addEdge=function(e,t){var o=this.visNodeMap[e],i=this.visNodeMap[t];if(!o||!i)throw new Error("one of the ids in ("+e+", "+t+") does not exist");var a=new h({tail:o,head:i,gitVisuals:this,gitEngine:this.gitEngine});this.visEdgeCollection.add(a),this.gitReady&&a.genGraphics(this.paper)},g.prototype.zIndexReflow=function(){this.visNodesFront(),this.visBranchesFront(),this.visTagsFront()},g.prototype.visNodesFront=function(){Object.values(this.visNodeMap).forEach((function(e){e.toFront()}))},g.prototype.visBranchesFront=function(){this.visBranchCollection.each((function(e){e.nonTextToFront(),e.textToFront()})),this.visBranchCollection.each((function(e){e.textToFrontIfInStack()}))},g.prototype.visTagsFront=function(){this.visTagCollection.each((function(e){e.nonTextToFront(),e.textToFront()})),this.visTagCollection.each((function(e){e.textToFrontIfInStack()}))},g.prototype.drawTreeFromReload=function(){this.gitReady=!0,this.deferFlush(),this.calcTreeCoords()},g.prototype.drawTreeFirstTime=function(){this.gitReady=!0,this.calcTreeCoords(),Object.values(this.visNodeMap).forEach((function(e){e.genGraphics(this.paper)}),this),this.visEdgeCollection.each((function(e){e.genGraphics(this.paper)}),this),this.visBranchCollection.each((function(e){e.genGraphics(this.paper)}),this),this.visTagCollection.each((function(e){e.genGraphics(this.paper)}),this),this.zIndexReflow()},o.GitVisuals=g},{"../app":52,"../intl":67,"../stores/GlobalStateStore":87,"../util/constants":90,"../util/debounce":91,"../visuals/visBranch":115,"../visuals/visEdge":116,"../visuals/visNode":117,"../visuals/visTag":118,q:29}],113:[function(e,t,o){var i=e("backbone").Model.extend({removeKeys:function(e){e.forEach((function(e){this.get(e)&&this.get(e).remove()}),this)},animateAttrKeys:function(e,t,o,i){e=Object.assign({},{include:["circle","arrow","rect","path","text"],exclude:[]},e||{});var a=this.getAttributes();e.include.forEach((function(e){a[e]=Object.assign({},a[e],t)})),e.exclude.forEach((function(e){delete a[e]})),this.animateToAttr(a,o,i)}});o.VisBase=i},{backbone:1}],114:[function(e,t,o){var i=e("backbone").Model.extend({removeKeys:function(e){e.forEach((function(e){this.get(e)&&this.get(e).remove()}),this)},getNonAnimateKeys:function(){return["stroke-dasharray"]},getIsInOrigin:function(){return!!this.get("gitEngine")&&this.get("gitEngine").isOrigin()},animateToAttr:function(e,t,o){if(0!==t){var i=void 0!==t?t:this.get("animationSpeed"),a=o||this.get("animationEasing");this.setAttr(e,!1,i,a)}else this.setAttr(e,!0)},setAttrBase:function(e,t,o,i,a){e.forEach((function(e){o?this.get(e).attr(t[e]):(this.get(e).stop(),this.get(e).animate(t[e],i,a),this.getNonAnimateKeys().forEach((function(o){t[e]&&void 0!==t[e][o]&&this.get(e).attr(o,t[e][o])}),this)),t.css&&$(this.get(e).node).css(t.css)}),this)},animateAttrKeys:function(e,t,o,i){e=Object.assign({},{include:["circle","arrow","rect","path","text"],exclude:[]},e||{});var a=this.getAttributes();e.include.forEach((function(e){a[e]=Object.assign({},a[e],t)})),e.exclude.forEach((function(e){delete a[e]})),this.animateToAttr(a,o,i)}});o.VisBase=i},{backbone:1}],115:[function(e,t,o){var i=e("backbone"),a=e("../util/constants").GRAPHICS,n=e("../visuals/visBase").VisBase,r=e("../graph/treeCompare"),s=function(){var e=Math.random();return"hsb("+String(e)+",0.6,1)"},c=n.extend({defaults:{pos:null,text:null,rect:null,arrow:null,isHead:!1,flip:1,fill:a.rectFill,stroke:a.rectStroke,"stroke-width":a.rectStrokeWidth,offsetX:4.75*a.nodeRadius,offsetY:0,arrowHeight:14,arrowInnerSkew:0,arrowEdgeHeight:6,arrowLength:14,arrowOffsetFromCircleX:10,vPad:5,hPad:5,animationSpeed:a.defaultAnimationTime,animationEasing:a.defaultEasing},validateAtInit:function(){if(!this.get("branch"))throw new Error("need a branch!")},getID:function(){return this.get("branch").get("id")},initialize:function(){if(this.validateAtInit(),this.gitVisuals=this.get("gitVisuals"),this.gitEngine=this.get("gitEngine"),!this.gitEngine)throw new Error("asd wtf");this.get("branch").set("visBranch",this);var e=this.get("branch").get("id");"HEAD"==e?(this.set("isHead",!0),this.set("flip",-1),this.refreshOffset(),this.set("fill",a.headRectFill)):"main"!==e&&this.set("fill",s())},getCommitPosition:function(){var e=this.gitEngine.getCommitFromRef(this.get("branch")),t=e.get("visNode");return this.set("flip",this.getFlipValue(e,t)),this.refreshOffset(),t.getScreenCoords()},getDashArray:function(){return this.get("gitVisuals").getIsGoalVis()?this.getIsLevelBranchCompared()?"":"--":""},getIsGoalAndNotCompared:function(){return!!this.get("gitVisuals").getIsGoalVis()&&!this.getIsLevelBranchCompared()},getIsLevelBranchCompared:function(){if(this.getIsMain())return!0;var e=this.get("gitVisuals").getLevelBlob();return!r.onlyMainCompared(e)},getIsMain:function(){return"main"==this.get("branch").get("id")},getFlipValue:function(e,t){var o=this.get("gitVisuals").getFlipPos(),i=t.get("pos").x>o;return"C0"===e.get("id")?-1:this.get("isHead")?i?this.isBranchStackEmpty()?-1:1:this.isBranchStackEmpty()?1:-1:i?-1:1},refreshOffset:function(){var e=4.75*a.nodeRadius;1===this.get("flip")?(this.set("offsetY",-33),this.set("offsetX",e-10)):(this.set("offsetY",33),this.set("offsetX",e-10))},getArrowTransform:function(){return 1===this.get("flip")?"t-2,-20R-35":"t2,20R-35"},getBranchStackIndex:function(){if(this.get("isHead"))return 0;var e=this.getBranchStackArray(),t=-1;return e.forEach((function(e,o){e.obj==this.get("branch")&&(t=o)}),this),t},getBranchStackLength:function(){return this.get("isHead")?1:this.getBranchStackArray().length},isBranchStackEmpty:function(){var e=this.gitVisuals.branchStackMap[this.getCommitID()];return!e||0===e.length},getCommitID:function(){var e=this.get("branch").get("target");return"branch"===e.get("type")&&(e=e.get("target")),e.get("id")},getBranchStackArray:function(){var e=this.gitVisuals.branchStackMap[this.getCommitID()];return void 0===e?(this.gitVisuals.calcBranchStacks(),this.getBranchStackArray()):e},getTextPosition:function(){var e=this.getCommitPosition(),t=this.getBranchStackIndex();return{x:e.x+this.get("flip")*this.get("offsetX"),y:e.y+t*a.multiBranchY+this.get("offsetY")}},getRectPosition:function(){var e=this.getTextPosition(),t=(this.get("flip"),this.getTextSize());return{x:e.x-.5*t.w-this.get("hPad"),y:e.y-.5*t.h-this.get("vPad")}},getArrowPath:function(){var e=function(e,t,o){return{x:e.x+t,y:e.y+o}},t=function(e){return String(Math.round(e.x))+","+String(Math.round(e.y))},o=this.get("flip"),i=e(this.getCommitPosition(),o*this.get("arrowOffsetFromCircleX"),0),a=e(i,o*this.get("arrowLength"),-this.get("arrowHeight")),n=e(i,o*this.get("arrowLength"),this.get("arrowHeight")),r=e(a,o*this.get("arrowInnerSkew"),this.get("arrowEdgeHeight")),s=e(n,o*this.get("arrowInnerSkew"),-this.get("arrowEdgeHeight")),c=e(r,49*o,0),l=e(s,49*o,0),m="";return m+="M"+t(c)+" ",[r,a,i,n,s,l].forEach((function(e){m+="L"+t(e)+" "}),this),m+="z"},getTextSize:function(){var e=function(e){return e.w||(e.w=75),e.h||(e.h=20),e},t=this.get("text").node;if(this.get("isHead")){var o=t.getBoundingClientRect();return e({w:o.width,h:o.height})}var i=0;return this.getBranchStackArray().forEach((function(e){i=Math.max(i,function(e){var t=e.get("text")?e.get("text").node:null;return null===t?0:t.getBoundingClientRect().width}(e.obj.get("visBranch")))})),e({w:i,h:t.getBoundingClientRect().height})},getSingleRectSize:function(){var e=this.getTextSize(),t=this.get("vPad"),o=this.get("hPad");return{w:e.w+2*t,h:e.h+2*o}},getRectSize:function(){var e=this.getTextSize(),t=this.get("vPad"),o=this.get("hPad"),i=this.getBranchStackLength();return{w:e.w+2*t,h:e.h*i*1.1+2*o}},getIsRemote:function(){return this.get("branch").getIsRemote()},getName:function(){var e=this.get("branch").getName(),t=this.get("branch")===this.gitEngine.HEAD.get("target"),o=this.getIsRemote(),i=this.gitEngine.getIsHg();return"HEAD"===e&&i&&(e="."),e+(!t||this.getIsInOrigin()||o?"":"*")},nonTextToFront:function(){this.get("arrow").toFront(),this.get("rect").toFront()},textToFront:function(){this.get("text").toFront()},textToFrontIfInStack:function(){0!==this.getBranchStackIndex()&&this.get("text").toFront()},getFill:function(){return this.get("isHead")||1==this.getBranchStackLength()||0!==this.getBranchStackIndex()?this.get("fill"):this.gitVisuals.blendHuesFromBranchStack(this.getBranchStackArray())},remove:function(){this.removeKeys(["text","arrow","rect"]),this.gitVisuals.removeVisBranch(this)},handleModeChange:function(){},genGraphics:function(e){var t=this.getTextPosition(),o=this.getName(),i=e.text(t.x,t.y,String(o));i.attr({"font-size":14,"font-family":"Menlo, Monaco, Consolas, 'Droid Sans Mono', monospace",opacity:this.getTextOpacity()}),this.set("text",i);var a=this.getAttributes(),n=this.getRectPosition(),r=this.getRectSize(),s=e.rect(n.x,n.y,r.w,r.h,8).attr(a.rect);this.set("rect",s);var c=this.getArrowPath(),l=e.path(c).attr(a.arrow);this.set("arrow",l);["text","rect","arrow"].forEach((function(e){$(this.get(e).node).css(a.css)}),this),this.attachClickHandlers(),s.toFront(),i.toFront()},attachClickHandlers:function(){this.get("gitVisuals").options.noClick||[this.get("rect"),this.get("text"),this.get("arrow")].forEach((function(e){e.click(this.onClick.bind(this))}),this)},shouldDisableClick:function(){return this.get("isHead")&&!this.gitEngine.getDetachedHead()},onClick:function(){if(!this.shouldDisableClick()){var t="git checkout "+this.gitEngine.resolveNameNoPrefix(this.get("branch"));e("../app").getEventBaton().trigger("commandSubmitted",t)}},updateName:function(){this.get("text").attr({text:this.getName()})},getNonTextOpacity:function(){return this.get("isHead")?this.gitEngine.getDetachedHead()?1:0:0!==this.getBranchStackIndex()?0:1},getTextOpacity:function(){return this.get("isHead")?this.gitEngine.getDetachedHead()?1:0:this.getIsGoalAndNotCompared()?0===this.getBranchStackIndex()?.7:.3:1},getStrokeWidth:function(){return this.getIsGoalAndNotCompared()?this.get("stroke-width")/5:this.get("stroke-width")},getAttributes:function(){var e=this.getTextOpacity();this.updateName();var t=this.getTextPosition(),o=this.getRectPosition(),i=this.getRectSize(),a=this.getArrowPath(),n=this.getDashArray();return{css:{cursor:this.shouldDisableClick()?"auto":"pointer"},text:{x:t.x,y:t.y,opacity:e},rect:{x:o.x,y:o.y,width:i.w,height:i.h,opacity:this.getNonTextOpacity(),fill:this.getFill(),stroke:this.get("stroke"),"stroke-dasharray":n,"stroke-width":this.getStrokeWidth()},arrow:{path:a,opacity:this.getNonTextOpacity(),fill:this.getFill(),stroke:this.get("stroke"),transform:this.getArrowTransform(),"stroke-dasharray":n,"stroke-width":this.getStrokeWidth()}}},animateUpdatedPos:function(e,t){var o=this.getAttributes();this.animateToAttr(o,e,t)},animateFromAttrToAttr:function(e,t,o,i){this.animateToAttr(e,0),this.animateToAttr(t,o,i)},setAttr:function(e,t,o,i){this.setAttrBase(["text","rect","arrow"],e,t,o,i)}}),l=i.Collection.extend({model:c});o.VisBranchCollection=l,o.VisBranch=c,o.randomHueString=s},{"../app":52,"../graph/treeCompare":65,"../util/constants":90,"../visuals/visBase":114,backbone:1}],116:[function(e,t,o){var i=e("backbone"),a=e("../util/constants").GRAPHICS,n=e("../visuals/visBase").VisBase,r=e("../stores/GlobalStateStore"),s=n.extend({defaults:{tail:null,head:null,animationSpeed:a.defaultAnimationTime,animationEasing:a.defaultEasing},validateAtInit:function(){["tail","head"].forEach((function(e){if(!this.get(e))throw new Error(e+" is required!")}),this)},getID:function(){return this.get("tail").get("id")+"."+this.get("head").get("id")},initialize:function(){this.validateAtInit(),this.gitVisuals=this.get("gitVisuals"),this.gitEngine=this.get("gitEngine"),this.get("tail").get("outgoingEdges").push(this)},remove:function(){this.removeKeys(["path"]),this.gitVisuals.removeVisEdge(this)},genSmoothBezierPathString:function(e,t){var o=e.getScreenCoords(),i=t.getScreenCoords();return this.genSmoothBezierPathStringFromCoords(o,i)},genSmoothBezierPathStringFromCoords:function(e,t){var o=r.getFlipTreeY()?-1:1,i=function(e){return String(Math.round(e.x))+","+String(Math.round(e.y))},n=function(e,t,i){return i=i||a.curveControlPointOffset,{x:e.x,y:e.y+o*i*t}},s=function(e,t,i){return{x:e.x+t,y:e.y+o*i}};e=n(e,-1,this.get("tail").getRadius()),t=n(t,1,1.15*this.get("head").getRadius());var c="";c+="M"+i(e)+" ",c+="C",c+=i(n(e,-1))+" ",c+=i(n(t,1))+" ",c+=i(t);var l=a.arrowHeadSize||10;return c+=" L"+i(s(t,-l,l)),c+=" L"+i(s(t,l,l)),c+=" L"+i(t),c+="C",c+=i(n(t,1))+" ",c+=i(n(e,-1))+" ",c+=i(e)},getBezierCurve:function(){return this.genSmoothBezierPathString(this.get("tail"),this.get("head"))},getStrokeColor:function(){return a.visBranchStrokeColorNone},setOpacity:function(e){e=void 0===e?1:e,this.get("path").attr({opacity:e})},genGraphics:function(e){var t=this.getBezierCurve(),o=e.path(t).attr({"stroke-width":a.visBranchStrokeWidth,stroke:this.getStrokeColor(),"stroke-linecap":"round","stroke-linejoin":"round",fill:this.getStrokeColor()});o.toBack(),this.set("path",o)},getOpacity:function(){var e=this.gitVisuals.getCommitUpstreamStatus(this.get("tail")),t={branch:1,tag:1,head:a.edgeUpstreamHeadOpacity,none:a.edgeUpstreamNoneOpacity};if(void 0===t[e])throw new Error("bad stat");return t[e]},getAttributes:function(){return{path:{path:this.getBezierCurve(),opacity:this.getOpacity()}}},animateUpdatedPath:function(e,t){var o=this.getAttributes();this.animateToAttr(o,e,t)},animateFromAttrToAttr:function(e,t,o,i){this.animateToAttr(e,0),this.animateToAttr(t,o,i)},animateToAttr:function(e,t,o){0!==t?(this.get("path").toBack(),this.get("path").stop(),this.get("path").animate(e.path,void 0!==t?t:this.get("animationSpeed"),o||this.get("animationEasing"))):this.get("path").attr(e.path)}}),c=i.Collection.extend({model:s});o.VisEdgeCollection=c,o.VisEdge=s},{"../stores/GlobalStateStore":87,"../util/constants":90,"../visuals/visBase":114,backbone:1}],117:[function(e,t,o){e("backbone");var i=e("../util/constants").GRAPHICS,a=e("../visuals/visBase").VisBase,n=a.extend({defaults:{depth:void 0,maxWidth:null,outgoingEdges:null,circle:null,text:null,id:null,pos:null,radius:null,commit:null,animationSpeed:i.defaultAnimationTime,animationEasing:i.defaultEasing,fill:i.defaultNodeFill,"stroke-width":i.defaultNodeStrokeWidth,stroke:i.defaultNodeStroke},getID:function(){return this.get("id")},validateAtInit:function(){if(!this.get("id"))throw new Error("need id for mapping");if(!this.get("commit"))throw new Error("need commit for linking");this.get("pos")||this.set("pos",{x:Math.random(),y:Math.random()})},initialize:function(){this.validateAtInit(),this.gitVisuals=this.get("gitVisuals"),this.gitEngine=this.get("gitEngine"),this.set("outgoingEdges",[])},setDepth:function(e){this.set("depth",Math.max(this.get("depth")||0,e))},setDepthBasedOn:function(e,t){if(void 0===this.get("depth"))throw new Error("no depth yet!");this.get("pos").y=this.get("depth")*e+t},getMaxWidthScaled:function(){var e=this.gitVisuals.getCommitUpstreamStatus(this.get("commit")),t={branch:1,tag:1,head:.3,none:.1};if(void 0===t[e])throw new Error("bad stat");return t[e]*this.get("maxWidth")},toFront:function(){this.get("circle").toFront(),this.get("text").toFront()},getOpacity:function(){var e={branch:1,tag:1,head:i.upstreamHeadOpacity,none:i.upstreamNoneOpacity},t=this.gitVisuals.getCommitUpstreamStatus(this.get("commit"));if(void 0===e[t])throw new Error("invalid status");return e[t]},getTextScreenCoords:function(){return this.getScreenCoords()},getAttributes:function(){var e=this.getScreenCoords(),t=this.getTextScreenCoords(),o=this.getOpacity(),a=this.getIsInOrigin()?i.originDash:"";return{circle:{cx:e.x,cy:e.y,opacity:o,r:this.getRadius(),fill:this.getFill(),"stroke-width":this.get("stroke-width"),"stroke-dasharray":a,stroke:this.get("stroke")},text:{x:t.x,y:t.y,opacity:o}}},animatePositionTo:function(e,t,o){var i=this.getAttributes(),a=e.getAttributes();i.circle=a.circle,i.text=a.text,this.animateToAttr(i,t,o)},highlightTo:function(e,t,o){var i=e.get("fill"),a={circle:{fill:i,stroke:i,"stroke-dasharray":"","stroke-width":5*this.get("stroke-width")},text:{}};this.animateToAttr(a,t,o)},animateUpdatedPosition:function(e,t){var o=this.getAttributes();this.animateToAttr(o,e,t)},animateFromAttrToAttr:function(e,t,o,i){this.animateToAttr(e,0),this.animateToAttr(t,o,i)},animateToSnapshot:function(e,t,o){e[this.getID()]&&this.animateToAttr(e[this.getID()],t,o)},setAttr:function(e,t,o,i){this.setAttrBase(["text","circle"],e,t,o,i)},animateToAttr:function(e,t,o){a.prototype.animateToAttr.apply(this,arguments);var i=void 0!==t?t:this.get("animationSpeed");o||this.get("animationEasing");"bounce"==o&&e.circle&&void 0!==e.circle.cx&&e.text&&void 0!==e.text.x&&(this.get("circle").animate(e.circle.cx,i,"easeInOut"),this.get("text").animate(e.text.x,i,"easeInOut"))},getScreenCoords:function(){var e=this.get("pos");return this.gitVisuals.toScreenCoords(e)},getRadius:function(){return this.get("radius")||i.nodeRadius},getParentScreenCoords:function(){return this.get("commit").get("parents")[0].get("visNode").getScreenCoords()},setBirthPosition:function(){var e=this.getParentScreenCoords();this.get("circle").attr({cx:e.x,cy:e.y,opacity:0,r:0}),this.get("text").attr({x:e.x,y:e.y,opacity:0})},setBirthFromSnapshot:function(e){var t=e[this.get("commit").get("parents")[0].get("visNode").getID()];this.get("circle").attr({opacity:0,r:0,cx:t.circle.cx,cy:t.circle.cy}),this.get("text").attr({opacity:0,x:t.text.x,y:t.text.y});var o={x:t.circle.cx,y:t.circle.cy};this.setOutgoingEdgesBirthPosition(o)},setBirth:function(){this.setBirthPosition(),this.setOutgoingEdgesBirthPosition(this.getParentScreenCoords())},setOutgoingEdgesOpacity:function(e){this.get("outgoingEdges").forEach((function(t){t.setOpacity(e)}))},animateOutgoingEdgesToAttr:function(e,t,o){this.get("outgoingEdges").forEach((function(t){var o=e[t.getID()];t.animateToAttr(o)}),this)},animateOutgoingEdges:function(e,t){this.get("outgoingEdges").forEach((function(o){o.animateUpdatedPath(e,t)}),this)},animateOutgoingEdgesFromSnapshot:function(e,t,o){this.get("outgoingEdges").forEach((function(i){var a=e[i.getID()];i.animateToAttr(a,t,o)}),this)},setOutgoingEdgesBirthPosition:function(e){this.get("outgoingEdges").forEach((function(t){var o=t.get("head").getScreenCoords(),i=t.genSmoothBezierPathStringFromCoords(e,o);t.get("path").stop(),t.get("path").attr({path:i,opacity:0})}),this)},parentInFront:function(){this.get("commit").get("parents")[0].get("visNode").toFront()},getFontSize:function(e){return e.length<3?12:e.length<5?10:8},getFill:function(){var e=this.gitVisuals.getCommitUpstreamStatus(this.get("commit"));return"head"==e?i.headRectFill:"tag"==e||"none"==e?i.orphanNodeFill:this.gitVisuals.getBlendedHuesForCommit(this.get("commit"))},attachClickHandlers:function(){if(!this.get("gitVisuals").options.noClick){var t="git checkout "+this.get("commit").get("id"),o=e("../app");[this.get("circle"),this.get("text")].forEach((function(e){e.click((function(){o.getEventBaton().trigger("commandSubmitted",t)})),$(e.node).css("cursor","pointer")}))}},setOpacity:function(e){e=void 0===e?1:e;["circle","text"].forEach((function(t){this.get(t).attr({opacity:e})}),this)},remove:function(){this.removeKeys(["circle"],["text"]);var e=this.get("text");e&&e.remove(),this.gitVisuals.removeVisNode(this)},removeAll:function(){this.remove(),this.removeAllEdges()},removeAllEdges:function(){this.get("outgoingEdges").forEach((function(e){e.remove()}),this)},getExplodeStepFunc:function(e){if(!e)throw new Error("need speed by now");var t=this.get("circle"),o=20/e,i=Math.PI+1*Math.random()*Math.PI,a=.2*e,n=.01*e,r=o*Math.cos(i),s=o*Math.sin(i),c=t.attr("cx"),l=t.attr("cy"),m=this.gitVisuals.paper.width,u=this.gitVisuals.paper.height-t.attrs.r,d=.8/e;return function(){return((c+=1*(r-=n*r))<0||c>m)&&(r=d*-r,c=c<0?0:m),((l+=1*(s+=1*a-n*s))<0||l>u)&&(s=d*-s,l=l<0?0:u),t.attr({cx:c,cy:l}),!(r*r+s*s<.1&&Math.abs(l-u)<=.1)}},makeCircle:function(e){var t=this.getScreenCoords();return e.circle(t.x,t.y,this.getRadius()).attr(this.getAttributes().circle)},makeText:function(e){var t=this.getTextScreenCoords();return e.text(t.x,t.y,String(this.get("id")))},genGraphics:function(){var e=this.gitVisuals.paper,t=this.makeCircle(e),o=this.makeText(e);o.attr({"font-size":this.getFontSize(this.get("id")),"font-weight":"bold","font-family":"Menlo, Monaco, Consolas, 'Droid Sans Mono', monospace",opacity:this.getOpacity()}),this.set("circle",t),this.set("text",o),this.attachClickHandlers()}});o.VisNode=n},{"../app":52,"../util/constants":90,"../visuals/visBase":114,backbone:1}],118:[function(e,t,o){var i=e("backbone"),a=e("../util/constants").GRAPHICS,n=e("../visuals/visBase").VisBase,r=e("../graph/treeCompare"),s=n.extend({defaults:{pos:null,text:null,rect:null,isHead:!1,fill:a.tagFill,stroke:a.tagStroke,"stroke-width":a.tagStrokeWidth,offsetX:a.nodeRadius,offsetY:a.nodeRadius,vPad:4,hPad:4,animationSpeed:a.defaultAnimationTime,animationEasing:a.defaultEasing},validateAtInit:function(){if(!this.get("tag"))throw new Error("need a Tag!")},getID:function(){return this.get("tag").get("id")},initialize:function(){if(this.validateAtInit(),this.gitVisuals=this.get("gitVisuals"),this.gitEngine=this.get("gitEngine"),!this.gitEngine)throw new Error("asd wtf");this.get("tag").set("visTag",this)},getCommitPosition:function(){return this.gitEngine.getCommitFromRef(this.get("tag")).get("visNode").getScreenCoords()},getDashArray:function(){return this.get("gitVisuals").getIsGoalVis()?this.getIsLevelTagCompared()?"":"--":""},getIsGoalAndNotCompared:function(){return!!this.get("gitVisuals").getIsGoalVis()&&!this.getIsLevelTagCompared()},getIsLevelTagCompared:function(){var e=this.get("gitVisuals").getLevelBlob();return!r.onlyMainCompared(e)},getTagStackIndex:function(){if(this.get("isHead"))return 0;var e=this.getTagStackArray(),t=-1;return e.forEach((function(e,o){e.obj==this.get("tag")&&(t=o)}),this),t},getTagStackLength:function(){return this.get("isHead")?1:this.getTagStackArray().length},isTagStackEmpty:function(){var e=this.gitVisuals.tagStackMap[this.getCommitID()];return!e||0===e.length},getCommitID:function(){return this.get("tag").get("target").get("id")},getTagStackArray:function(){var e=this.gitVisuals.tagStackMap[this.getCommitID()];return void 0===e?(this.gitVisuals.calcTagStacks(),this.getTagStackArray()):e},getTextPosition:function(){var e=this.getCommitPosition(),t=this.getTagStackIndex();return{x:e.x+this.get("offsetX"),y:e.y+t*a.multiTagY+this.get("offsetY")}},getRectPosition:function(){var e=this.getTextPosition(),t=this.getTextSize();return{x:e.x-this.get("hPad"),y:e.y-.5*t.h-this.get("vPad")}},getTextSize:function(){var e,t=this.get("text").node,o=0;return this.getTagStackArray().forEach((function(e){o=Math.max(o,function(e){var t=e.get("text")?e.get("text").node:null;return null===t?0:t.getBoundingClientRect().width}(e.obj.get("visTag")))})),(e={w:o,h:t.getBoundingClientRect().height}).w||(e.w=75),e.h||(e.h=20),e},getSingleRectSize:function(){var e=this.getTextSize(),t=this.get("vPad"),o=this.get("hPad");return{w:e.w+2*t,h:e.h+2*o}},getRectSize:function(){var e=this.getTextSize(),t=this.get("vPad"),o=this.get("hPad"),i=this.getTagStackLength();return{w:e.w+2*t,h:e.h*i+2*o}},getIsRemote:function(){return this.get("tag").getIsRemote()},getName:function(){var e=this.get("tag").getName();this.getIsRemote(),this.gitEngine.getIsHg();return e},nonTextToFront:function(){this.get("rect").toFront()},textToFront:function(){this.get("text").toFront()},textToFrontIfInStack:function(){0!==this.getTagStackIndex()&&this.get("text").toFront()},remove:function(){this.removeKeys(["text","rect"]),this.gitVisuals.removeVisTag(this)},handleModeChange:function(){},genGraphics:function(e){var t=this.getTextPosition(),o=this.getName(),i=e.text(t.x,t.y,String(o));i.attr({"font-size":14,"font-family":"Menlo, Monaco, Consolas, 'Droid Sans Mono', monospace",opacity:this.getTextOpacity(),"text-anchor":"start"}),this.set("text",i);var a=this.getAttributes(),n=this.getRectPosition(),r=this.getRectSize(),s=e.rect(n.x,n.y,r.w,r.h,8).attr(a.rect);this.set("rect",s);["text","rect"].forEach((function(e){$(this.get(e).node).css(a.css)}),this),this.attachClickHandlers(),s.toFront(),i.toFront()},attachClickHandlers:function(){this.get("gitVisuals").options.noClick||[this.get("rect"),this.get("text")].forEach((function(e){e.click(this.onClick.bind(this))}),this)},shouldDisableClick:function(){return this.get("isHead")&&!this.gitEngine.getDetachedHead()},onClick:function(){if(!this.shouldDisableClick()){var t="git checkout "+this.get("tag").get("id");e("../app").getEventBaton().trigger("commandSubmitted",t)}},updateName:function(){this.get("text").attr({text:this.getName()})},getNonTextOpacity:function(){return this.get("isHead")?this.gitEngine.getDetachedHead()?1:0:0!==this.getTagStackIndex()?0:1},getTextOpacity:function(){return this.get("isHead")?this.gitEngine.getDetachedHead()?1:0:this.getIsGoalAndNotCompared()?0===this.getTagStackIndex()?.7:.3:1},getStrokeWidth:function(){return this.getIsGoalAndNotCompared()?this.get("stroke-width")/5:this.get("stroke-width")},getAttributes:function(){var e=this.getTextOpacity();this.updateName();var t=this.getTextPosition(),o=this.getRectPosition(),i=this.getRectSize(),a=this.getDashArray();return{css:{cursor:this.shouldDisableClick()?"auto":"pointer"},text:{x:t.x,y:t.y,opacity:e},rect:{x:o.x,y:o.y,width:i.w,height:i.h,opacity:this.getNonTextOpacity(),fill:this.get("fill"),stroke:this.get("stroke"),"stroke-dasharray":a,"stroke-width":this.getStrokeWidth()}}},animateUpdatedPos:function(e,t){var o=this.getAttributes();this.animateToAttr(o,e,t)},animateFromAttrToAttr:function(e,t,o,i){this.animateToAttr(e,0),this.animateToAttr(t,o,i)},setAttr:function(e,t,o,i){this.setAttrBase(["text","rect"],e,t,o,i)}}),c=i.Collection.extend({model:s});o.VisTagCollection=c,o.VisTag=s,o.randomHueString=function(){var e=Math.random();return"hsb("+String(e)+",0.7,1)"}},{"../app":52,"../graph/treeCompare":65,"../util/constants":90,"../visuals/visBase":114,backbone:1}],119:[function(e,t,o){(function(t){(function(){var i=e("backbone"),a=e("../models/collections"),n=a.CommitCollection,r=a.BranchCollection,s=a.TagCollection,c=e("../util/eventBaton").EventBaton,l=e("../visuals").GitVisuals,m=i.View.extend({initialize:function(e){e=e||{},this.options=e,this.customEvents=Object.assign({},i.Events),this.containerElement=e.containerElement;var o=this,a=e.containerElement||$("#canvasHolder")[0];new Raphael(a,200,200,(function(){var i=this;t.nextTick((function(){o.paperInitialize(i,e)}))}))},paperInitialize:function(o,i){this.treeString=i.treeString,this.paper=o;var a=e("../app");this.eventBaton=i.noKeyboardInput?new c({noInput:!0}):a.getEventBaton(),this.commitCollection=new n,this.branchCollection=new r,this.tagCollection=new s,this.gitVisuals=new l({commitCollection:this.commitCollection,branchCollection:this.branchCollection,tagCollection:this.tagCollection,paper:this.paper,noClick:this.options.noClick,isGoalVis:this.options.isGoalVis,smallCanvas:this.options.smallCanvas,visualization:this});var m=e("../git").GitEngine;this.gitEngine=new m({collection:this.commitCollection,branches:this.branchCollection,tags:this.tagCollection,gitVisuals:this.gitVisuals,eventBaton:this.eventBaton}),this.gitEngine.init(),this.gitVisuals.assignGitEngine(this.gitEngine),this.myResize(),$(window).on("resize",(()=>this.myResize())),this.$el.parents(".ui-draggable").on("drag",function(e,t){this.customEvents.trigger("drag",e,t),this.myResize()}.bind(this)),this.gitVisuals.drawTreeFirstTime(),this.treeString&&this.gitEngine.loadTreeFromString(this.treeString),this.options.zIndex&&this.setTreeIndex(this.options.zIndex),this.shown=!1,this.setTreeOpacity(0),t.nextTick(this.fadeTreeIn.bind(this)),this.customEvents.trigger("gitEngineReady"),this.customEvents.trigger("paperReady")},clearOrigin:function(){delete this.originVis},makeOrigin:function(e){return this.originVis=new m(Object.assign({},this.options,{noKeyboardInput:!0,noClick:!0,treeString:e.treeString})),this.originVis.customEvents.on("paperReady",function(){var e=$(this.paper.canvas).css("z-index");this.originVis.setTreeIndex(e)}.bind(this)),this.originVis},originToo:function(e,t){if(this.originVis){var o=function(){this.originVis[e].apply(this.originVis,t)}.bind(this);this.originVis.paper?o():this.originVis.customEvents.on("paperReady",o)}},setTreeIndex:function(e){$(this.paper.canvas).css("z-index",e),this.originToo("setTreeIndex",arguments)},setTreeOpacity:function(e){0===e&&(this.shown=!1),$(this.paper.canvas).css("opacity",e),this.originToo("setTreeOpacity",arguments)},getAnimationTime:function(){return 300},fadeTreeIn:function(){this.shown=!0,this.paper&&($(this.paper.canvas).animate({opacity:1},this.getAnimationTime()),this.originToo("fadeTreeIn",arguments))},fadeTreeOut:function(){this.shown=!1,this.paper&&this.paper.canvas&&$(this.paper.canvas).animate({opacity:0},this.getAnimationTime()),this.originToo("fadeTreeOut",arguments)},hide:function(){this.fadeTreeOut(),setTimeout(function(){$(this.paper.canvas).css("visibility","hidden")}.bind(this),this.getAnimationTime()),this.originToo("hide",arguments)},show:function(){$(this.paper.canvas).css("visibility","visible"),setTimeout(this.fadeTreeIn.bind(this),10),this.originToo("show",arguments),this.myResize()},showHarsh:function(){$(this.paper.canvas).css("visibility","visible"),this.setTreeOpacity(1),this.originToo("showHarsh",arguments),this.myResize()},resetFromThisTreeNow:function(e){this.treeString=e;var t=this.getOriginInTreeString(e);if(t){var o=this.gitEngine.printTree(t);this.originToo("resetFromThisTreeNow",[o])}},getOriginInTreeString:function(e){return JSON.parse(unescape(e)).originTree},reset:function(e){var t=e||this.treeString;if(this.setTreeOpacity(0),t?this.gitEngine.loadTreeFromString(t):this.gitEngine.defaultInit(),this.fadeTreeIn(),this.originVis)if(t){var o=this.getOriginInTreeString(t);this.originToo("reset",[JSON.stringify(o)])}else this.originToo("reset",arguments)},tearDown:function(e){e=e||{},this.gitEngine.tearDown(),this.gitVisuals.tearDown(),delete this.paper,this.originToo("tearDown",arguments)},die:function(){this.fadeTreeOut(),setTimeout(function(){this.shown||this.tearDown({fromDie:!0})}.bind(this),this.getAnimationTime()),this.originToo("die",arguments)},myResize:function(){if(this.paper){var e=this.el,t=e.getBoundingClientRect(),o=t.width,i=t.height;if(this.containerElement)$(this.paper.canvas).css({position:"absolute"});else{var a=this.$el.offset().left,n=this.$el.offset().top;$(this.paper.canvas).css({position:"absolute",left:a+"px",top:n+"px"})}this.paper.setSize(o,i),this.gitVisuals.canvasResize(o,i),this.originToo("myResize",arguments)}}});o.Visualization=m}).call(this)}).call(this,e("_process"))},{"../app":52,"../git":63,"../models/collections":75,"../util/eventBaton":95,"../visuals":112,_process:22,backbone:1}],120:[function(e,t,o){o.level={goalTreeString:'{"branches":{"main":{"target":"C7","id":"main"},"bugWork":{"target":"C2","id":"bugWork"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C1"],"id":"C3"},"C4":{"parents":["C3"],"id":"C4"},"C5":{"parents":["C2"],"id":"C5"},"C6":{"parents":["C4","C5"],"id":"C6"},"C7":{"parents":["C6"],"id":"C7"}},"HEAD":{"target":"main","id":"HEAD"}}',solutionCommand:"git branch bugWork main^^2^",startTree:'{"branches":{"main":{"target":"C7","id":"main"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C1"],"id":"C3"},"C4":{"parents":["C3"],"id":"C4"},"C5":{"parents":["C2"],"id":"C5"},"C6":{"parents":["C4","C5"],"id":"C6"},"C7":{"parents":["C6"],"id":"C7"}},"HEAD":{"target":"main","id":"HEAD"}}',name:{en_US:"Multiple parents",zh_CN:"两个 parent 节点",fr_FR:"Parents multiples",de_DE:"Mehrere Vorgänger",ja:"複数の親",es_AR:"Múltiples padres",es_MX:"Múltiples padres",es_ES:"Múltiples padres",pt_BR:"Múltiplos pais",gl:"Múltiples pais",zh_TW:"多個 parent commit",ru_RU:"Здоровая семья, или несколько родителей",ko:"다수의 부모",uk:"Декілька батьків",vi:"Nhiều cha lắm mẹ",sl_SI:"Več Staršev",ta_IN:"ஒன்றுக்கு மேற்ப்பட்ட துவக்க கிலைகள்",it_IT:"Genitori multipli",pl:"Wielu rodziców"},hint:{en_US:"Use `git branch bugWork` with a target commit to create the missing reference.",de_DE:"Nutze `git branch bugWork` mit einem Ziel-Commit um die fehlende Referenz zu erstellen.",ja:"`git branch bugWork`を対象のコミットと組み合わせて使い、欠如しているリファレンスを作成しましょう",fr_FR:'Utilisez "git branch bugWork" avec un commit pour créer une référence manquante',zh_CN:"使用 `git branch bugWork` 加上一个目标提交记录来创建消失的引用。",es_AR:"Usá `git branch bugWork` sobre algún commit para crear la referencia faltante",es_MX:"Use `git branch bugWork` sobre algún commit para crear la referencia faltante",es_ES:"Usa `git branch bugWork` sobre algún commit para crear la referencia que falta",pt_BR:"Use `git branch bugWork` com um commit alvo para criar a referência que falta",gl:"Usa `git branch bugWork` sobre calquera commit para crear a referencia que falta",zh_TW:"在一個指定的 commit 上面使用 `git branch bugWork`。",ru_RU:"`git branch bugWork` на нужном коммите поможет создать нужную ссылку.",ko:"`git branch bugWork`를 대상 커밋과 함께 사용해서 부족한 참조를 만드세요",uk:'Використай "git branch bugWork" на потрібному коміті щоб створити потрібне посилання',vi:"Dùng lệnh `git branch bugWork` để tạo nhánh tại vị trí chỉ định",sl_SI:"Uporabi `git branch bugWork` s ciljnim commitom za ustvarjanje manjkajoče reference.",ta_IN:"`git branch bugWork` பயன்படுத்தி தேவைப்படும் கமிட்டுடன் இழந்த இணைப்பை உருவாக்குக.",it_IT:"Scrivi `git branch bugWork` con un commit per creare il riferimento mancante.",pl:"Użyj `git branch bugWork` na docelowym commicie, aby utworzyć brakującą referencję."},startDialog:{en_US:{childViews:[{type:"ModalAlert",options:{markdowns:["### Specifying Parents","","Like the `~` modifier, the `^` modifier also accepts an optional number after it.","","Rather than specifying the number of generations to go back (what `~` takes), the modifier on `^` specifies which parent reference to follow from a merge commit. Remember that merge commits have multiple parents, so the path to choose is ambiguous.","",'Git will normally follow the "first" parent upwards from a merge commit, but specifying a number with `^` changes this default behavior.',"","Enough talking, let's see it in action.",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Here we have a merge commit. If we checkout `main^` without the modifier, we will follow the first parent after the merge commit. ","","(*In our visuals, the first parent is positioned directly above the merge commit.*)"],afterMarkdowns:["Easy -- this is what we are all used to."],command:"git checkout main^",beforeCommand:"git checkout HEAD^; git commit; git checkout main; git merge C2"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Now let's try specifying the second parent instead..."],afterMarkdowns:["See? We followed the other parent upwards."],command:"git checkout main^2",beforeCommand:"git checkout HEAD^; git commit; git checkout main; git merge C2"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["The `^` and `~` modifiers can make moving around a commit tree very powerful:"],afterMarkdowns:["Lightning fast!"],command:"git checkout HEAD~; git checkout HEAD^2; git checkout HEAD~2",beforeCommand:"git commit; git checkout C0; git commit; git commit; git commit; git checkout main; git merge C5; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Even crazier, these modifiers can be chained together! Check this out:"],afterMarkdowns:["The same movement as before, but all in one command."],command:"git checkout HEAD~^2~2",beforeCommand:"git commit; git checkout C0; git commit; git commit; git commit; git checkout main; git merge C5; git commit"}},{type:"ModalAlert",options:{markdowns:["### Put it to practice","","To complete this level, create a new branch at the specified destination.","","Obviously it would be easy to specify the commit directly (with something like `C6`), but I challenge you to use the modifiers we talked about instead!"]}}]},de_DE:{childViews:[{type:"ModalAlert",options:{markdowns:["### Vorgänger ansteuern","","Wie der Operator `~` akzeptiert auch der Operator `^` eine optionale Anzahl.","","Anstatt der Anzahl von Schritten, die zurückgegangen werden soll (das ist das, was man bei `~` angibt), bezeichnet die Anzahl nach `^` welchem Vorgänger bei einem Merge-Commit gefolgt werden soll. Du erinnerst dich, dass ein Merge-Commit mehrere Vorgänger hat; es gilt also aus diesen auszuwählen.","",'Normalerweise folgt Git dem "ersten" Vorgänger des Merge-Commit, aber durch Angabe einer Zahl nach dem `^` lässt sich dieses Verhalten ändern.',"","Aber genug gequatscht, schauen wir es uns in Aktion an.",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Hier sehen wir einen Merge-Commit. Wenn wir einen Checkout von `main^` ohne Zahl machen, wird Git auf den ersten Vorgänger des Commits zurückgehen. ","","*(In unserer Darstellung befindet sich der erste Vorgänger direkt über dem Merge-Commit.)*"],afterMarkdowns:["Simpel -- so kennen wir das."],command:"git checkout main^",beforeCommand:"git checkout HEAD^; git commit; git checkout main; git merge C2"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Jetzt versuchen wir mal stattdessen den zweiten Vorgänger anzugeben ..."],afterMarkdowns:["Gesehen? Wir gehen zu dem anderen Vorgänger zurück."],command:"git checkout main^2",beforeCommand:"git checkout HEAD^; git commit; git checkout main; git merge C2"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Die Operatoren `^` und `~` geben uns eine Menge Möglichkeiten für das Navigieren durch den Commit-Baum:"],afterMarkdowns:["Bämm!"],command:"git checkout HEAD~; git checkout HEAD^2; git checkout HEAD~2",beforeCommand:"git commit; git checkout C0; git commit; git commit; git commit; git checkout main; git merge C5; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Noch abgefahrener: Die beiden Operatoren können verkettet werden. Aufgepasst:"],afterMarkdowns:["Gleicher Ablauf wie zuvor, nur alles in einem Befehl."],command:"git checkout HEAD~^2~2",beforeCommand:"git commit; git checkout C0; git commit; git commit; git commit; git checkout main; git merge C5; git commit"}},{type:"ModalAlert",options:{markdowns:["### Setzen wir's um","","Erstelle einen neuen Branch an dem angegebenen Ziel, um diesen Level abzuschließen.","","Es ist natürlich möglich den Commit einfach direkt anzugeben (also mit sowas wie `C6`), aber ich fordere dich heraus stattdessen die relativen Operatoren zu benutzen!"]}}]},fr_FR:{childViews:[{type:"ModalAlert",options:{markdowns:["### Détermine les parents","","Comme le symbole `~`, le symbole `^` accepte un numéro après lui.","","Au lieu d'entrer le nombre de générations à remonter (ce que `~` fait), le symbole `^` détermine quel parent est à remonter. Attention, un merge commit a deux parents ce qui peut porter à confusion.","",'Normalement Git suit le "premier" parent pour un commit/merge, mais avec un numéro après `^` le comportement par défaut est modifié.',"","Assez de bla bla, passons à l'action",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Nous avons un commit/merge. Si nous faisons checkout `main^` sans le symbole, on obtient le premier parent suivant ce commit. ","","(*Dans notre vue, le premier parent se situe juste au dessus du merge.*)"],afterMarkdowns:["Facile -- c'est ce que nous faisons tout le temps."],command:"git checkout main^",beforeCommand:"git checkout HEAD^; git commit; git checkout main; git merge C2"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Nous allons spécifier le deuxième parent à la place."],afterMarkdowns:["Vous voyez ? Nous suivons le second parent."],command:"git checkout main^2",beforeCommand:"git checkout HEAD^; git commit; git checkout main; git merge C2"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Les symboles `^` et `~` permettent de se déplacer de façon très efficace :"],afterMarkdowns:["Boum, vitesse du tonnerre !"],command:"git checkout HEAD~; git checkout HEAD^2; git checkout HEAD~2",beforeCommand:"git commit; git checkout C0; git commit; git commit; git commit; git checkout main; git merge C5; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Encore plus fou, ces symboles peuvent être enchainés ! Regardez cela :"],afterMarkdowns:["Le même résultat, mais en une seule commande."],command:"git checkout HEAD~^2~2",beforeCommand:"git commit; git checkout C0; git commit; git commit; git commit; git checkout main; git merge C5; git commit"}},{type:"ModalAlert",options:{markdowns:["### Un peu de pratique","","Pour réussir le niveau, créez une nouvelle branche à la destination indiquée.","","Évidement ce serait plus rapide de spécifier le commit (C6 par exemple), mais faites-le plutôt avec les symboles de déplacement dont nous venons de parler !"]}}]},zh_CN:{childViews:[{type:"ModalAlert",options:{markdowns:["### 选择 parent 提交记录","","操作符 `^` 与 `~` 符一样,后面也可以跟一个数字。","","但是该操作符后面的数字与 `~` 后面的不同,并不是用来指定向上返回几代,而是指定合并提交记录的某个 parent 提交。还记得前面提到过的一个合并提交有两个 parent 提交吧,所以遇到这样的节点时该选择哪条路径就不是很清晰了。","","Git 默认选择合并提交的“第一个” parent 提交,在操作符 `^` 后跟一个数字可以改变这一默认行为。","","废话不多说,举个例子。",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["这里有一个合并提交记录。如果不加数字修改符直接切换到 `main^`,会回到第一个 parent 提交记录。","","(*在我们的图示中,第一个 parent 提交记录是指合并提交记录正上方的那个提交记录。*)"],afterMarkdowns:["这正是我们都已经习惯的方法。"],command:"git checkout main^",beforeCommand:"git checkout HEAD^; git commit; git checkout main; git merge C2"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["现在来试试选择另一个 parent 提交……"],afterMarkdowns:["看见了吧?我们回到了另外一个 parent 提交上。"],command:"git checkout main^2",beforeCommand:"git checkout HEAD^; git commit; git checkout main; git merge C2"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["使用 `^` 和 `~` 可以自由地在提交树中移动,非常给力:"],afterMarkdowns:["快若闪电!"],command:"git checkout HEAD~; git checkout HEAD^2; git checkout HEAD~2",beforeCommand:"git commit; git checkout C0; git commit; git commit; git commit; git checkout main; git merge C5; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["更厉害的是,这些操作符还支持链式操作!试一下这个:"],afterMarkdowns:["和前面的结果一样,但只用了一条命令。"],command:"git checkout HEAD~^2~2",beforeCommand:"git commit; git checkout C0; git commit; git commit; git commit; git checkout main; git merge C5; git commit"}},{type:"ModalAlert",options:{markdowns:["### 课后小练习","","要完成此关,在指定的目标位置创建一个新的分支。","","很明显可以简单地直接使用提交记录的哈希值(比如 `C6`),但我要求你使用刚刚讲到的相对引用修饰符!"]}}]},es_AR:{childViews:[{type:"ModalAlert",options:{markdowns:["### Especificando los padres","","Como el modificador de `~`, `^` también acepta un número opcional después de él.","","En lugar de especificar cuántas generaciones hacia atrás ir (como `~`), el modificador de `^` especifica por cuál de las referencias padres seguir en un commit de merge. Recordá que un commit de merge tiene múltiples padres, por lo que el camino a seguir es ambiguo.","",'Git normalmente sigue el "primer" padre de un commit de merge, pero especificando un número junto con `^` cambia este comportamiento predefinido.',"","Demasiada charla, veámoslo en acción.",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Acá tenemos un commit de merge. Si hacemos checkout de `main^`, sin modificadores, vamos a seguir al primer padre después del commit de merge. ","","(*En nuestras visualizaciones, el primer padre se ubica directamente arriba del commit de merge.*)"],afterMarkdowns:["Fácil -- esto es algo habitual."],command:"git checkout main^",beforeCommand:"git checkout HEAD^; git commit; git checkout main; git merge C2"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Ahora tratemos de especificar el segundo padre, en cambio..."],afterMarkdowns:["¿Ves? Seguimos al otro padre hacia arriba."],command:"git checkout main^2",beforeCommand:"git checkout HEAD^; git commit; git checkout main; git merge C2"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Los modificadores de `^` y `~` son muy poderosos a la hora de movernos en un árbol:"],afterMarkdowns:["¡Rapidísimo!"],command:"git checkout HEAD~; git checkout HEAD^2; git checkout HEAD~2",beforeCommand:"git commit; git checkout C0; git commit; git commit; git commit; git checkout main; git merge C5; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Más loco aún, ¡estos modificadores pueden encadenarse entre sí! Mirá esto:"],afterMarkdowns:["El mismo movimiento que antes, pero todo en uno."],command:"git checkout HEAD~^2~2",beforeCommand:"git commit; git checkout C0; git commit; git commit; git commit; git checkout main; git merge C5; git commit"}},{type:"ModalAlert",options:{markdowns:["### Ponelo en práctica","","Para completar este nivel, creá una nueva rama en la ubicación indicada.","","Obviamente sería muy fácil especificar el commit directamente (algo como `C6`), pero te reto a usar los modificadores de los que estuvimos hablando, mejor."]}}]},es_MX:{childViews:[{type:"ModalAlert",options:{markdowns:["### Especificando los padres","","Como el modificador de `~`, `^` también acepta un número opcional después de él.","","En lugar de especificar cuántas generaciones hacia atrás ir (como `~`), el modificador de `^` especifica por cuál de las referencias padres seguir en un commit de merge. Recuerda que un commit de merge tiene múltiples padres, por lo que el camino a seguir es ambiguo.","",'Git normalmente sigue el "primer" padre de un commit de merge, pero especificando un número junto con `^` cambia este comportamiento predefinido.',"","Demasiada charla, veámoslo en acción.",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Acá tenemos un commit de merge. Si hacemos checkout de `main^`, sin modificadores, vamos a seguir al primer padre después del commit de merge. ","","(*En nuestras visualizaciones, el primer padre se ubica directamente arriba del commit de merge.*)"],afterMarkdowns:["Fácil -- esto es a lo que estamos acostumbrados."],command:"git checkout main^",beforeCommand:"git checkout HEAD^; git commit; git checkout main; git merge C2"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Ahora tratemos de especificar el segundo padre, en cambio..."],afterMarkdowns:["¿Ves? Seguimos al otro padre hacia arriba."],command:"git checkout main^2",beforeCommand:"git checkout HEAD^; git commit; git checkout main; git merge C2"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Los modificadores de `^` y `~` son muy poderosos a la hora de movernos en un árbol:"],afterMarkdowns:["¡Rapidísimo!"],command:"git checkout HEAD~; git checkout HEAD^2; git checkout HEAD~2",beforeCommand:"git commit; git checkout C0; git commit; git commit; git commit; git checkout main; git merge C5; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Más loco aún, ¡Éstos modificadores pueden encadenarse entre sí! Mira esto:"],afterMarkdowns:["El mismo movimiento que antes, pero todo en uno."],command:"git checkout HEAD~^2~2",beforeCommand:"git commit; git checkout C0; git commit; git commit; git commit; git checkout main; git merge C5; git commit"}},{type:"ModalAlert",options:{markdowns:["### Pongámoslo en práctica","","Para completar este nivel, crea una nueva rama en la ubicación indicada.","","Obviamente sería muy fácil especificar el commit directamente (algo como `C6`), pero te reto a usar los modificadores de los que estuvimos hablando, mejor."]}}]},es_ES:{childViews:[{type:"ModalAlert",options:{markdowns:["### Especificando los padres","","Como el modificador de `~`, `^` también acepta un número opcional después de él.","","En lugar de especificar cuántas generaciones hacia atrás ir (como `~`), el modificador de `^` especifica por cuál de las referencias padres seguir en un commit de merge. Recuerda que un commit de merge tiene múltiples padres, por lo que el camino a seguir es ambiguo.","",'Git normalmente sigue el "primer" padre de un commit de merge, pero especificando un número junto con `^` cambia este comportamiento predefinido.',"","Demasiada charla, veámoslo en acción.",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Aquí tenemos un commit de merge. Si hacemos checkout de `main^`, sin modificadores, vamos a seguir al primer padre después del commit de merge. ","","(*En nuestras visualizaciones, el primer padre se ubica directamente arriba del commit de merge.*)"],afterMarkdowns:["Fácil -- esto es a lo que estamos acostumbrados."],command:"git checkout main^",beforeCommand:"git checkout HEAD^; git commit; git checkout main; git merge C2"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Ahora tratemos de especificar el segundo padre, en cambio..."],afterMarkdowns:["¿Ves? Seguimos al otro padre hacia arriba."],command:"git checkout main^2",beforeCommand:"git checkout HEAD^; git commit; git checkout main; git merge C2"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Los modificadores de `^` y `~` son muy poderosos a la hora de movernos en un árbol:"],afterMarkdowns:["¡Rapidísimo!"],command:"git checkout HEAD~; git checkout HEAD^2; git checkout HEAD~2",beforeCommand:"git commit; git checkout C0; git commit; git commit; git commit; git checkout main; git merge C5; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Más loco aún, ¡estos modificadores pueden encadenarse entre sí! Mira esto:"],afterMarkdowns:["El mismo movimiento que antes, pero todo en uno."],command:"git checkout HEAD~^2~2",beforeCommand:"git commit; git checkout C0; git commit; git commit; git commit; git checkout main; git merge C5; git commit"}},{type:"ModalAlert",options:{markdowns:["### Ponlo en práctica","","Para completar este nivel, crea una nueva rama en la ubicación indicada.","","Obviamente sería muy fácil especificar el commit directamente (algo como `C6`), pero te reto a usar los modificadores de los que estuvimos hablando, mejor."]}}]},pt_BR:{childViews:[{type:"ModalAlert",options:{markdowns:["### Especificando pais","","Assim como o modificador `~`, o modificador `^` também aceita um número opcional depois dele.","","Em vez de especificar o número de gerações a voltar (que é o que o `~` faz), o modificador no `^` especifica qual referência de pai a ser seguida a partir de um commit de merge. Lembre-se que commits de merge possuem múltiplos pais, então o caminho a seguir é ambíguo.","",'O Git normalmente subirá o "primeiro" pai de um commit de merge, mas especificar um número após o `^` muda esse comportamento padrão.',"","Basta de conversa, vejamos o operador em ação.",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Aqui temos um commit de merge. Se fizermos checkout em `main^` sem especificar um número, vamos seguir o primeiro pai acima do commit de merge. ","","(*Em nossa visualização, o primeiro pai é aquele diretamente acima do commit de merge.*)"],afterMarkdowns:["Fácil -- isso é aquilo com o que já estamos acostumados."],command:"git checkout main^",beforeCommand:"git checkout HEAD^; git commit; git checkout main; git merge C2"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Agora vamos, em vez disso, especificar o segundo pai..."],afterMarkdowns:["Viu? Subimos para o outro pai."],command:"git checkout main^2",beforeCommand:"git checkout HEAD^; git commit; git checkout main; git merge C2"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Os modificadores `^` e `~` podem tornar a movimentação ao redor da árvore de commits muito poderosa:"],afterMarkdowns:["Rápido como a luz!"],command:"git checkout HEAD~; git checkout HEAD^2; git checkout HEAD~2",beforeCommand:"git commit; git checkout C0; git commit; git commit; git commit; git checkout main; git merge C5; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Ainda mais louco, esses modificadores podem ser encadeados em conjunto! Veja só:"],afterMarkdowns:["O mesmo movimento que o anterior, mas tudo em um único comando."],command:"git checkout HEAD~^2~2",beforeCommand:"git commit; git checkout C0; git commit; git commit; git commit; git checkout main; git merge C5; git commit"}},{type:"ModalAlert",options:{markdowns:["### Coloque em prática","","Para completar este nível, crie um novo ramo no destino especificado.","","Obviamente seria mais fácil especificar o commit diretamente (com algo como `C6`), mas em vez disso eu desafio você a usar os modificadores sobre os quais falamos!"]}}]},gl:{childViews:[{type:"ModalAlert",options:{markdowns:["### Especificando pais","","Tanto o modificador `~`, como o modificador `^` aceptan un número opcional despois del.","","Mellor que especificar o número de commits que percorrer cara atrás (que é o que o `~` fai), o modificador sobre `^` especifica qué referencia do pai vai ser seguida dende o commit con merge. Lembra qué os commits do merge teñen varios pais, entón o camiño a seguir é ambiguo.","",'Git normalmente seguirá ó "primeiro" pai de un commit de merge, pero especificando un número co `^` muda o comportamento do pai.',"","Xa chega de faladoiros, vexamos o comando en acción.",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Aquí temos un commit do merge. Se fixéramos checkout en `main^` sen especificar un número, imos seguir ó primeiro pai enriba do commit do merge. ","","(*Na nosa vista, o primeiro pai é aquel directamente enriba do commit do merge.*)"],afterMarkdowns:["Sinxelo, eso é aquelo co que xa estamos acostumados."],command:"git checkout main^",beforeCommand:"git checkout HEAD^; git commit; git checkout main; git merge C2"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Agora imos, en vez de iso, especificar o segundo pai..."],afterMarkdowns:["¿Viches? Subimos para o outro pai."],command:"git checkout main^2",beforeCommand:"git checkout HEAD^; git commit; git checkout main; git merge C2"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Os modificadores `^` e `~` pódense mover ao redor da árbore de commits con moito poder:"],afterMarkdowns:["Rápido coma a luz!"],command:"git checkout HEAD~; git checkout HEAD^2; git checkout HEAD~2",beforeCommand:"git commit; git checkout C0; git commit; git commit; git commit; git checkout main; git merge C5; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Aínda máis tolo, eses modificadores poden ser encadeados en conxunto! Olla ahí:"],afterMarkdowns:["O mesmo movemento feito antes, pero feito nun só comando."],command:"git checkout HEAD~^2~2",beforeCommand:"git commit; git checkout C0; git commit; git commit; git commit; git checkout main; git merge C5; git commit"}},{type:"ModalAlert",options:{markdowns:["### Pono na práctica","","Para completar este nível, crea unha nova rama no destino especificado.","","Obviamente sería máis sinxelo especificar o commit diretamente (algo como `C6`), pero en vez de facer eso, ¡podes usar os modificadores dos que falamos!"]}}]},zh_TW:{childViews:[{type:"ModalAlert",options:{markdowns:["### 選擇 parent commit","","和 `~` 符號一樣,`^` 符號的後面也可以接一個(可選的)數字。","","這不是用來指定往上回去幾代(`~` 的作用),`^` 後面所跟的數字表示我要選擇哪一個 parent commit。還記得一個 merge commit 可以有多個 parent commit 吧,所以當我們要選擇走到哪一個 parent commit 的時候就會比較麻煩了。","",'git 預設會選擇 merge commit 的"第一個" parent commit,使用 `^` 後面接一個數字可以改變這個預設的行為。',"","廢話不多說,舉一個例子。",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["這裡有一個 merge commit。如果後面不加數字的話會直接切換到`main^`,也就是說會回到第一個 parent commit。","","(*在我們的圖示中,第一個 parent commit 是指 merge commit 正上方的那一個 parent commit。*)"],afterMarkdowns:["簡單吧!這就是預設的情況。"],command:"git checkout main^",beforeCommand:"git checkout HEAD^; git commit; git checkout main; git merge C2"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["現在來試試選擇第二個 parent commit..."],afterMarkdowns:["看到了嗎?我們回到了第二個 parent commit。"],command:"git checkout main^2",beforeCommand:"git checkout HEAD^; git commit; git checkout main; git merge C2"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["使用`^`和`~`可以自由在 commit tree 中移動:"],afterMarkdowns:["簡直就像是電光石火!"],command:"git checkout HEAD~; git checkout HEAD^2; git checkout HEAD~2",beforeCommand:"git commit; git checkout C0; git commit; git commit; git commit; git checkout main; git merge C5; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["再瘋狂點,這些符號可以被連在一起!試一下這個:"],afterMarkdowns:["和前面的結果一樣,但只用了一條指令。"],command:"git checkout HEAD~^2~2",beforeCommand:"git commit; git checkout C0; git commit; git commit; git commit; git checkout main; git merge C5; git commit"}},{type:"ModalAlert",options:{markdowns:["### 練習一下","","要完成這一關,在指定的目標位置上面建立一個新的 branch。","","很明顯可以直接使用 commit 的 hash 值(比如 `C6`),但我要求你使用剛剛講到的相對引用的符號!"]}}]},ru_RU:{childViews:[{type:"ModalAlert",options:{markdowns:["### Определение родителей","","Так же как тильда (~), каретка (^) принимает номер после себя.","","Но в отличие от количества коммитов, на которые нужно откатиться назад (как делает `~`), номер после `^` определяет, на какого из родителей мерджа надо перейти. Учитывая, что мерджевый коммит имеет двух родителей, просто указать ^ нельзя.","",'Git по умолчанию перейдёт на "первого" родителя коммита, но указание номера после `^` изменяет это поведение.',"","Посмотрим, как это работает.",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Вот мерджевый коммит. Если мы перейдём на `main^` без номера, то попадём на первого родителя.","","(*На нашей визуализации первый родитель находится прямо над коммитом*)"],afterMarkdowns:["Просто - прямо как мы любим."],command:"git checkout main^",beforeCommand:"git checkout HEAD^; git commit; git checkout main; git merge C2"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Теперь попробуем перейти на второго родителя."],afterMarkdowns:["Вот. Мы на втором родительском коммите."],command:"git checkout main^2",beforeCommand:"git checkout HEAD^; git commit; git checkout main; git merge C2"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Модификаторы `^` и `~` сильно помогают перемещаться по дереву коммитов:"],afterMarkdowns:["Быстро как Флэш!"],command:"git checkout HEAD~; git checkout HEAD^2; git checkout HEAD~2",beforeCommand:"git commit; git checkout C0; git commit; git commit; git commit; git checkout main; git merge C5; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Более того, эти модификаторы можно применять вместе. Например, так:"],afterMarkdowns:["Сделаем то же самое, что перед этим, только в одну команду."],command:"git checkout HEAD~^2~2",beforeCommand:"git commit; git checkout C0; git commit; git commit; git commit; git checkout main; git merge C5; git commit"}},{type:"ModalAlert",options:{markdowns:["### На практике","","Чтобы пройти этот уровень, создай ветку в указанном месте.","","Очевидно, что (в данном случае) будет проще указать коммит напрямую, но для того, чтобы закрепить пройденное, используй модификаторы, о которых мы говорили выше."]}}]},ja:{childViews:[{type:"ModalAlert",options:{markdowns:["### 親の指定","","`~`修飾子と同じように、`^`修飾子も後に任意の番号を置くことができます。","","指定した数だけ遡る(これは`~`の場合の機能)のではなく、`^`はマージコミットからどの親を選択するかを指定できます。マージコミットは複数の親で構成されるので、選択する経路が曖昧であることを覚えておいてください。","","Gitは通常、マージコミットから「一つ目」の親、マージされた側のブランチの親を選びます。しかし、`^`で数を指定することでこのデフォルトの動作を変えることができます。","","では、実際の動作を見ていきましょう。",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["ここに、マージコミットがあります。もし、指定無しに`main^`でチェックアウトした場合、私たちは一番目の親に移動することになります。","","(*私たちのツリーでは、一番目の親はマージコミットのちょうど上に位置しています。*)"],afterMarkdowns:["簡単ですね -- これがデフォルトの動作になります。"],command:"git checkout main^",beforeCommand:"git checkout HEAD^; git commit; git checkout main; git merge C2"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["それでは代わりに二つ目の親を指定してみます"],afterMarkdowns:["見ましたか?私たちは他の親に移ることができました。"],command:"git checkout main^2",beforeCommand:"git checkout HEAD^; git commit; git checkout main; git merge C2"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["`^`修飾子と`~`修飾子は、コミット履歴を辿るのを強力に補助してくれます:"],afterMarkdowns:["超高速ですね!"],command:"git checkout HEAD~; git checkout HEAD^2; git checkout HEAD~2",beforeCommand:"git commit; git checkout C0; git commit; git commit; git commit; git checkout main; git merge C5; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["より素晴らしいことに、これらの修飾子は連鎖させることができます!これを見てください:"],afterMarkdowns:["前と同じ移動ですが、なんと一つのコマンドでできています。"],command:"git checkout HEAD~^2~2",beforeCommand:"git commit; git checkout C0; git commit; git commit; git commit; git checkout main; git merge C5; git commit"}},{type:"ModalAlert",options:{markdowns:["### 練習課題","","このレベルをクリアするためには、まず新しいブランチを指定したように作成します。","","明らかに直接コミットを指定した方が(`C6`というように)簡単ですが、私は今まで述べたような修飾子を使う方法で挑戦してもらいたいと思います。"]}}]},ko:{childViews:[{type:"ModalAlert",options:{markdowns:["### 부모를 선택하기","","`~` 수식처럼 `^` 수식 또한 뒤에 숫자를 추가 할 수 있습니다.","","몇개의 세대를 돌아갈지 정하는 것 대신(`~`의 기능) `^`수식은 병합이된 커밋에서 어떤 부모를 참조할지 선택할 수 있습니다. 병합된 커밋들은 다수의 부모를 가지고 있다는것을 기억하시나요? 어떤 부모를 선택할지 예측할 수가 없습니다.","",'Git은 보통 병합된 커밋에서 "첫" 부모를 따라갑니다. 하지만 `^`수식을 숫자와 함께 사용하면 앞의 디폴트 동작대로가 아닌 다른 결과가 나타납니다.',"","이만 줄이고, 직접 확인해봅시다.",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["여기 병합된 커밋이 있습니다. 우리가 `main`를 수식없이 체크아웃한다면 병합된 커밋의 첫 부모를 따라 올라갈 것입니다. ","","(*화면에서는 첫 부모는 병합된 커밋 바로 위에 위치해 있습니다.*)"],afterMarkdowns:["간단하죠 -- 우리한테 익숙한 모습입니다."],command:"git checkout main^",beforeCommand:"git checkout HEAD^; git commit; git checkout main; git merge C2"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["자 이제 두번째 부모를 선택해봅시다..."],afterMarkdowns:["보이나요? 다른 부모를 선택해 올라갔습니다."],command:"git checkout main^2",beforeCommand:"git checkout HEAD^; git commit; git checkout main; git merge C2"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["`^`수식과 `~`수식을 이용해 커밋트리에서 효과적으로 움직일 수 있습니다.:"],afterMarkdowns:["빛처럼 빠르게 말이죠!"],command:"git checkout HEAD~; git checkout HEAD^2; git checkout HEAD~2",beforeCommand:"git commit; git checkout C0; git commit; git commit; git commit; git checkout main; git merge C5; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["더 대단한것은 이 수식들은 같이 사용할 수 있다는 겁니다! 확인해봅시다:"],afterMarkdowns:["앞과 같은 움직임이지만 하나의 명령으로 표현되었습니다."],command:"git checkout HEAD~^2~2",beforeCommand:"git commit; git checkout C0; git commit; git commit; git commit; git checkout main; git merge C5; git commit"}},{type:"ModalAlert",options:{markdowns:["### 직접 확인해봅시다","","이 레벨을 완료하기 위해서 정해진 목적지에 새 브랜치를 생성하세요.","","물론 커밋을 직접 특정지어주면 아주 쉽겠지만(`C6`과 같이), 수식을 익혀볼겸 배운것을 사용해 도전해 봅시다!"]}}]},uk:{childViews:[{type:"ModalAlert",options:{markdowns:["### Вибираємо Попередників","","Так само як і модифікатор `~`, модифікатор `^` також приймає необов’язкове число після нього.","","Замість того, щоб вказувати кількість генерацій щоб переміститись назад (те що робить `~`), число після `^` вказує на яке батьківське посилання мерджу потрібно перейти. Зауважте що так як мерджевий коміт має декілька батьків, використання '^' без числа є неоднозначним.","",'Git зазвичай перейде на "першого" з батьків вверх з мерджевого коміту, але вказання числа після `^` змінює цю поведінку. ',"","Годі ляси точити, перевірмо як це працює в дії.",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Ось ми маємо мерджевий коміт. Якщо зробимо checkout `main^` без числа, ми потрапимо на першого з предків ","","(*В нашій візуалізації перший предок знаходиться прямо над мерджевим комітом*)"],afterMarkdowns:["Легко -- те до чого ми всі звикли."],command:"git checkout main^",beforeCommand:"git checkout HEAD^; git commit; git checkout main; git merge C2"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Тепер спробуймо натомість вказати другого батька..."],afterMarkdowns:["Бачиш? Ми перейшли до другого батька вверх."],command:"git checkout main^2",beforeCommand:"git checkout HEAD^; git commit; git checkout main; git merge C2"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Модифікатори `^` та `~` дозволяють легко пересуватися деревом комітів:"],afterMarkdowns:["Супер швидко!"],command:"git checkout HEAD~; git checkout HEAD^2; git checkout HEAD~2",beforeCommand:"git commit; git checkout C0; git commit; git commit; git commit; git checkout main; git merge C5; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Більше того, ці модифікатори можна використовувати разом! Заціни:"],afterMarkdowns:["Те саме, що й перед цим, але однією командою."],command:"git checkout HEAD~^2~2",beforeCommand:"git commit; git checkout C0; git commit; git commit; git commit; git checkout main; git merge C5; git commit"}},{type:"ModalAlert",options:{markdowns:["### Практика","","Щоб завершити цей рівень, створи нову гілку на вказаному місці.","","Очевидно, що в данному випадку досить легко вказати коміт напряму (щось на зразок checkout `C6`), але для закріплення матеріалу використай модифікатори, про які ми щойно говорили!"]}}]},vi:{childViews:[{type:"ModalAlert",options:{markdowns:["### Tìm về cội nguồn","","Cũng giống ký hiệu `~`, ta cũng có thể thêm số theo sau ký hiệu `^`.","","Nhưng mà không giống như (`~`) con số theo sau là số lượng thế hệ commit, con số theo sau `^` chỉ định commit cha từ commit merge. Hãy nhớ rằng commit merge có nhiều cha, cho nên chọn cha nào cũng khá là mơ hồ.","",'Thông thường thì sẽ chọn cha "đầu tiên" từ commit merge, nhưng nếu sau dấu `^` có một con số thì cách hành xử sẽ khác đi.',"","Không nói dông dài nữa, làm thử một ví dụ nào.",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Ở đây ta có 1 commit merge. Nếu ta dùng lệnh `main^` mà không bổ nghĩa cho nó, ta sẽ đi ngược lên commit cha đầu tiên của merge commit. ","","(*Trong hình minh họa bên trái thì commit cha đầu tiên được xếp thẳng hàng ngay phía trên của commit merge.*)"],afterMarkdowns:["Dễ dàng -- đó là cách mà ta thường làm."],command:"git checkout main^",beforeCommand:"git checkout HEAD^; git commit; git checkout main; git merge C2"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Nào bây giờ hãy chỉ định commit cha thứ hai thử..."],afterMarkdowns:["Thấy chứ? Ta đã leo lên commit cha khác lúc trước."],command:"git checkout main^2",beforeCommand:"git checkout HEAD^; git commit; git checkout main; git merge C2"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Dùng bổ ngữ `^` và `~` cho ta khả năng di chuyển trên cây lịch sử:"],afterMarkdowns:["Nhanh như chớp!"],command:"git checkout HEAD~; git checkout HEAD^2; git checkout HEAD~2",beforeCommand:"git commit; git checkout C0; git commit; git commit; git commit; git checkout main; git merge C5; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Thâm chí còn ghê gớm hơn khi ta kết hợp chúng với nhau! Hãy xem thử:"],afterMarkdowns:["Cùng con đường như lúc trước, nhưng chỉ cần 1 dòng lệnh."],command:"git checkout HEAD~^2~2",beforeCommand:"git commit; git checkout C0; git commit; git commit; git commit; git checkout main; git merge C5; git commit"}},{type:"ModalAlert",options:{markdowns:["### Áp dụng thực hành nào","","Để hoàn thành cấp độ này, hãy tạo ra một nhánh mới ở vị trí chỉ định.","","Dùng cách chỉ định trực tiếp commit (như là dùng `C6` chẳng hạn) thì dễ quá, nhưng thử thách ở đây là dùng các bổ ngữ đã học ở trên!"]}}]},sl_SI:{childViews:[{type:"ModalAlert",options:{markdowns:["### Določanje Staršev","","Tako kot `~` modifikator, tudi `^` modifikator sprejme opcijsko število na koncu.","","Raje kot podajanje števila generacij, za katere se hočemo premakniti nazaj (kot pri `~`), modifikator `^` pove kateremu staršu oz. njegovi referenci naj sledi iz merge commita. Zapomni si, da imajo merge commiti več staršev, zato je pot nejasna.","",'Git bo ponavadi sledil "prvemu" staršu navzgor po merge commitu, ampak določitev števila s `^` spremeni privzeto obnašanje.',"","Dovolj govorjenja, poglejmo stvar v akciji.",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Tukaj imamo merge commit. Če checkoutamo `main^` brez modifikatorjev, bomo sledili prvem staršu po merge commitu. ","","(* V naši vizualizaciji, je postavljen prvi starš direktno nad merge commitom.)"],afterMarkdowns:["Enostavno -- tega smo vsi navajeni."],command:"git checkout main^",beforeCommand:"git checkout HEAD^; git commit; git checkout main; git merge C2"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Sedaj pa poizkusimo določiti raje drugega starša ..."],afterMarkdowns:["Vidiš? Sledili smo drugemu staršu navzgor."],command:"git checkout main^2",beforeCommand:"git checkout HEAD^; git commit; git checkout main; git merge C2"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Modifikatorja `^` in `~` naredita sprehajanje po drevesu zelo učinkovito:"],afterMarkdowns:["Bliskovito!"],command:"git checkout HEAD~; git checkout HEAD^2; git checkout HEAD~2",beforeCommand:"git commit; git checkout C0; git commit; git commit; git commit; git checkout main; git merge C5; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Še bolj noro, te modifikatorji so lahko povezani skupaj! Poglej to:"],afterMarkdowns:["Isto gibanje kot prej, ampak vse z enim ukazom."],command:"git checkout HEAD~^2~2",beforeCommand:"git commit; git checkout C0; git commit; git commit; git commit; git checkout main; git merge C5; git commit"}},{type:"ModalAlert",options:{markdowns:["### Preizkusi v praksi","","Za dokončanje te stopnje, ustvari nov brench na določeni destinaciji.","","Seveda bi bilo lažje izbrati commit direktno (npr. s `C6`), ampak te izzivam, da namesto tega poizkusiš z modifikatorji o katerih smo govorili!"]}}]},ta_IN:{childViews:[{type:"ModalAlert",options:{markdowns:["### துவக்க கிலையை குறிக்க","","`~` மாற்றியை போல, `^` மாற்றியும் தேவைப்படின் உள்ளீடாக ஒரு எண்யை ஏற்றுக்கொள்ளும், ஆனால் அது கட்டாயம் அல்ல.","","அந்த எண் (`~` போல்) முந்தய கிளை இணைப்புகளுக்கு பின்னோக்கி செல்வதை குறிக்காமல், தற்ப்போதிய கமிட் எந்த கிளை துவக்கத்துடன் இணைக்க வேண்டுமோ அதனை `^`-இன் உள்ளீடு குறிக்கிரது. தொகுப்பு கமிட்கள் ஒன்றுக்கும் மேற்ப்பட்ட மூல கிளைகளை கொண்டு இருக்கும் எனவே இது குழப்பமானதாக இருக்கும்.","",'கிட் பொதுவாக தொகுப்பு கமிட்டில் இருந்து மேல் நோக்கி உள்ள "முதல்" கிளைக்கு பின் இணைப்பை உருவாக்கும், ஆனால் `^`-இற்க்கு கொடுக்கப்படு் உள்ளீட்டு எண் வேரு கிளை முனைப்புகளுடன் இணைக்கி உதவும்.',"","விவரங்கள் போதும், அதை செயலில் பார்ப்போம்.",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["இங்கே நாம்மிடன் ஒரு தொகுப்பு கமிட் உள்ளது. இப்போது நாம் checkout `main^` மட்டும் எந்த ஒரு எண்னும் குறிப்பிடாமல் கட்டலையிட்டால் அது கமிட்டின் நேரடி மூல கிளையுடன் இணைப்பை உருவாக்கும். ","","(*இங்குள்ள வரைபடத்தில், நேரடி மூழம் தொகுப்பு கமிட்டின் நேர் எதிர் திசையில் மேலக காட்ட பட்டுள்ளது.*)"],afterMarkdowns:["அது பரவாயில்லை -- இது நாம் அனைவரும் பழக்கமாகிவிட்டது."],command:"git checkout main^",beforeCommand:"git checkout HEAD^; git commit; git checkout main; git merge C2"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["இப்போது நாம் மாற்றாக இரண்டாவது துவக்க கிளையை குறிக்க செய்வோம்..."],afterMarkdowns:["கவனத்தீர்களா? நாம் அடுத்த கிளை மூழப்புள்ளியின் கீழ் இணைப்பை உருவாக்கி உள்ளொம்."],command:"git checkout main^2",beforeCommand:"git checkout HEAD^; git commit; git checkout main; git merge C2"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["`^` மற்றும் `~` மாற்றிகள் கமிட் மர அமைப்பை சுலபமாக சுற்றி வர உதவுகின்றன:"],afterMarkdowns:["மின்னல் வேகம்!"],command:"git checkout HEAD~; git checkout HEAD^2; git checkout HEAD~2",beforeCommand:"git commit; git checkout C0; git commit; git commit; git commit; git checkout main; git merge C5; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["மேலும் ஒரு எளிய வழி, இந்த மாற்றிகளை நாம் இணைத்தும் பயன் படுத்தலாம்! இதைப்பாருங்க்:"],afterMarkdowns:["மேல் கண்ட அதே வழி மாற்றம்தான் ஆனால் அனைத்தும் ஒரே கட்டளையில்."],command:"git checkout HEAD~^2~2",beforeCommand:"git commit; git checkout C0; git commit; git commit; git commit; git checkout main; git merge C5; git commit"}},{type:"ModalAlert",options:{markdowns:["### இப்போது நீங்கள் பயிற்சி செய்யுங்கள்","","இந்த படி நிலையை நிரைவு செய்ய, குறிப்பிட்டபட்டுள்ள பிரிவில் ஒரு கிளையை உருவாக்குங்கள்.","","வெளிப்படையாக சொல்லப்போனால் (`C6` போன்று) நேரடியாக கிளையை குறிப்பிடமுடியுன், இருப்பினும் இந்த சவால் மேல் குறிப்பிட்ட மாற்றிகளை பயன் படுத்தும் வகையில் அமைக்க பட்டுள்ளது!"]}}]},pl:{childViews:[{type:"ModalAlert",options:{markdowns:["### Określanie rodziców","","Podobnie jak modyfikator `~`, modyfikator `^` również przyjmuje po sobie opcjonalną liczbę.","","Zamiast określać liczbę pokoleń do cofnięcia się (co robi `~`), modyfikator `^` określa, do którego rodzica należy się odwołać po wykonaniu merge commita. Pamiętaj, że scalanie ma wielu rodziców, więc wybór ścieżki nie jest jednoznaczny.","",'Git zazwyczaj podąża za "pierwszym" rodzicem w górę od commitu scalającego, ale określenie liczby za pomocą `^` zmienia to domyślne zachowanie.',"","Dość gadania - zobaczmy, jak to działa.",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Tutaj mamy merge commit. Jeśli checkoutujemy `main^` bez liczby na końcu, przejdziemy do pierwszego rodzica po merge commicie. ","","(*Na naszych wizualizacjach pierwszy rodzic jest umieszczony bezpośrednio nad commitem scalającym.*)"],afterMarkdowns:["Spokojnie - do tego wszyscy jesteśmy przyzwyczajeni."],command:"git checkout main^",beforeCommand:"git checkout HEAD^; git commit; git checkout main; git merge C2"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["A teraz spróbujmy określić drugiego rodzica..."],afterMarkdowns:["Spójrz. Przenieślismy się do drugiego rodzica."],command:"git checkout main^2",beforeCommand:"git checkout HEAD^; git commit; git checkout main; git merge C2"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Modyfikatory `^` i `~` mogą dodać supermoce do poruszania się po drzewie commitów:"],afterMarkdowns:["Co za prędkość!"],command:"git checkout HEAD~; git checkout HEAD^2; git checkout HEAD~2",beforeCommand:"git commit; git checkout C0; git commit; git commit; git commit; git checkout main; git merge C5; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Jeszcze bardziej szalone jest to, że modyfikatory mogą być ze sobą łączone! Zobacz:"],afterMarkdowns:["Ten sam ruch co poprzednio, ale wszystko w jednym poleceniu."],command:"git checkout HEAD~^2~2",beforeCommand:"git commit; git checkout C0; git commit; git commit; git commit; git checkout main; git merge C5; git commit"}},{type:"ModalAlert",options:{markdowns:["### Zastosuj to w praktyce","","Aby ukończyć ten poziom, utwórz nową gałąź w określonym miejscu docelowym.","","Oczywiście łatwo byłoby określić commit bezpośrednio (coś jak `C6`), ale spróbuj użyć modyfikatorów, o których mówiliśmy przed chwilą!"]}}]},it_IT:{childViews:[{type:"ModalAlert",options:{markdowns:["### Speficicare i genitori","","Come il modificatore `~` , anche il modificatore `^` accetta un numero (opzionale) dopo di esso.","","Invece che specificare il numero di generazioni di cui tornare indietro (come accade con `~`), il modificatore `^` specifica quale genitore seguire partendo da un merge commit (di fusione). Ricorda che i merge commit hanno genitori multipli, quindi il percorso da seguire può essere ambiguo.","","Git normalmente segue il primo genitore partendo da un merge commit, ma specificando un numero con `^` cambia questo comportamento predefinito.","","Basta parlare, vediamolo in azione.",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Qui abbiamo un merge commit. Se facciamo checkout `main^` senza modificatore, seguiremo il primo genitore dopo il merge commit. ","","(*Nell'immagine, il primo genitore è situato direttamente al di sopra al merge commit.*)"],afterMarkdowns:["Facile -- questo è quello a cui siamo abituati."],command:"git checkout main^",beforeCommand:"git checkout HEAD^; git commit; git checkout main; git merge C2"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Ora invece proviamo a specificare il secondo genitore..."],afterMarkdowns:["Vedi? Abbiamo seguito il secondo genitore verso l'alto."],command:"git checkout main^2",beforeCommand:"git checkout HEAD^; git commit; git checkout main; git merge C2"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["I modificatori `^` e `~` riescono a farci muovere lungo l'albero dei commit in modo agevole:"],afterMarkdowns:["Super veloce!"],command:"git checkout HEAD~; git checkout HEAD^2; git checkout HEAD~2",beforeCommand:"git commit; git checkout C0; git commit; git commit; git commit; git checkout main; git merge C5; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Ancora più sorprendente, questi modificatori possono essere concatenati tra loro! Dai un occhiata:"],afterMarkdowns:["Stessi passaggi di prima, ma tutto con un comando."],command:"git checkout HEAD~^2~2",beforeCommand:"git commit; git checkout C0; git commit; git commit; git commit; git checkout main; git merge C5; git commit"}},{type:"ModalAlert",options:{markdowns:["### Mettilo in pratica","","Per completare questo livello, crea un nuovo ramo alla destinazione specificata.","","Sarebbe facile specificare il commit direttamente (con qualcosa del tipo `C6`), ovvio, ma ti sfido invece a utilizare i modificatori di cui abbiamo parlato!"]}}]}}}},{}],121:[function(e,t,o){o.levelSequences={intro:[e("./intro/commits").level,e("./intro/branching").level,e("./intro/merging").level,e("./intro/rebasing").level],rampup:[e("./rampup/detachedHead").level,e("./rampup/relativeRefs").level,e("./rampup/relativeRefs2").level,e("./rampup/reversingChanges").level],move:[e("./rampup/cherryPick").level,e("./rampup/interactiveRebase").level],mixed:[e("./mixed/grabbingOneCommit").level,e("./mixed/jugglingCommits").level,e("./mixed/jugglingCommits2").level,e("./mixed/tags").level,e("./mixed/describe").level],advanced:[e("./rebase/manyRebases").level,e("./advanced/multipleParents").level,e("./rebase/selectiveRebase").level],remote:[e("./remote/clone").level,e("./remote/remoteBranches").level,e("./remote/fetch").level,e("./remote/pull").level,e("./remote/fakeTeamwork").level,e("./remote/push").level,e("./remote/fetchRebase").level,e("./remote/lockedMain").level],remoteAdvanced:[e("./remote/pushManyFeatures").level,e("./remote/mergeManyFeatures").level,e("./remote/tracking").level,e("./remote/pushArgs").level,e("./remote/pushArgs2").level,e("./remote/fetchArgs").level,e("./remote/sourceNothing").level,e("./remote/pullArgs").level]};var i=o.sequenceInfo={intro:{displayName:{en_US:"Introduction Sequence",de_DE:"Einführung",ja:"まずはここから",fr_FR:"Séquence d'introduction",es_AR:"Secuencia introductoria",es_MX:"Secuencia introductoria",es_ES:"Secuencia introductoria",pt_BR:"Sequência introdutória",gl:"Secuencia introductoria",zh_CN:"基础篇",zh_TW:"基礎篇",ko:"git 기본",ru_RU:"Введение",uk:"Вступ",vi:"Giới Thiệu Chuỗi Luyện Tập",sl_SI:"Uvodno Zaporedje",pl:"Wprowadzenie",it_IT:"Sequenza introduttiva",ta_IN:"அறிமுக தொடர் வரிசை"},about:{en_US:"A nicely paced introduction to the majority of git commands",de_DE:"Eine gut abgestimmte Einführung in die wichtigsten Git-Befehle",ja:"gitの基本的なコマンド群をほどよいペースで学ぶ",fr_FR:"Une introduction en douceur à la majorité des commandes Git",es_AR:"Una breve introducción a la mayoría de los comandos de git",es_MX:"Una breve introducción a la mayoría de los comandos de git",es_ES:"Una breve introducción a la mayoría de los comandos de git",pt_BR:"Uma breve introdução à maioria dos comandos do git",gl:"Unha breve introducción á maioría dos comandos de git",zh_CN:"循序渐进地介绍 Git 主要命令",zh_TW:"循序漸進地介紹 git 主要命令",ko:"git의 주요 명령어를 깔끔하게 알려드립니다",ru_RU:"Хорошо подобранное введение в основные команды git",uk:"Гарно підібране введення в основні команди git",vi:"Từng bước làm quen với phần lớn lệnh điều khiển Git",sl_SI:"Prijeten uvod v git ukaze",pl:"Krótkie wprowadzenie do większości poleceń Gita",it_IT:"Un'introduzione graduale ai principali comandi Git",ta_IN:"பெரும்பாலான கிட் கட்டளைகளுக்கு ஒரு நல்ல அறிமுகம்"}},rampup:{displayName:{en_US:"Ramping Up",de_DE:"Aufstieg",ja:"次のレベルに進もう",fr_FR:"Montée en puissance",es_AR:"Acelerando",es_MX:"Acelerando",es_ES:"Acelerando",pt_BR:"Acelerando",gl:"Alixeirando",zh_CN:"高级篇",zh_TW:"進階篇",ru_RU:"Едем дальше",uk:"Їдемо далі",ko:"다음 단계로",vi:"Tăng Tốc",sl_SI:"Prva Stopnička",pl:"Rozkręcenie",it_IT:"Diamoci dentro",ta_IN:"சற்று அதிகப்படுத்த"},about:{en_US:"The next serving of 100% git awesomes-ness. Hope you're hungry",de_DE:"Eine Portion Git-Wahnsinn zum Thema Navigation",ja:"更にgitの素晴らしさを堪能しよう",fr_FR:"Le prochain excellent plat de pur Git. J'espère que vous êtes affamés",es_AR:"La próxima porción de 100% maravillas git. Espero que estés hambriento",es_MX:"La próxima ración de git. Espero que estés hambriento",es_ES:"La próxima ración de git. Espero que estés hambriento",pt_BR:"A próxima porção de maravilhas do git. Faminto?",gl:"A próxima porción das marabillas de git. Agardo que estés esfameado",zh_CN:"要开始介绍 Git 的超棒特性了,快来吧!",zh_TW:"接下來是 git 非常厲害的地方!相信你已經迫不及待了吧!",ru_RU:"Следующая порция абсолютной git-крутотенюшки. Проголодались?",uk:"Наступна порція абсолютної git-дивини. Сподіваюсь, ви зголодніли",ko:"git은 아주 멋져요. 왜 멋진지 알려드립니다",vi:"Tận hưởng khẩu phần tuyệt hảo của Git. Hi vọng bạn còn đói",sl_SI:"Naslednja porcija git izjemnosti. Upam, da si lačen",pl:"Następna porcja gita jest niesamowita. Mam nadzieję, że jesteś głodny",it_IT:"Porzione con il 100% di grandiosità Git, spero tu sia affamato",ta_IN:"அடித்தது கிட்டின் 100% அற்புதங்கள். நீங்கள் ஆர்வமாக உள்ளீர்கள் என்று நம்புகிறேன்"}},remote:{tab:"remote",displayName:{en_US:"Push & Pull -- Git Remotes!",de_DE:"Push & Pull -- entfernte Repositorys",ja:"Push及びPullコマンド -- Gitリモート",fr_FR:"Push & Pull -- Dépôts Git distants !",es_AR:"Push & Pull -- Git Remotes!",es_MX:"Push & Pull -- Repositorios remotos en Git (Git Remotes)!",es_ES:"Push y Pull -- Git Remotes!",pt_BR:"Push & Pull -- repositórios remotos no Git!",gl:"Push & Pull -- Repositorios remotos no Git!",zh_CN:"Push & Pull —— Git 远程仓库!",zh_TW:"Push & Pull -- Git Remotes!",ru_RU:"Push & Pull - удалённые репозитории в Git!",uk:"Push & Pull -- віддалені репозиторії в Git!",ko:"Push & Pull -- Git 원격 저장소!",vi:"Push & Pull -- Git Remotes!",sl_SI:"Push & Pull -- Oddaljeni Git",pl:"Push & Pull -- Zdalne repozytoria",it_IT:"Push & Pull -- Git Remoto!",ta_IN:"Push & Pull -- கிட் Remotes!"},about:{en_US:"Time to share your 1's and 0's kids; coding just got social",fr_FR:"Il est le temps de partager vos 1 et vos 0 les enfants, le code vient de devenir social.",ja:"自分のコードをより広く公開しましょう",de_DE:"Zeit eure 1en und 0en zu teilen; Coding mit sozialer Komponente",es_AR:"Hora de compartir sus 1's y 0's; programar se volvió social!",es_MX:"Hora de compartir sus 1's y 0's, chicos; programar se volvió social!",es_ES:"Hora de compartir vuestros 1's y 0's, chicos; programar se volvió social!",pt_BR:"Hora de compartilhar seus 1's e 0's, crianças; programar agora é social!",gl:"Hora de compartilos seus 1' e 0's, rapaces; programar agora é social!",zh_CN:"是时候分享你的代码了,让编码变得社交化吧",zh_TW:"是時候分享你的程式碼了",ru_RU:"Настало время поделиться своими единичками и нулями. Время коллективного программирования",uk:"Настав час поділитися своїми нулями та одиничками; соціальне програмування",ko:"내 코드를 공개할 때가 되었습니다. 코드를 공개해봅시다!",vi:"Chia sẻ đứa con tinh thần '0' và '1' của bạn; mã đã đến với cộng đồng",sl_SI:"Čas za deljenje tvojih 1 in 0; kodiranje je pravkar postalo socialno",pl:"Czas podzielić się swoimi dziećmi 1 i 0; kodowanie właśnie stało się społeczne",it_IT:"Ragazzi è arrivato il momento di condividere i vostri 0 e 1; programmare diventa social",ta_IN:"உங்களின் 1'கள் மற்றும் 0'களை பகிர்வதற்கான நேரம் குழந்தைகளே; குறியிடுதல் (coding) பொது உடமை ஆக்க பட்டுள்ளது"}},remoteAdvanced:{tab:"remote",displayName:{en_US:"To Origin And Beyond -- Advanced Git Remotes!",de_DE:"Bis zum origin und noch weiter",ja:'"origin"とその先へ -- Gitリモート上級編',fr_FR:"Vers l'infini et au-delà -- dépôts distants version avancée",es_AR:"Hasta el origin y más allá -- Git Remotes avanzado!",es_MX:"Hasta el origin y más allá -- Git Remotes avanzado!",es_ES:"Hasta el origen y más allá -- Git Remotes avanzado!",pt_BR:"Até a origin e além -- repositórios remotos avançados!",gl:"Ata á orixe e máis aló -- repositorios remotos avanzados!",zh_CN:"关于 origin 和它的周边 —— Git 远程仓库高级操作",zh_TW:"關於 origin 和其它 repo,git remote 的進階指令",ru_RU:"Через origin – к звёздам. Продвинутое использование Git Remotes",uk:"Через origin – до зірок. Прогресивне використання Git Remotes",ko:'"origin"그 너머로 -- 고급 Git 원격 저장소',vi:"Về Với Cội Nguồn Và Vươn Xa Hơn -- Git Remote Nâng Cao",sl_SI:"Do Origina In Naprej -- Napredni Oddaljeni Git",pl:"Do źródła i dalej -- zaawansowane zdalne repozytoria",it_IT:"Verso Origin e oltre -- Git Remoto Avanzato!",ta_IN:"ஆரம்பம் மற்றும் அதர்க்கு மேல் -- மேம்பட்ட கிட் ரிமோட்டுகள்!"},about:{en_US:"And you thought being a benevolent dictator would be fun...",fr_FR:"Et vous pensiez qu'être un dictateur bienfaisant serait amusant...",ja:"絶えず上級者の仕事は存在する。。。",es_AR:"Y pensabas que ser un dictador benévolo sería divertido...",es_MX:"Y pensabas que ser un dictador benévolo sería divertido...",es_ES:"Y pensabas que ser un dictador benévolo sería divertido...",pt_BR:"E você achava que ser um déspota esclarecido seria mais divertido...",gl:"E pensabas que ser un dictador benévolo sería divertido...",zh_CN:"做一名仁慈的独裁者一定会很有趣……",zh_TW:"而且你會覺得做一個仁慈的獨裁者會很有趣...",de_DE:"Git Remotes für Fortgeschrittene",ru_RU:"Весело было быть всесильным мудрым правителем...",uk:"А ти думав, що бути всесильним диктатором весело...",ko:"자비로운 독재자가 되는게 재밌을 줄 알았겠지만...",vi:"Và bạn nghĩ làm một kẻ độc tài nhân từ thì sẽ vui...",sl_SI:"In ti si mislil, da je biti dobronamerni diktator zabavno ...",pl:"A myślałeś, że bycie życzliwym dyktatorem byłoby fajne...",it_IT:"E tu credevi che essere un dittatore benevolo fosse divertente...",ta_IN:"நீங்கள் ஒரு அக்கரை உள்ள சர்வாதிகாரியாக இருப்பது வேடிக்கையாக இருக்கும் என்று நினைத்தீர்களா..."}},move:{displayName:{en_US:"Moving Work Around",de_DE:"Code umherschieben",fr_FR:"Déplacer le travail",es_AR:"Moviendo el trabajo por ahí",es_MX:"Moviendo el trabajo por ahí",es_ES:"Moviendo el trabajo por ahí",pt_BR:"Movendo trabalho por aí",gl:"Movendo o traballo por ahí",ja:"コードの移動",ko:"코드 이리저리 옮기기",zh_CN:"移动提交记录",zh_TW:"調整提交順序",ru_RU:"Перемещаем труды туда-сюда",uk:"Переміщуємо роботу туди-сюди",vi:"Di Chuyển Commit",sl_SI:"Premikanje Dela Naokrog",pl:"Przenoszenie pracy",it_IT:"Spostare il lavoro in giro",ta_IN:"வேலைகளை பகிர்ந்து கொள்வது"},about:{en_US:'"Git" comfortable with modifying the source tree :P',de_DE:"Gewöhn dich daran, den Git-Baum zu verändern",fr_FR:"Soyez à l'aise pour modifier l'arbre Git",es_AR:"Preparate para modificar el directorio fuente :P",es_MX:"Ponte cómodo al modificar el directorio fuente :P",es_ES:"Ponte cómodo cuando modifiques el directorio fuente",pt_BR:"Fique confortável em modificar a árvore de códigos",gl:"Ponte cómodo modificando a árbore de git",ko:"작업 트리를 수정하는건 식은죽 먹기지요 이제",ja:"話題のrebaseってどんなものだろう?って人にオススメ",zh_CN:"自由修改提交树",zh_TW:"自由修改提交樹",ru_RU:"Не стесняйтесь менять историю",uk:"Не соромимось змінювати історію",vi:'Dễ dàng chỉnh sửa cây lịch sử với "Git" :P',sl_SI:'Spretno "Git" premikanje po drevesu :P',pl:"Git dobrze radzi sobie z modyfikacją drzewa źródłowego :P",it_IT:'Modificare l\'albero con facilità. "GIT" ready :P',ta_IN:'"கிட்" மூல மரத்தை மாற்றுவதில் சிரந்தது :P'}},mixed:{displayName:{en_US:"A Mixed Bag",de_DE:"Ein Kessel Buntes",ja:"様々なtips",fr_FR:"Un assortiment",es_AR:"Bolsa de gatos",es_MX:"De todo un poco",es_ES:"Un poco de todo",pt_BR:"Sortidos",gl:"Todo mesturado",ko:"종합선물세트",zh_CN:"杂项",zh_TW:"活用 git 的指令",ru_RU:"Сборная солянка",uk:"Всяке",vi:"Vài Mẹo Linh Tinh",sl_SI:"Mešana Vreča",pl:"Po trochu wszystkiego",it_IT:"Un po' di tutto",ta_IN:"ஒரு கலப்பு பை"},about:{en_US:"A mixed bag of Git techniques, tricks, and tips",de_DE:"Eine bunte Mischung von Techniken, Tipps und Tricks",ja:"gitを使う上での様々なtipsやテクニックなど",fr_FR:"Un assortiment de techniques et astuces pour utiliser Git",es_AR:"Un rejunte de técnicas, trucos y tips sobre Git",es_MX:"Un recopilatorio de técnicas, trucos y tips sobre Git",es_ES:"Un batiburrillo de técnicas, trucos y sugerencias sobre Git",pt_BR:"Técnicas, truques e dicas sortidas sobre Git",gl:"Mestura de técnicas, trucos e consellos",ko:"Git을 다루는 다양한 팁과 테크닉을 다양하게 알아봅니다",zh_CN:"Git 技术、技巧与贴士大集合",zh_TW:"git 的技術,招數與技巧",ru_RU:"Ассорти из приёмов работы с Git, хитростей и советов",uk:"Різні прийоми роботи з Git, хитрощі та поради",vi:"Các kỹ thuật, bí quyết, và mẹo vặt hữu ích",sl_SI:"Mešana vreča Git tehnik, trikov in nasvetov",pl:"Po trochu wszystkiego. Wskazówki i triki",it_IT:"Comandi Git assortiti, trucchi e consigli",ta_IN:"கிட் நுட்பங்கள், தந்திரங்கள் மற்றும் உதவிக்குறிப்புகளின் கலவையான பை"}},advanced:{displayName:{en_US:"Advanced Topics",de_DE:"Themen für Fortgeschrittene",ja:"上級トピック",fr_FR:"Sujets avancés",es_AR:"Temas avanzados",es_MX:"Temas avanzados",es_ES:"Temas avanzados",pt_BR:"Temas avançados",gl:"Temas avanzados",zh_CN:"高级话题",zh_TW:"進階主題",ru_RU:"Продвинутый уровень",uk:"Досвідчений рівень",ko:"고급 문제",vi:"Các Chủ Đề Nâng Cao",sl_SI:"Napredne Teme",pl:"Tematy zaawansowane",it_IT:"Argomenti avanzati",ta_IN:"மேம்பட்ட தலைப்புகள்"},about:{en_US:"For the truly brave!",de_DE:"... die nie ein Mensch zuvor gesehen hat.",ja:"勇気ある人のみ!",fr_FR:"Pour les plus courageux !",es_AR:"¡Para personas realmente valientes!",es_MX:"¡Para los verdaderos valientes!",es_ES:"¡Para los verdaderos valientes!",pt_BR:"Para os verdadeiros valentes!",gl:"¡Para os verdadeiros valerosos!",zh_CN:"只为真正的勇士!",zh_TW:"來成為真正的強者吧!",ru_RU:"Если ты смелый, ловкий, умелый – потренируйся тут",uk:"Для хоробрих",ko:"용기있는 도전자를 위해 준비한 문제입니다",vi:"Mạnh mẽ lên!",sl_SI:"Za resnično pogumne!",pl:"Dla naprawdę odważnych!",it_IT:"Per i più temerari!",ta_IN:"உண்மையிலேயே தைரியமானவர்களுக்கு!"}}};o.getTabForSequence=function(e){var t=i[e];return t.tab?t.tab:"main"}},{"./advanced/multipleParents":120,"./intro/branching":122,"./intro/commits":123,"./intro/merging":124,"./intro/rebasing":125,"./mixed/describe":126,"./mixed/grabbingOneCommit":127,"./mixed/jugglingCommits":128,"./mixed/jugglingCommits2":129,"./mixed/tags":130,"./rampup/cherryPick":131,"./rampup/detachedHead":132,"./rampup/interactiveRebase":133,"./rampup/relativeRefs":134,"./rampup/relativeRefs2":135,"./rampup/reversingChanges":136,"./rebase/manyRebases":137,"./rebase/selectiveRebase":138,"./remote/clone":139,"./remote/fakeTeamwork":140,"./remote/fetch":141,"./remote/fetchArgs":142,"./remote/fetchRebase":143,"./remote/lockedMain":144,"./remote/mergeManyFeatures":145,"./remote/pull":146,"./remote/pullArgs":147,"./remote/push":148,"./remote/pushArgs":149,"./remote/pushArgs2":150,"./remote/pushManyFeatures":151,"./remote/remoteBranches":152,"./remote/sourceNothing":153,"./remote/tracking":154}],122:[function(e,t,o){o.level={goalTreeString:'{"branches":{"main":{"target":"C1","id":"main"},"bugFix":{"target":"C1","id":"bugFix"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"bugFix","id":"HEAD"}}',solutionCommand:"git branch bugFix;git checkout bugFix",name:{en_US:"Branching in Git",de_DE:"Branches in Git",ja:"Gitのブランチ",ko:"Git에서 브랜치 쓰기",es_AR:"Brancheando en Git",es_MX:"Creando ramas en Git",es_ES:"Creando ramas en Git",pt_BR:"Ramos no Git",gl:"Ramas en Git",fr_FR:"Gérer les branches avec Git",zh_CN:"Git Branch",zh_TW:"建立 git branch",ru_RU:"Ветвление в Git",uk:"Розгалуження в Git",vi:"Rẽ nhánh với Git",sl_SI:"Branchanje v Gitu",pl:"Rozgałęzienia w Gicie",it_IT:"Creare rami in Git",ta_IN:"கிட் கிளை நிருவாகம்",tr_TR:"Git'te Branch işlemleri"},hint:{en_US:'Make a new branch with "git branch " and check it out with "git checkout "',de_DE:'Lege mit "git branch [Branch-Name]" einen neuen Branch an und checke ihn mit "git checkout [Branch-Name]" aus',ja:'ブランチの作成("git branch [ブランチ名]")と、チェックアウト("git checkout [ブランチ名]")',es_AR:'Hacé una nueva rama con "git branch [nombre]" y cambiá a ella con "git checkout [nombre]"',es_MX:'Crea una nueva rama con "git branch [nombre]" y sitúate en ella con "git checkout [nombre]"',es_ES:'Crea una nueva rama con "git branch [nombre]" y sitúate en ella con "git checkout [nombre]"',pt_BR:'Crie um novo ramo com "git branch [nome]" e mude para ele com "git checkout [nome]"',gl:'Crea unha nova rama con "git branch [nome]" e cambiate a ela facendo "git checkout [nome]"',fr_FR:'Faites une nouvelle branche avec "git branch [nom]" positionnez-vous dans celle-ci avec "git checkout [nom]"',zh_CN:"用 'git branch <分支名>' 来创建分支,用 'git checkout <分支名>' 来切换到分支",zh_TW:"用 'git branch [ branch 名稱]' 來建立 branch,用 'git checkout [ branch 名稱]' 切換到該 branch",ko:'"git branch [브랜치명]"으로 새 브랜치를 만들고, "git checkout [브랜치명]"로 그 브랜치로 이동하세요',ru_RU:'Создай новую ветку при помощи "git branch [name]" и перейди на неё при помощи "git checkout [name]"',uk:'Створи нову гілку за допомогою "git branch [ім’я]" й перейди на неї за допомогою "git checkout [ім’я]"',vi:'Tạo một nhánh mới với lệnh "git branch [ten-nhanh]" và chuyển sang đó với lệnh "git checkout [ten-nhanh]"',sl_SI:'Naredi nov branch z "git branch [ime-brancha]" in ga checkoutaj z "git checkout [ime-brancha]"',pl:'Utwórz nową gałąź za pomocą "git branch " i przełącz się na nią za pomocą "git checkout "',it_IT:'Crea un nuovo ramo con "git branch " e selezionalo con "git checkout "',ta_IN:'இப்போது "git branch " கட்டளையை கொண்டு புதிய கிளை ஒன்றை உருவாக்குக பின் "git checkout " கொண்டு அந்த கிளைக்கு தாவுக',tr_TR:'Yeni bir branch oluşturmak için "git branch " komutunu kullanın ve "git checkout " komutu ile bu branch\'e geçin.'},disabledMap:{"git revert":!0},startDialog:{en_US:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Branches","","Branches in Git are incredibly lightweight as well. They are simply pointers to a specific commit -- nothing more. This is why many Git enthusiasts chant the mantra:","","```","branch early, and branch often","```","","Because there is no storage / memory overhead with making many branches, it's easier to logically divide up your work than have big beefy branches.","",'When we start mixing branches and commits, we will see how these two features combine. For now though, just remember that a branch essentially says "I want to include the work of this commit and all parent commits."']}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Let's see what branches look like in practice.","","Here we will create a new branch named `newImage`."],afterMarkdowns:["There, that's all there is to branching! The branch `newImage` now refers to commit `C1`."],command:"git branch newImage",beforeCommand:""}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Let's try to put some work on this new branch. Hit the button below."],afterMarkdowns:["Oh no! The `main` branch moved but the `newImage` branch didn't! That's because we weren't \"on\" the new branch, which is why the asterisk (*) was on `main`."],command:"git commit",beforeCommand:"git branch newImage"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Let's tell git we want to checkout the branch with","","```","git checkout ","```","","This will put us on the new branch before committing our changes."],afterMarkdowns:["There we go! Our changes were recorded on the new branch."],command:"git checkout newImage; git commit",beforeCommand:"git branch newImage"}},{type:"ModalAlert",options:{markdowns:["*Note: In Git version 2.23, a new command called `git switch` was introduced to eventually replace `git checkout`, ","which is somewhat overloaded (it does a bunch of different things depending on the arguments). The lessons here will still use ","`checkout` instead of `switch` because the `switch` command is still considered experimental and the syntax may change in the future. ","However you can still try out the new `switch` command in this application, and also ",'learn more here.* ']}},{type:"ModalAlert",options:{markdowns:["Ok! You are all ready to get branching. Once this window closes,","make a new branch named `bugFix` and switch to that branch.","","By the way, here's a shortcut: if you want to create a new ","branch AND check it out at the same time, you can simply ","type `git checkout -b [yourbranchname]`."]}}]},de_DE:{childViews:[{type:"ModalAlert",options:{markdowns:["## Branches in Git","","Branches sind in Git extrem schlank. Sie sind einfach Verweise auf einen bestimmten Commit -- das ist alles. Es ist unter Git-Enthusiasten deshalb gängige Praxis, früh und oft Branches anzulegen.","","Da das Anlegen von Branches keinen Plattenplatz und Speicher verbraucht, liegt es nahe die Arbeit in kleine logische Häppchen aufzuteilen, anstatt mit wenigen großen, monolithischen Branches zu hantieren.","",'Wir werden sehen wie Commits und Branches zusammengehören, sobald wir anfangen mit beiden zu arbeiten. Bis hierhin merk dir einfach, dass ein Branch im Prinzip bedeutet "ich möchte die Arbeit, die in diesem Commit und seinen Vorgängern steckt, sichern".']}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Schauen wir mal, wie Branches in der Praxis aussehen.","","Wir legen einen neuen Branch an und nennen ihn `issue`:"],afterMarkdowns:["Und das war's auch schon, mehr ist es nicht. Der Branch `issue` zeigt nun auf den Commit `C1`."],command:"git branch issue",beforeCommand:""}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Lass uns mal ein wenig auf dem neuen Branch arbeiten. Machen wir einen Commit:"],afterMarkdowns:['Oi! Der Branch `main` hat sich verändert, aber der Branch `issue` nicht. Das liegt daran, dass wir nicht "auf" dem neuen Branch waren, weshalb das Sternchen `*` auch hinter `main` steht.'],command:"git commit",beforeCommand:"git branch issue"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Sagen wir Git also erst mal auf welchem Branch wir arbeiten wollen, und zwar mit","","```","git checkout ","```","","Das wird uns auf den neuen Branch bringen bevor wir unsere Änderungen committen."],afterMarkdowns:["Und fertig! Unsere Änderungen wurden im neuen Branch gespeichert."],command:"git checkout issue; git commit",beforeCommand:"git branch issue"}},{type:"ModalAlert",options:{markdowns:["Cool! Jetzt bist du soweit, selbst Branches anzulegen. Wenn dieses Fenster geschlossen wurde, leg einen neuen Branch namens `bugFix` an und schalte auf diesen um."]}}]},ja:{childViews:[{type:"ModalAlert",options:{markdowns:["## Gitのブランチ","","Gitではコミットだけでなく、ブランチもまた信じられないほど軽量です。ブランチとは単に特定のコミットを指示したポインタにしか過ぎません。Gitの達人が決まってこう言うのは、そのためです:","","```","早めに、かつ頻繁にブランチを切りなさい","```","","どれほど多くのブランチを作ってもストレージやメモリを全然使わないので、ブランチを肥大化させるよりも論理的に分割していく方が簡単なのです。","","ブランチとコミットをあわせて使い始めると、これら2つの機能がどのように連動して機能するかがわかるでしょう。ここではとりあえず、ブランチは基本的には「あるコミットとその親のコミットたちを含めた全てのコミット」のことを呼ぶと覚えておいてください。"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["では実際にブランチがどのようなものかを見ていきましょう。","","`newImage`という名前の新しいブランチを切ってみることにします。"],afterMarkdowns:["以上。必要な手順はこれだけです。いま作成された`newImage`ブランチは`C1`コミットを指しています。"],command:"git branch newImage",beforeCommand:""}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["この新しいブランチに何か変更を加えてみましょう。次のボタンを押してください。"],afterMarkdowns:["あらら、`newImage`ではなくて`main`ブランチが移動してしまいました。これは、私たちが`newImage`のブランチ上で作業していなかったためです。どのブランチで作業しているかは、アスタリスク(*)がついてるかどうかで分かります。"],command:"git commit",beforeCommand:"git branch newImage"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["今度は作業したいブランチ名をgitに伝えてみましょう。","","```","git checkout [ブランチ名]","```","","このようにして、コミットする前に新しいブランチへと作業ブランチを移動することができます。"],afterMarkdowns:["できましたね。今度は新しいブランチに対して変更を記録することができました。"],command:"git checkout newImage; git commit",beforeCommand:"git branch newImage"}},{type:"ModalAlert",options:{markdowns:["はい、これでもうどんなブランチでも切れますね。このウィンドウを閉じて、","`bugFix`という名前のブランチを作成し、そのブランチをチェックアウトしてみましょう。"]}}]},es_AR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Ramas en Git","","Las ramas (branches) en Git son increíblemente livianas. Son sólo referencias a un commit específico - nada más. Por esto es que tantos entusiastas de Git siguen el mantra:","","```","brancheá temprano, y brancheá seguido","```","","Como no hay consumo extra de almacenamiento ni memoria al hacer varias ramas, es más fácil dividir lógicamente tu trabajo que tener un par de ramas grandes.","",'Cuando empecemos a mezclar ramas y commits, vamos a ver cómo se combinan estas dos herramientas. Por ahora, en cambio, simplemente recordá que una rama esencialmente dice "Quiero incluir el trabajo de este commit y todos su ancestros".']}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Veamos cómo se ven las ramas en práctica.","","Acá vamos a crear una rama nueva llamada `newImage`."],afterMarkdowns:["Ahí está, ¡eso es todo lo que hay que hacer para branchear! La rama `newImage` ahora referencia al commit `C1`."],command:"git branch newImage",beforeCommand:""}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Pongamos algo de trabajo en esta nueva rama. Apretá el botón de acá abajo."],afterMarkdowns:['¡Uh, no! ¡La rama `main` avanzó, pero `newImage` no! Eso es porque no estábamos "en" la rama nueva, y por eso el asterisco (*) estaba en `main`.'],command:"git commit",beforeCommand:"git branch newImage"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Digámosle a git que queremos checkoutear esa rama con","","```","git checkout [name]","```","","Esto va a situarnos en esa rama antes de commitear nuestros cambios."],afterMarkdowns:["¡Ahí estamos! Nuestros cambios se registraron en nuestra nueva rama."],command:"git checkout newImage; git commit",beforeCommand:"git branch newImage"}},{type:"ModalAlert",options:{markdowns:["¡Ok! Ya podés manejar ramas. Cuando se cierre esta ventana,","creá una nueva rama llamada `bugFix` y cambiate a ella."]}}]},es_MX:{childViews:[{type:"ModalAlert",options:{markdowns:["## Ramas en Git","","Las ramas (branches) en Git son increíblemente livianas. Son sólo referencias a un commit específico - nada más. Por esto es que tantos entusiastas de Git siguen el mantra:","","```","ramifica temprano, y ramifica seguido","```","","Como no hay consumo extra de almacenamiento ni memoria al hacer varias ramas, es más fácil dividir lógicamente tu trabajo que tener un par de ramas grandes.","",'Cuando empecemos a mezclar ramas y commits, vamos a ver cómo se combinan estas dos herramientas. Por ahora, en cambio, simplemente recuerda que una rama esencialmente dice "Quiero incluir el trabajo de este commit y todos su ancestros".']}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Veamos cómo se ven las ramas en práctica.","","Acá vamos a crear una rama nueva llamada `newImage`."],afterMarkdowns:["Ahí está, ¡eso es todo lo que hay que hacer para ramificar! La rama `newImage` ahora hace referencia al commit `C1`."],command:"git branch newImage",beforeCommand:""}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Pongamos algo de trabajo en esta nueva rama. Aprieta el botón que se encuentra debajo."],afterMarkdowns:['¡Uh, no! ¡La rama `main` avanzó, pero `newImage` no! Eso es porque no estábamos "en" la rama nueva, y por eso el asterisco (*) estaba en `main`.'],command:"git commit",beforeCommand:"git branch newImage"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Digámosle a git que queremos hacer checkout a esa rama con","","```","git checkout [name]","```","","Esto nos situará en esa rama antes de hacer commit a nuestros cambios."],afterMarkdowns:["¡Ahí estamos! Nuestros cambios se registraron en nuestra nueva rama."],command:"git checkout newImage; git commit",beforeCommand:"git branch newImage"}},{type:"ModalAlert",options:{markdowns:["¡Ok! Ya estás listo para manejar ramas. Cuando se cierre esta ventana,","crea una nueva rama llamada `bugFix` y cámbiate a ella."]}}]},es_ES:{childViews:[{type:"ModalAlert",options:{markdowns:["## Ramas en Git","","Las ramas (branches) en Git son increíblemente livianas. Son sólo referencias a un commit específico - nada más. Por esto es que tantos entusiastas de Git siguen el mantra:","","```","crea ramas al principio y hazlo también de manera frecuente","```","","Como no hay consumo extra de almacenamiento ni memoria al crear varias ramas, lógicamente es más fácil dividir tu trabajo que trabajar solamente con un par de ramas grandes.","",'Cuando empecemos a mezclar ramas y commits, vamos a ver cómo se combinan estas dos herramientas. Por ahora, en cambio, simplemente recuerda que una rama esencialmente dice "Quiero incluir el trabajo de este commit y todos su ancestros".']}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Veamos cómo son las ramas en la práctica.","","Ahora vamos a crear una rama nueva llamada `newImage`."],afterMarkdowns:["Ahí está, ¡eso es todo lo que hay que hacer para crear una rama! La rama `newImage` ahora referencia al commit `C1`."],command:"git branch newImage",beforeCommand:""}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Pongamos algo de trabajo en esta nueva rama. Aprieta el botón de aquí abajo."],afterMarkdowns:['¡Vaya! ¡La rama `main` avanzó, pero `newImage` no! Eso es porque no estábamos "en" la rama nueva, y por eso el asterisco (*) estaba en `main`.'],command:"git commit",beforeCommand:"git branch newImage"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Digámosle a git que queremos hacer checkout a esa rama con","","```","git checkout [name]","```","","Esto va a situarnos en esa rama antes de hacer un commit con nuestros cambios."],afterMarkdowns:["¡Ahí estamos! Nuestros cambios se registraron en nuestra nueva rama."],command:"git checkout newImage; git commit",beforeCommand:"git branch newImage"}},{type:"ModalAlert",options:{markdowns:["¡Perfecto! Ya estás listo para trabajar con ramas. Cuando se cierre esta ventana,","crea una nueva rama llamada `bugFix` y cámbiate a ella."]}}]},pt_BR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Ramos no Git","","Ramos no Git também são incrivelmente leves. Eles são simplesmente referências a um commit específico -- e nada mais. É por isso que muitos entusiastas do Git entoam o mantra:","","```","ramifique cedo, ramifique sempre","```","","Devido a não existir sobrecarga de armazenamento / memória associada à criação de ramos, é mais fácil dividir logicamente o seu trabalho do que ter ramos grandes e gordos.","",'Quando começarmos a misturar ramos e commits, vamos ver como esses dois recursos combinam bem. Por enquanto, só lembre que um ramo diz essencialmente "Quero incluir o trabalho deste commit e de todos os seus ancestrais".']}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Vejamos como os ramos funcionam na prática.","","Aqui vamos criar um novo ramo chamado `newImage`."],afterMarkdowns:["Veja, é só isso que você tem que fazer para ramificar! O ramo `newImage` agora se refere ao commit `C1`."],command:"git branch newImage",beforeCommand:""}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Vamos tentar colocar algum trabalho neste novo ramo. Clique no botão abaixo."],afterMarkdowns:['Ah não! O ramo `main` se moveu mas o `newImage` não! Isso é porque o novo ramo não era o "ativo", e é por isso que o asterisco (*) estava no `main`.'],command:"git commit",beforeCommand:"git branch newImage"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Vamos contar ao git que queremos fazer checkout no ramo com:","","```","git checkout [nome]","```","","Isso vai nos situar no ramo antes de commitarmos nossas mudanças."],afterMarkdowns:["Aqui vamos nós! Nossas mudanças foram gravadas no novo ramo."],command:"git checkout newImage; git commit",beforeCommand:"git branch newImage"}},{type:"ModalAlert",options:{markdowns:["Ok! Vocês estão todos prontos para ramificar. Assim que esta janela fechar,","crie um novo ramo chamado `bugFix` e mude para esse ramo."]}}]},gl:{childViews:[{type:"ModalAlert",options:{markdowns:["## Ramas en Git","","As Ramas en Git son tamén increiblemente liviás. Elas sinxelamente son referencias a un mesmo commit específico, e nada máis. É por iso que moitos entusiastas do Git entonan o mantra:","","```","ramifica cedo, ramifica sempre","```","","Debido a non existir sobrecarga de memoria facendo moitas ramas, é máis sinxelo dividir a lóxica do teu traballo en ramas que ter unha enorme.","",'Cando comezamos a mesturar ramas e commits imos ver como eses dous recursos combínanse ben. Por agora lembra que unha rama esencialmente di "Quero incluír o traballo deste commit e de todos os seus ancestros".']}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Vexamos cómo as ramas funcionan na práctica.","","Aquí imos crear unha nova rama chamada `newImage`."],afterMarkdowns:["Mira, solo tes que poñer eso para crear unha rama! A rama `newImage` agora apunta ó commit `C1`."],command:"git branch newImage",beforeCommand:""}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Imos intentar colocar algún traballo nesta nova rama. Pincha no botón de abaixo."],afterMarkdowns:['¡Bueno home! A rama `main` moveuse pero a rama `newImage` non! Eso é porque a nova rama non era a "actual", e é por iso que o asterisco (*) ficaba na rama `main`.'],command:"git commit",beforeCommand:"git branch newImage"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Ímoslle decir a Git que nos queremos mover á rama con:","","```","git checkout [nome]","```","","Esto vainos levar á rama que tiñamos antes de facer os nosos cambios."],afterMarkdowns:["¡Imos alá! Os nosos cambios foron grabados na nova rama."],command:"git checkout newImage; git commit",beforeCommand:"git branch newImage"}},{type:"ModalAlert",options:{markdowns:["¡Ok! Estas preparado para facer ramas. Así que podes pechar a ventá,","crear unha rama chamada `bugFix` e moverte para esa rama.","","Inda así, hai un atallo: se ti quixeras crear unha nova ","rama e moverte a ela ó mesmo tempo, ti podes escribir simplemente ","`git checkout -b [a-tua- rama]`."]}}]},fr_FR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Branches Git","","Les branches sous Git sont incroyablement légères. Elles sont simplement des références sur un commit spécifique -- rien de plus. C'est pourquoi beaucoup d'enthousiastes répètent en cœur :","","```","des branches le plus tôt possible, et des branches souvent","```","","Parce qu'il n'y a pas de surcoût (stockage/mémoire) associé aux branches, il est facile de diviser son travail en de nombreuses branches plutôt que d'avoir quelques grosses branches.","","Nous verrons comment les branches et les commits interagissent quand nous les utiliserons ensemble. Pour l'instant, souvenez-vous qu'une branche est un moyen d'exprimer \"Je veux inclure le contenu de ce commit et de tous les commits parents.\""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Regardons à quoi ressemblent les branches en pratique.","","Nous allons nous positionner (checkout) dans une nouvelle branche appellée `newImage`."],afterMarkdowns:["Et voilà, c'est tout ! La branche `newImage` se réfère désormais au commit `C1`."],command:"git branch newImage",beforeCommand:""}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Travaillons maintenant dans cette branche. Appuyez sur le bouton ci-dessous."],afterMarkdowns:["Oh non! La branche `main` a bougé mais pas la branche `newImage` ! C'est parce que nous n'étions pas \"sur\" la nouvelle branche, comme indiqué par l'astérisque (*) sur `main`."],command:"git commit",beforeCommand:"git branch newImage"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Indiquons à Git que nous voulons nous positionner sur la branche avec ","","```","git checkout [nom]","```","","Cela nous positionne sur la nouvelle branche avant de faire un commit avec nos modifications."],afterMarkdowns:["C'est parti ! Nos modifications ont été enregistrées sur la nouvelle branche."],command:"git checkout newImage; git commit",beforeCommand:"git branch newImage"}},{type:"ModalAlert",options:{markdowns:["Ok! Vous êtes fin prêt pour faire des branches. Après la fermeture de cette fenêtre,","faites une nouvelle branche nommée `bugFix` et positionnez-vous sur cette branche."]}}]},zh_CN:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Branch",""," Git 的分支也非常轻量。它们只是简单地指向某个提交纪录 —— 仅此而已。所以许多 Git 爱好者传颂:","","```","早建分支!多用分支!","```","","这是因为即使创建再多的分支也不会造成储存或内存上的开销,并且按逻辑分解工作到不同的分支要比维护那些特别臃肿的分支简单多了。","","在将分支和提交记录结合起来后,我们会看到两者如何协作。现在只要记住使用分支其实就相当于在说:“我想基于这个提交以及它所有的 parent 提交进行新的工作。”"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["咱们通过实际操作来看看分支是什么样子的。","","接下来,我们将要创建一个到名为 `newImage` 的分支。"],command:"git branch newImage",afterMarkdowns:["看到了吗,创建分支就是这么容易!新创建的分支 `newImage` 指向的是提交记录 `C1`。"],beforeCommand:""}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["现在咱们试着往新分支里提交一些东西。点击下面的按钮"],command:"git commit",afterMarkdowns:["哎呀!为什么 `main` 分支前进了,但 `newImage` 分支还待在原地呢?!这是因为我们没有“在”这个新分支上,看到 `main` 分支上的那个星号(*)了吗?这表示当前所在的分支是 `main`。"],beforeCommand:"git branch newImage"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["现在咱们告诉 Git 我们想要切换到新的分支上","","```","git checkout ","```","","下面的命令会让我们在提交修改之前先切换到新的分支上"],command:"git checkout newImage; git commit",afterMarkdowns:["这就对了!我们的修改已经保存到新的分支里了。"],beforeCommand:"git branch newImage"}},{type:"ModalAlert",options:{markdowns:["*注意:在 Git 2.23 版本中,引入了一个名为 `git switch` 的新命令,最终会取代 `git checkout`,因为 `checkout` 作为单个命令有点超载(它承载了很多独立的功能)。","由于现在很多人还无法使用 `switch`,本次课程仍然使用 `checkout` 而不是 `switch`,",'但是如果你想尝试一下新命令,我们的应用也是支持的!并且你可以从这里学到更多关于新命令的内容。*']}},{type:"ModalAlert",options:{markdowns:["OK,你们都已经准备好使用分支了。当前窗口关闭后,","创建一个名为 `bugFix` 的新分支,然后切换过去。","","对了,有个更简洁的方式:如果你想创建一个新的分支同时切换到新创建的分支的话,可以通过 `git checkout -b ` 来实现。"]}}]},zh_TW:{childViews:[{type:"ModalAlert",options:{markdowns:["## git 的 branch",""," git 的 branch 非常不佔空間。它們只是一個指向某個 commit 的 reference,就這麼簡單。所以許多 git 的愛好者會建議:","","```","早點建立 branch!經常建立 branch!","```","","因為建立 branch 不怎麼會佔用到硬碟空間或者是記憶體,所以你可以把你目前的工作分成好幾個 branch,這比只用一個 branch 要來的好。","","同時使用 branch 和 commit 時,我們待會可以看到兩者如何配合。現在,只要記住使用 branch 其實就是在說:「我想要包含這一次的 commit 以及它的所有 parent 的 commit。」"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["舉一個例子來看看 branch 到底是什麼。","","這裡,我們建立一個名稱為 `newImage` 的新的 branch。"],command:"git branch newImage",afterMarkdowns:["看吧!這就是建立 branch 所需的操作啦! `newImage` branch 現在指向 commit `C1`。"],beforeCommand:""}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["現在讓我們這個新的 branch 做一些操作。點擊下面的按鈕。"],command:"git commit",afterMarkdowns:["太奇怪了啦! `main` branch 前進了,但 `newImage` branch 沒有前進!這是因為我們沒有「在」這個新的 branch 上,這也是為什麼星號(*)會在 `main` 上。"],beforeCommand:"git branch newImage"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["使用如下指令告訴 git 我們想要切換到新的 branch","","```","git checkout [name]","```","","這可以讓我們在 commit 之前切換到新的 branch。"],command:"git checkout newImage; git commit",afterMarkdowns:["太好了!新的 branch 已經記錄了我們的修改。"],beforeCommand:"git branch newImage"}},{type:"ModalAlert",options:{markdowns:["好啦,你已經準備好使用 branch 了。當目前的視窗關閉後,","建立一個叫 `bugFix` 的新的 branch,然後切換過去。"]}}]},ko:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git 브랜치","","깃의 브랜치도 놀랍도록 가볍습니다. 브랜치는 특정 커밋에 대한 참조(reference)에 지나지 않습니다. 이런 사실 때문에 수많은 Git 애찬론자들이 자주 이렇게 말하곤 합니다:","","```","브랜치를 서둘러서, 그리고 자주 만드세요","```","","브랜치를 많이 만들어도 메모리나 디스크 공간에 부담이 되지 않기 때문에, 여러분의 작업을 커다른 브랜치로 만들기 보다, 작은 단위로 잘게 나누는 것이 좋습니다.","",'브랜치와 커밋을 같이 쓸 때, 어떻게 두 기능이 조화를 이루는지 알아보겠습니다. 하지만 우선은, 단순히 브랜치를 "하나의 커밋과 그 부모 커밋들을 포함하는 작업 내역"이라고 기억하시면 됩니다.']}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["브랜치가 어떤 것인지 연습해보죠.","","`newImage`라는 브랜치를 살펴보겠습니다."],afterMarkdowns:["저 그림에 브랜치의 모든 것이 담겨있습니다! 브랜치 `newImage`가 커밋 `C1`를 가리킵니다"],command:"git branch newImage",beforeCommand:""}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["이 새로운 브랜치에 약간의 작업을 더해봅시다. 아래 버튼을 눌러주세요"],afterMarkdowns:["앗! `main` 브랜치가 움직이고, `newImage` 브랜치는 이동하지 않았네요! 그건 우리가 새 브랜치 위에 있지 않았었기 때문입니다. 별표(*)가 `main`에 있었던 것이죠."],command:"git commit",beforeCommand:"git branch newImage"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["아래의 명령으로 새 브랜치로 이동해 봅시다.","","```","git checkout [브랜치명]","```","","이렇게 하면 변경분을 커밋하기 전에 새 브랜치로 이동하게 됩니다."],afterMarkdowns:["이거죠! 이제 우리의 변경이 새 브랜치에 기록되었습니다!"],command:"git checkout newImage; git commit",beforeCommand:"git branch newImage"}},{type:"ModalAlert",options:{markdowns:["좋아요! 이제 직접 브랜치 작업을 연습해봅시다. 이 창을 닫고,","`bugFix`라는 새 브랜치를 만드시고, 그 브랜치로 이동해보세요"]}}]},ru_RU:{childViews:[{type:"ModalAlert",options:{markdowns:["## Ветвление в Git","","Ветки в Git, как и коммиты, невероятно легковесны. Это просто ссылки на определённый коммит — ничего более. Вот почему многие фанаты Git повторяют мантру","","```","делай ветки сразу, делай ветки часто","```","","Так как создание множества веток никак не отражается на памяти или жестком диске, удобнее и проще разбивать свою работу на много маленьких веток, чем хранить все изменения в одной огромной ветке.","","Чуть позже мы попробуем использовать ветки и коммиты, и вы увидите, как две эти возможности сочетаются. Можно сказать, что созданная ветка хранит изменения текущего коммита и всех его родителей."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Посмотрим, что такое ветки на практике","","Создадим здесь новую ветку с именем newImage."],afterMarkdowns:["Вот и всё, ребята! Ветка newImage теперь указывает на коммит C1."],command:"git branch newImage",beforeCommand:""}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Теперь попробуем сделать некоторые изменения в этой ветке. Для этого нажми кнопку ниже."],afterMarkdowns:["О-оу! Ветка main сдвинулась, тогда как ветка newImage - нет! Всё из-за того, что мы не переключились на новую ветку, а остались в старой, о чём говорит звёздочка около ветки main."],command:"git commit",beforeCommand:"git branch newImage"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Сообщим Git, что хотим выбрать ветку","","```","git checkout [name]","```","","Эта команда перенесёт нас на новую ветку в момент, когда мы ещё не коммитили изменения"],afterMarkdowns:["Вот так! Наши изменения записаны уже в новую ветку"],command:"git checkout newImage; git commit",beforeCommand:"git branch newImage"}},{type:"ModalAlert",options:{markdowns:["Ну что ж, теперь ты готов к работе с ветками. Как только это окно закроется,","создай ветку с именем bugFix и переключись на неё.","","Кстати вот тебе совет, ты можешь создать новую ветку и переключиться на неё","с помощью одной команды: ```git checkout -b [yourbranchname]```."]}}]},uk:{childViews:[{type:"ModalAlert",options:{markdowns:["## Гілки в Git","","Гілки в Git також є дивовижно легкими. Вони є просто посиланнями на конкретний коміт, нічого більше. Через це багато Git-ентузіастів повторюють мантру:","","```","роби гілки завчасно, роби гілки часто","```","","Через те, що сворення нових гілок ніяк не впливає на використання пам’яті чи дискового простору, набагато простіше розділити свою роботу на кілька логічно зв’язаних по функціоналу гілок, ніж працювати з величезними гілками.","","Коли ми почнемо використовувати гілки та коміти, ми побачимо, як вони поєднуються між собою. Але зараз просто запам’ятай, що гілка просто зберігає роботу теперішнього коміту і всіх його попередників."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Давайте на практиці подивимось, як виглядають гілки в Git.","","Зараз ми створимо нову гілку `newImage`."],afterMarkdowns:["Ось і все, що треба знати про гілки. Гілка `newImage` тепер посилається на коміт `C1`."],command:"git branch newImage",beforeCommand:""}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Давайте спробуємо додати якусь інформацію до цієї нової гілки. Натисни кнопку внизу."],afterMarkdowns:['От халепа! Гілка `main` просунулася вперед, але гілка `newImage` — ні! Це тому, що ми були не "на новій гілці". Через це зірочка (*) була поруч з `main`.'],command:"git commit",beforeCommand:"git branch newImage"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Давайте вкажемо Git, що ми хочемо перейти на нову гілку за допомогою","","```","git checkout [ім’я]","```","","Ця команда перекине нас на нову гілку до того, як ми закомітимо наші зміни."],afterMarkdowns:["Ось і все! Наші зміни були записані в нову гілку."],command:"git checkout newImage; git commit",beforeCommand:"git branch newImage"}},{type:"ModalAlert",options:{markdowns:["Тепер ти готовий до створення гілок. Як тільки це вікно пропаде, ","зроби нову гілку з назвою `bugFix` та перейди на неї."]}}]},vi:{childViews:[{type:"ModalAlert",options:{markdowns:["## Nhánh Git","","Nhánh trong Git cũng nhẹ đến không ngờ. Chúng chỉ đơn giản là các con trỏ đến commit -- không hơn. Đó là lý do các con chiên Git hay niệm chú:","","```","rẽ nhánh sớm, rẽ nhánh thường xuyên","```","","Bởi vì chẳng tốn bao nhiêu bộ nhớ cho việc rẽ nhánh cả và nó dễ dàng phân chia công việc hơn là có một cái nhánh to tổ chảng.","",'Khi bạn trộn lẫn commit và nhánh, bạn sẽ thấy chúng kết hợp với nhau thế nào. Hãy nhớ về cơ bản nhánh muốn nói "Tôi muốn thành quả trong commit này và tất cả cha ông của nó"']}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Nào hãy xem nhánh trong Git hoạt động thế nào.","","Giờ chúng ta tạo một nhánh mới tên là `newImage`."],afterMarkdowns:["Đó, rẽ nhánh là thế đó! Nhánh `newImage` giờ đã tham chiếu đến commit `C1`."],command:"git branch newImage",beforeCommand:""}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Nào cùng thử thêm nội dung vào nhánh mới này nào. Hãy bấm nút bên dưới."],afterMarkdowns:['Ồ không! Nhánh `main` đã di chuyển nhưng nhánh `newImage` thì không! Đó là do ta không "nằm trên" nhánh mới, đó là tại sao dấu hoa thị (*) nằm trên nhánh `main`.'],command:"git commit",beforeCommand:"git branch newImage"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Nào cùng bảo Git chuyển ta sang nhánh khác với lệnh","","```","git checkout ","```","","Lệnh này sẽ chuyển ta sang nhánh mới trước khi commit."],afterMarkdowns:["Đó! Thay đổi của ta đã được lưu sang nhánh mới."],command:"git checkout newImage; git commit",beforeCommand:"git branch newImage"}},{type:"ModalAlert",options:{markdowns:["*Note: Ở phiên bản Git 2.23, một câu lệnh mới được giới thiệu mang tên `git switch`, mục đích là để thay thế cho lệnh `git checkout`, ","vì lệnh cũ có quá nhiều tham số, mỗi tham số truyền vào sẽ thực hiện nhiều thứ khác nhau. Bài học này vẫn sẽ sử dụng ","`checkout` thay vì `switch`, vì lệnh `switch` hiện vẫn đang trong giai đoạn thử nghiệm và cú pháp có thể thay đổi trong tương lai. ","Mặc dù vậy, bạn vẫn có thể thử dùng câu lệnh `switch` ở ứng dụng này, và ",'tìm hiểu thêm tại đây.* ']}},{type:"ModalAlert",options:{markdowns:["Được rồi! Bạn đã sẵn sàng để tập rẽ nhánh rồi. Khi cửa sổ này đóng lại,","tạo một nhánh mới tên là `bugFix` và chuyển sang nhánh đó.","","Tiện thể, có đường tắt đấy: nếu bạn muốn tạo nhánh mới ","VÀ đồng thời chuyển sang luôn, bạn chỉ cần ","gõ `git checkout -b [yourbranchname]`."]}}]},sl_SI:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Branches","","Tudi branchi v Gitu so izredno majhni. To so preprosto kazalci na določen commit -- nič več. Zato veliko Git navdušencev ponavlja:","","```","branchaj zgodaj in branchaj pogosto","```","","Ker ustvarjanje večih branchev ne porablja dodatnega spomina ali prostora, je lažje logično razdeliti svoje delo kot imeti velike branche.","",'Ko začnemo mešati branche in commite, bomo videli kako se te dve funkcionalnosti dopolnjujeta. Za zdaj si zapomni samo to, da branch ubistvu pomeni "Hočem vključiti delo tega commita in commite vseh njegovih staršev."']}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Poglejmo kako branchi izgledajo v praksi.","","Tu bomo ustvarili nov branch imenovan `newImage`."],afterMarkdowns:["Tako, to je vsa umetnost branchanja! Branch poimenovan `newImage` se sedaj nanaša na commit `C1`."],command:"git branch newImage",beforeCommand:""}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Poizkusimo dodati nekaj dela na ta nov branch. Pristisni gumb spodaj."],afterMarkdowns:['O ne! `main` branch se je premaknil ampak `newImage` branch se pa ni! To je zato, ker nismo bili "na" novem branchu, kot smo lahko videli z označeno zvezdico (*) na `main` branchu.'],command:"git commit",beforeCommand:"git branch newImage"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Povejmo gitu, da želimo checkoutat branch z","","```","git checkout ","```","","To nas bo postavilo na nov branch pred commitanjem sprememb."],afterMarkdowns:["Tako je! Naše sprememebe so zabeležene na novem branchu."],command:"git checkout newImage; git commit",beforeCommand:"git branch newImage"}},{type:"ModalAlert",options:{markdowns:["Ok! Pripravljen si, da začneš branchat. Ko se to okno zapre, ","ustvari nov branch z imenom `bugFix` in preklopi na ta branch.","","Mimogrede, tu je bližnjica: če hočeš narediti nov ","branch IN ga hkrati checkoutati, lahko enostavno ","natipkaš `git checkout -b [imeTvojegaBrancha]`."]}}]},pl:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Branch","","Gałęzie w Gicie zajmują niezwykle mało zasobów. Są po prostu wskaźnikami do konkretnego commita. Dlatego, wielu entuzjastów Gita przestrzega mantry:","","```","twórz gałęzie wcześnie i często","```","","W polskim nazewnictwie stosuje się wymiennie nazwę branch oraz gałąź. Natomiast commit (zatwierdzenie) stosuje się tylko w różnych odmienionych formach, np. commita, commitów itp.","","Tworzenie wielu gałęzi nie wiąże się z żadnymi dodatkowymi kosztami, więc warto dzielić swoją pracę na pojedyńcze funkcjonalności i bug-fixy.","",'Kiedy zaczniemy mieszać gałęzie i commity, zobaczymy, jak łączą się te dwie funkcje. Na razie jednak pamiętaj, że branch zasadniczo mówi: "Chcę uwzględnić pracę tego commita oraz wszystkie poprzednie commity".']}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Zobaczmy, jak wyglądają gałęzie w praktyce.","","Tutaj utworzymy nową gałąź o nazwie `myBranch`."],afterMarkdowns:["To wszystko o rozgałęzianiu! Gałąź `myBranch` odnosi się teraz do commita `C1`."],command:"git branch myBranch",beforeCommand:""}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Spróbujmy trochę popracować nad tą nową gałęzią.\nKliknij przycisk poniżej."],afterMarkdowns:['O nie! Gałąź `main` uległa zmianie, a gałąź `myBranch` nie! To dlatego, że nie byliśmy "w" nowej gałęzi, co podpowiada gwiazdka (*) przy `main`'],command:"git commit",beforeCommand:"git branch myBranch"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Powiedzmy gitowi, z którą gałęzią chcemy pracować","","```","git checkout ","```","","Spowoduje to przeniesienie nas do nowej gałęzi przed wprowadzeniem zmian."],afterMarkdowns:["Gotowe! Nasze zmiany zostały zarejestrowane w nowej gałęzi."],command:"git checkout myBranch; git commit",beforeCommand:"git branch myBranch"}},{type:"ModalAlert",options:{markdowns:["*Uwaga: w wersji 2.23 Gita zostało wprowadzono nowe polecenie o nazwie \n`git switch`, które zastępuje polecenie `git checkout`, ","które jest nieco przeciążone (robi wiele oddzielnych rzeczy zależnie od argumentów). Tutaj będziemy omawiać tylko","`git checkout`, ponieważ wciąż jest to najczęściej stosowane polecenie.",'Mimo to, możesz wypróbować funkcjonalność `switch` sam. Aplikacja jest na to gotowa! Dowiedz się wiecej.* ']}},{type:"ModalAlert",options:{markdowns:["Okej, teraz możesz samodzielnie zacząć tworzyć gałęzie.","Po zamknięciu tego okna stwórz nową gałąź o nazwie `bugFix` i przełącz się na nią.","","Przy okazji, oto skrót: jeśli chcesz stworzyć","nową gałąź ORAZ się na nią przełączyć,","użyj `git checkout -b `."]}}]},ta_IN:{childViews:[{type:"ModalAlert",options:{markdowns:["## கிட் கிளைகள்","","கிட் கிளைகள் மிகவும் இலகுவானவை. அவை ஒரு குரிப்பிட்ட கமிட்டினை சுட்டி காட்டும் ஒரு இணைப்பு குறியீடு மட்டும்தான். இதனால்தான் பல கிட் ஆர்வலர்கள் உச்சரிக்கும் மந்திரம்:","","```","மாற்றம் செய்யும் முன்பே கிளையை உருவாக்குங்ள், அடிக்கடி தேவை என்றால் மேலும் கிளைகளை உருவாக்குங்கள்.","```","","ஏன் என்றால் புதிய கிளைகளை உருவாகுவது சேமிப்புபலுவோ / நினைவக மேலான்மை பலுவோ முற்றிலும் இல்லை, பெரிய பல்வேரு மற்றங்களை கொண்ட பலுமிக்க கிளைகளைக் காட்டிலும் உங்கள் வேலையை தர்க்கமாக சிரு சிரு கிளைகளக பிரிப்பது எளிது.","",'கிளைகள் மற்றும் கமிட்டுகளை கொண்ட கலவை உருவாக்கும் போது இவை இரண்டின் இனக்கத்தினை விவாதிப்போம். தற்ப்போது, கிளை உருவாக்குதல் என்பதை "இந்த கமிட்டுடன் இதர்க்கு முன் இருந்த அனைத்து கமிட்டுகளையும் தொகுக்க விரும்புகிறேன்." என்பதாக கருதலாம்.']}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["இப்போது நாம் ஒரு கிளை எப்படி இருக்கும் என்பதை பயிற்ச்சி செய்து பார்க்கலாம்.","","இங்கு `newImage` என்ற பதிய கிளை ஒன்றை உருவாக்குவோம்."],afterMarkdowns:["அவ்வலவு தான், `newImage` என்ற புதிய கிளை தயாராகி விட்டது மேலும் அது `C1` என்ற கிட்டை மூலமாக குறிக்கும்படி உள்ளது."],command:"git branch newImage",beforeCommand:""}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["இப்போது அதில் சில மாற்றங்களை இணைப்போம். கீலே உள்ள பித்தேனை அமுக்கவும்."],afterMarkdowns:['அடடா! `newImage`க்கு மாறாக `main` கிளை முன்னேறி உள்ளது! ஏன் என்றால் நாம் "அந்த" புதிய கிளையில் இல்ல, அதனால்தான் நட்சத்திரக் குறி (*) `main` மேலுள்ளது.'],command:"git commit",beforeCommand:"git branch newImage"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["இப்போது நாம் கிட்டை கிளை தாவ சொல்லுவோம்.","","```","git checkout ","```","","புதிய மாற்றங்களை கமிட் செய்யும் முன்பு இது நம்மை புதிய கிளைக்கு மாற்றும்."],afterMarkdowns:["அவ்வலவுதான்! நமது மாற்றங்கள் புதிய கிளையின் பதிவு செய்ய பட்டுள்ளது."],command:"git checkout newImage; git commit",beforeCommand:"git branch newImage"}},{type:"ModalAlert",options:{markdowns:["*குறிப்பு: கிட் 2.23 முதல், `git switch` என்ற புதிய கட்டளை `git checkout`க்கு மாற்றாக அறிமுகம் செய்ய பட்டுள்ளது, ","ஏன் என்றால் அது ஒரே கட்டளையில் அதிகப்படியான வேளைகளை செய்கிறது (சொல்லப்போனால் அது கொத்தாக பல தனிப்பட்ட செயல்களை செய்கின்றது). ","இன்னு பலர் `switch` பயன்படுத்த வழி இல்லாததால் இங்குள்ள பாடங்கள் இன்னும் `switch`க்கு பதில் `checkout` பயன்படுத்து கின்றது. ",'இருப்பினும் இந்த செயலியில் நீங்கள் `switch`ஐ முயற்சிக்க விரும்பினால் செய்யலாம்! மேலும் விவரங்களுக்கு.* ']}},{type:"ModalAlert",options:{markdowns:["சரி! நீங்கள் இப்போது கிட் கிளை உருவாக்க தயார். இந்த திரை மூடப்பட்டவுடன்,","`bugFix` எனும் கிளை உருவாக்கி அந்த கிளைக்கு மாறவும்.","","சொல்லபோனால், இதற்க்கு ஒரு குறுக்குவழி உள்ளது: ஒரு புதிய கிளையை உருவாக்கி ","உடனெ அதற்க்கு மாற, நீங்கள்","`git checkout -b [yourbranchname]` என கட்டளையிட்டால் போதும்."]}}]},it_IT:{childViews:[{type:"ModalAlert",options:{markdowns:["## Rami Git","","Anche i rami in Git sono incredibilmente leggeri. Sono semplicemente puntatori a uno specifico commit -- nulla di più. Questo è il motivo per cui gli appassionati di Git predicano:","","```","ramifica presto, e ramifica spesso","```","","Poiché non c'è un sovraccarico della memoria nel fare molti rami, è più semplice suddividere il lavoro piuttosto che avere rami enormi.","",'Quando inizieremo a mischiare rami e commit, vedremo come queste caratteristiche si combinano. Per ora, però, ricorda che un ramo essenzialmente dice "Voglio includere il lavoro di questo commit e tutti i commit del genitore".']}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Vediamo nella pratica cosa sono i rami.","","Qui creeremo un nuovo ramo di nome `newImage`."],afterMarkdowns:["Ecco, questa è la divisione in rami! Il ramo `newImage` ora punta al commit `C1`."],command:"git branch newImage",beforeCommand:""}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Proviamo ad aggiungere un po' di lavoro su questo nuovo ramo. Premi il pulsante qua sotto."],afterMarkdowns:["Oh no! Il ramo `main` si è spostato ma il ramo `newImage` no! Questo perché non eravamo sul nuovo ramo, infatti l'asterisco (*) era su `main`."],command:"git commit",beforeCommand:"git branch newImage"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Diciamo a Git che vogliamo selezionare il ramo con","","```","git checkout ","```","","Questo ci metterà sul nuovo ramo prima di fare un nuovo commit."],afterMarkdowns:["Ecco qua! I cambiamenti sono stati memorizzati sul nuovo ramo."],command:"git checkout newImage; git commit",beforeCommand:"git branch newImage"}},{type:"ModalAlert",options:{markdowns:["*Nota: In Git versione 2.23, è stato introdotto un nuovo comando, `git switch`, per sostituire `git checkout`, ","che è sovraccaricato di funzionalità (fa un sacco di cose diverse). Queste lezioni usano comunque ","`checkout` invece che `switch` perché molti non hanno ancora accesso a `switch`, ma quest'app supporta comunque il comando ",'se sei curioso di provarlo! Potete scoprire di piu qui.* ']}},{type:"ModalAlert",options:{markdowns:["Ok! Ora sei pronto a lavorare con i rami. Dopo che questa finestra si chiude,","crea un nuovo ramo `bugFix` e passa su quel ramo.","","Comunque, c'è una scorciatoia: se vuoi creare un nuovo ","ramo E selezionarlo in un solo passaggio, puoi semplicemente ","digitare `git checkout -b [yourbranchname]`."]}}]},tr_TR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Branch'leri","","Git'teki branch'ler (dallar), son derece hafif ve sadece belirli bir commit'e işaret eden işaretçilerdir - fazlası değil. -- İşte bu nedenle birçok Git tutkunu şunu söyler:","","```","erken branch'le, sık sık branchle","```","","Git'te birçok branch oluşturmanın depolama/bellek açısından herhangi bir fazlalığı yoktur, bu nedenle işinizi mantıklı bir şekilde bölmek daha kolay ve akıllıca olacaktır.","","Branch'leri ve commit'leri birleştirmeye başladığımızda, bu iki özelliğin nasıl bir araya geldiğini göreceğiz. Şimdilik sadece unutmayın ki bir branch, temelde \"Bu commit'te yaptığım çalımanının ve diğer tüm üst düzey commit'leri dahil etmek istiyorum.\" der."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Pratikte branch'ler nasıl işliyor görelim.","","Burada `newImage` adında bir branch oluşturuyoruz."],afterMarkdowns:["İşte bu kadar şimdi `newImage` branch'i `C1` commit'ine işaret ediyor."],command:"git branch newImage",beforeCommand:""}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Şimdi bu branch'te biraz çalışma yapalım, aşağıdaki düğmeye tıklayın."],afterMarkdowns:["Oh hayır! `main` branch'i hareket etti ama `newImage` branch'i etmedi! Bu, yeni branch \"üzerinde\" olmadığımız için meydana geldi, ki (*) işaretinin `main` üzerinde olması da bunu göstermektedir."],command:"git commit",beforeCommand:"git branch newImage"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Git'e aşağıdaki komut ile başka bir branch'e geçmek istediğimizi söyleyelim","","```","git checkout ","```","","Bu değişikliklerimizi commit'lemeden önce bizi yeni branch'e yönlendirecek."],afterMarkdowns:["İşte bu! Değişikliklerimiz yeni branch'te kaydedildi."],command:"git checkout newImage; git commit",beforeCommand:"git branch newImage"}},{type:"ModalAlert",options:{markdowns:["*Not: Git'in 2.23 sürümünde, `git checkout`'un yerine geçmek üzere `git switch` adında yeni bir komut tanıtıldı, ","Bu komut, bazı argümanlara bağlı olarak bir dizi farklı işlem yapabilmektedir. ","Buradaki dersler hala `switch` yerine `checkout` kullanılarak anlatılacaktır, çünkü switch komutu hala deneysel kabul ediliyor ve sözdizisi ","gelecekte değişebilir. Bununla birlikte, bu uygulamada yeni `switch` komutunu deneyebilir ve ayrıca daha fazla bilgi için buraya bakabilirsiniz. ",'git switch.* ']}},{type:"ModalAlert",options:{markdowns:["Hazırsınız! Şimdi branch oluşturmaya başlayabilirsiniz. Bu pencere kapanır kapanmaz,","`bugFix` adında yeni bir branch oluşturun ve bu branch'e geçin.","","Bu arada, size bir kısayol: Eğer yeni bir branch oluşturmak ve ","aynı anda bu branch'e geçmek isterseniz, sadece ","`git checkout -b [yourbranchname]` komutunu kullanabilirsiniz."]}}]}}}},{}],123:[function(e,t,o){o.level={name:{en_US:"Introduction to Git Commits",de_DE:"Einführung in Git Commits",es_AR:"Introducción a los commits de Git",es_MX:"Introducción a los commits de Git",es_ES:"Introducción a los commits de Git",pt_BR:"Introdução aos commits no Git",gl:"Introducción ós commits de Git",fr_FR:"Introduction aux commits avec Git",ja:"Gitのコミット",ko:"Git 커밋 소개",zh_CN:"Git Commit",zh_TW:"介紹 git commit ",ru_RU:"Знакомство с Git Commit ",uk:"Знайомство з комітами в Git",vi:"Giới thiệu về Git Commit",sl_SI:"Uvod v Git Commit",pl:"Wprowadzenie do commitów Gita",it_IT:"Introduzione ai commit in Git",ta_IN:"கிட் கமிட்கள் ஒரு அறிமுகம்",tr_TR:"Git Commit'e Giriş"},goalTreeString:'{"branches":{"main":{"target":"C3","id":"main"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C2"],"id":"C3"}},"HEAD":{"target":"main","id":"HEAD"}}',solutionCommand:"git commit;git commit",startTree:'{"branches":{"main":{"target":"C1","id":"main"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"main","id":"HEAD"}}',hint:{en_US:"Just type in 'git commit' twice to finish!",de_DE:"Gib einfach zweimal 'git commit' ein um den Level abzuschließen",es_AR:"¡Simplemente tipeá 'git commit' dos veces para terminar!",es_MX:"¡Simplemente escribe 'git commit' dos veces para terminar!",es_ES:"¡Simplemente escribe 'git commit' dos veces para terminar!",pt_BR:"Simplesmente digite 'git commit' duas vezes para concluir!",gl:"Simplemente escribe 'git commit' dúas veces para terminar.",fr_FR:"Il suffit de saisir 'git commit' deux fois pour réussir !",zh_CN:"执行两次 'git commit' 就可以过关了!",zh_TW:"輸入兩次 'git commit' 就可以完成!",ja:"'git commit'コマンドを2回打てば完成!",ko:"'git commit'이라고 두 번 치세요!",ru_RU:"Попробуй дважды выполнить команду 'git commit' ;)",uk:"Спробуй двічі виконати команду 'git commit' ;)",vi:"Đơn giản là cứ gõ 'git commit' 2 lần",sl_SI:"Preprosto dvakrat vpiši 'git commit' in zaključi!",pl:"Aby zakończyć, wystarczy dwukrotnie wpisać 'git commit'!",it_IT:"Digita 'git commit' due volte per finire!",ta_IN:"இந்த நிலையை நிரைவு செய்ய 'git commit' என்று இரண்டு முறை தட்டச்சு செய்க!",tr_TR:"Bölümü bitirmek için sadece iki kere 'git commit' yazmanız yeterlidir."},disabledMap:{"git revert":!0},startDialog:{en_US:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Commits","A commit in a git repository records a snapshot of all the (tracked) files in your directory. It's like a giant copy and paste, but even better!","",'Git wants to keep commits as lightweight as possible though, so it doesn\'t just blindly copy the entire directory every time you commit. It can (when possible) compress a commit as a set of changes, or a "delta", from one version of the repository to the next.',"","Git also maintains a history of which commits were made when. That's why most commits have ancestor commits above them -- we designate this with arrows in our visualization. Maintaining history is great for everyone working on the project!","","It's a lot to take in, but for now you can think of commits as snapshots of the project. Commits are very lightweight and switching between them is wicked fast!"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Let's see what this looks like in practice. On the right we have a visualization of a (small) git repository. There are two commits right now -- the first initial commit, `C0`, and one commit after that `C1` that might have some meaningful changes.","","Hit the button below to make a new commit."],afterMarkdowns:["There we go! Awesome. We just made changes to the repository and saved them as a commit. The commit we just made has a parent, `C1`, which references which commit it was based off of."],command:"git commit",beforeCommand:""}},{type:"ModalAlert",options:{markdowns:["Go ahead and try it out on your own! After this window closes, make two commits to complete the level."]}}]},de_DE:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Commits","Ein Commit in einem Git-Repository speichert eine Abbildung aller Dateien in deinem Projektverzeichnis. Es ist wie ein riesiges Kopieren und Einfügen, nur besser.","","Allerdings will Git die Commits so schlank wie möglich halten, also kopiert es nicht einfach stur das ganze Verzeichnis jedes Mal wenn du committest. Es kann (wenn möglich) Commits als Menge von Änderungen zusammenpacken, von einer Version des Repositorys zur nächsten.","","Außerdem führt Git ein Protokoll darüber, welche Commits wann gemacht wurden, und welcher auf welchen folgt. Deshalb werden die Commits hier mit ihrem Vorgänger über sich gezeigt -- wir verwenden Pfeile zur Darstellung der Beziehung. Dieses Protokoll zu haben ist eine tolle Sache für jeden, der an einem Projekt arbeitet.","","Das war jetzt eine Menge Neues, aber vorerst kannst du dir Commits einfach als Abbildungen des Projekts vorstellen. Commits sind sehr ressourcenschonend, und zwischen ihnen wechseln geht superschnell!"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Mal sehen wie das in der Praxis ist. Rechts sehen wir ein (kleines) Git-Repository. Es gibt aktuell zwei Commits -- den initialen, `C0`, und den danach, `C1`, der irgendwelche Änderungen enthält.","","Klick die Schaltfläche unten um einen neuen Commit zu erzeugen:"],afterMarkdowns:["Fertig. Klasse! Wir haben gerade Änderungen gemacht und als Commit im Repository gespeichert. Der Commit, den wir gerade gemacht haben, hat den Vorgänger `C1`; der verweist wiederum auf den Commit, auf dem er basiert: `C0`."],command:"git commit",beforeCommand:""}},{type:"ModalAlert",options:{markdowns:["Probier das Committen gleich mal aus! Mach zwei Commits um den Level abzuschließen."]}}]},ja:{childViews:[{type:"ModalAlert",options:{markdowns:["## Gitのコミット","コミットによって、ディレクトリ中の全てのファイルのスナップショットを記録します。巨大なコピー&ペーストのようなものですが、実際にはそれよりずっと良いものです。","","Gitではコミットを可能な限り軽量に保つために、コミット毎にフォルダ全体をコピーしません。実際にはGitは、コミットを直前のバージョンから一つ先のバージョンへの「変更の固まり」あるいは「差分」として記録します。後で出てきますが、ほとんどのコミットが親を持っているのはそういう理由からです。","","リポジトリをcloneする時には、内部動作としてはコミットの差分をたどって全ての変更を取得しています。cloneした時に以下のような表示が出るのは:","","`resolving deltas`(訳:差分を解決中)","","このためです。","","もっと説明したいところですが、しばらくはコミットをスナップショットのようなものだと考えてください。コミットは非常に軽量であり、コミット間の移動も非常に高速です。"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["これがどういうことか、動きを見ていきましょう。図には(小さな)gitリポジトリが描かれています。コミットが2つあります -- `C0`という名前の初回のコミットがあり、`C1`という名前の次のコミットが続きます。これは何か意味のある変更かもしれません。","","下のボタンを押下して新しいコミットを作ってみましょう。"],afterMarkdowns:["できました! 良いですね。いまリポジトリに新しい変更が加えられ、1つのコミットとして保存されました。作成したコミットには親がいて、このコミットの出発点となった`C1`を指しています。"],command:"git commit",beforeCommand:""}},{type:"ModalAlert",options:{markdowns:["実際に手を動かしてみましょう。このウィンドウを閉じたら、試しに2回コミットをしてみましょう。"]}}]},es_AR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Commits de Git","Un commit en un repositorio git registra un snapshot de todos los archivos en tu directorio. Es como un _gran_ copy&paste, ¡pero incluso mejor!","",'Git pretende mantener los commits tan livianos como sea posible, por lo que no copia ciegamente el directorio completo cada vez que commiteás. Puede (cuando sea posible) comprimir un commit como un conjunto de cambios (o un _"delta"_) entre una versión de tu repositorio y la siguiente.',"","Git mantiene, también, un historial de qué commits se hicieron cuándo. Es por eso que la mayoría de los commits tienen commits ancestros arriba suyo -- designamos esto con flechas en nuestra visualización. ¡Mantener el historial es genial para todos los que trabajan en el proyecto!","","Hay un montón en lo que ahondar, pero por ahora podés pensar en los commits como snapshots de tu proyecto. Los commits son muy livianos, y ¡cambiar de uno a otro es terriblemente rápido!"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Veamos cómo se ve esto en la práctica. A la derecha tenemos una visualización de un (pequeño) repositorio git. Hay dos commits ahora: el commit inicial, `C0`, y un commit que lo sigue, `C1`, que podría tener algunos cambios interesantes.","","Dale al botón de abajo para hacer un nuevo commit."],afterMarkdowns:["¡Ahí va! Increíble. Acabamos de hacer cambios al repositorio y los guardamos como un commit. El commit que acabamos de crear tiene un padre, `C1`, que referencia al commit en que se basó este."],command:"git commit",beforeCommand:""}},{type:"ModalAlert",options:{markdowns:["¡Dale, intentalo vos ahora! Cuando se cierre esta ventana, hacé dos commits para completar el nivel."]}}]},es_MX:{childViews:[{type:"ModalAlert",options:{markdowns:["## Commits de Git","Un commit en un repositorio git registra un snapshot de todos los archivos en tu directorio. Es como un _gran_ copy&paste, ¡pero incluso mejor!","",'Git pretende mantener los commits tan livianos como sea posible, por lo que no copia ciegamente el directorio completo cada vez que haces commit. Puede (cuando sea posible) comprimir un commit como un conjunto de cambios (o un _"delta"_) entre una versión de tu repositorio y la siguiente.',"","Git mantiene, también, un historial de qué commits se hicieron cuándo. Es por eso que la mayoría de los commits tienen commits ancestros arriba suyo -- designamos esto con flechas en nuestra visualización. ¡Mantener el historial es genial para todos los que trabajan en el proyecto!","","Hay un montón en lo que ahondar, pero por ahora puedes pensar en los commits como snapshots de tu proyecto. Los commits son muy livianos, y ¡cambiar de uno a otro es terriblemente rápido!"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Veamos cómo se ve esto en la práctica. A la derecha tenemos una visualización de un (pequeño) repositorio git. Hay dos commits ahora: el commit inicial, `C0`, y un commit que lo sigue, `C1`, que podría tener algunos cambios interesantes.","","Dale al botón de abajo para hacer un nuevo commit."],afterMarkdowns:["¡Ahí va! Increíble. Acabamos de hacer cambios al repositorio y los guardamos como un commit. El commit que acabamos de crear tiene un padre, `C1`, que referencia al commit en que se basó este."],command:"git commit",beforeCommand:""}},{type:"ModalAlert",options:{markdowns:["¡Vamos, inténtalo ahora! Cuando se cierre esta ventana, haz dos commits para completar el nivel."]}}]},es_ES:{childViews:[{type:"ModalAlert",options:{markdowns:["## Commits de Git","Un commit en un repositorio git registra un snapshot de todos los archivos en tu directorio. Es como un _gran_ copy&paste, ¡pero incluso mejor!","",'Git pretende mantener los commits tan livianos como sea posible, por lo que no copia ciegamente el directorio completo cada vez que haces un commit. Puede (cuando es posible) comprimir un commit como un conjunto de cambios (o un _"delta"_) entre una versión de tu repositorio y la siguiente.',"","Git mantiene, también, un historial de qué commits se hicieron y cuándo. Es por eso que la mayoría de los commits tienen commits ancestros encima -- designamos esto con flechas en nuestra visualización. ¡Mantener el historial es genial para todos los que trabajan en el proyecto!","","Hay un montón en lo que ahondar, pero por ahora puedes pensar en los commits como snapshots de tu proyecto. Los commits son muy livianos, y ¡cambiar de uno a otro es terriblemente rápido!"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Veamos cómo se ve esto en la práctica. A la derecha tenemos una visualización de un (pequeño) repositorio git. Hay dos commits: el commit inicial, `C0`, y un commit que lo sigue, `C1`, que podría tener algunos cambios interesantes.","","Dale al botón de abajo para crear un nuevo commit."],afterMarkdowns:["¡Allá va! Increíble. Acabamos de hacer cambios al repositorio y los guardamos como un commit. El commit que acabamos de crear tiene un padre, `C1`, que referencia al commit en el que se basó este."],command:"git commit",beforeCommand:""}},{type:"ModalAlert",options:{markdowns:["¡Venga, inténtalo ahora! Cuando se cierre esta ventana, crea dos commits para completar el nivel."]}}]},pt_BR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Commits no Git","Um commit em um repositório git registra uma fotografia (snapshot) de todos os arquivos no seu diretório. É como um _grande_ copy&paste, mas ainda melhor!","",'O Git tem por objetivo manter os commits tão leves quanto possível, de forma que ele não copia cegamente o diretório completo toda vez que você commita. Ele pode (quando possível) comprimir um commit como um conjunto de mudanças (ou um _"delta"_) entre uma versão do seu repositório e a seguinte.',"","O Git também mantém um histórico de quando ocorreu cada commit. É por isso que a maioria dos commits tem ancestrais acima de si -- que indicamos usando setas na nossa visualização. Manter a história é ótimo para todos que trabalham no projeto!","","Há muito para aprender, mas por enquanto pense nos commits como snapshots do seu projeto. Os commits são muito leves, e mudar de um para outro é extremamente rápido!"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Vejamos o que isso significa na prática. À direita, temos uma visualização de um (pequeno) repositório git. Há dois commits no momento: o commit inicial, `C0`, e um commit que se segue, `C1`, que poderia conter algumas mudanças interessantes.","","Clique no botão abaixo para fazer um novo commit."],afterMarkdowns:["Aí vamos nós! Incrível. Acabamos de fazer mudanças no repositório e as guardamos como um commit. O commit que acabamos de criar tem um pai, `C1`, que referencia em qual commit ele se baseou."],command:"git commit",beforeCommand:""}},{type:"ModalAlert",options:{markdowns:["Vamos lá, tente você agora! Quando esta janela se fechar, faça dois commits para completar o nível."]}}]},gl:{childViews:[{type:"ModalAlert",options:{markdowns:["## Commits en Git","Un commit nun repositorio de git rexistra unha fotografía (snapshot) de tódolos arquivos no seu directorio. É coma un copy&paste xigante, ¡pero todavía mellor!","",'Git quere gardar os commits o máis pequenos posíbel, por iso non copia directamente o directorio completo sempre que fas un commit. El pode (cando é posíbel) comprimir nun commit un conxunto de cambios (ou un _"delta"_) entre unha versión do teu respositorio e o seguinte.',"","Git tamén garda un histórico de cando se fixo cada cambio. Por iso a maioría dos commits teñen ancestros enriba deles, e nos indicámolos con frechas na nosa visualización. ¡Manter a historia é óptimo para tódolos que traballan no proxecto!","","Hai moito que aprender, pero por agora podes pensar que os commits son fotos do teu proxecto. Os commits son liviáns, e cambiar dun para o outro é extremadamente rápido!"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Vexamos o que iso significa na práctica. Á dereita, temos unha visualización dun (pequeno) repositorio de git. Hai dous commits por agora: o commit inicial, `C0`, e un commit que lle segue, `C1`, que podería ter algúns cambios interesantes.","","Pincha no botón de abaixo para facer un novo commit."],afterMarkdowns:["¡Alá imos! Mi ma!. Fixemos cambios no repositorio e gardámolos nun commit. O commit que creaches ten un pai, `C1`, que é unha referencia do commit no que se basea."],command:"git commit",beforeCommand:""}},{type:"ModalAlert",options:{markdowns:["Alá imos. ¡Inténtao ti agora! Cando se peche a ventá, fai dous commits para completar o nivel."]}}]},fr_FR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Commits Git","Un commit dans un dépôt Git (repository) enregistre une image (snapshot) de tous les fichiers du répertoire. Comme un Copier-Coller géant, mais en bien mieux !","","Git fait en sorte que les commits soient aussi légers que possible donc il ne recopie pas tout le répertoire à chaque commit. En fait, Git n'enregistre que l'ensemble des changements (\"delta\") depuis la version précédente du dépôt. C'est pour cette raison que la plupart des commits ont un commit parent -- ainsi que nous le verrons plus tard.","",'Pour cloner un dépôt, il faut décompresser ("résoudre") tous ces deltas. C\'est la raison pour laquelle la commande écrit :',"","`resolving deltas`","","lorsque l'on clone un dépôt.","","C'est beaucoup à absorber, mais pour l'instant vous pouvez considérer les commits comme des snapshots du projet. Les commits sont très légers et passer de l'un à l'autre est très rapide !"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Voyons à quoi cela ressemble en pratique. Sur la droite, on peut visualiser un (petit) dépôt Git. Il y a pour l'instant deux commits -- le premier commit initial, `C0`, et un commit suivant `C1` qui aurait des changements significatifs.","","Appuyez sur le bouton ci-dessous pour faire un nouveau commit."],afterMarkdowns:["C'est parti ! Super. Nous venons de faire des modifications sur le dépôt et de sauvegarder celles-ci dans un commit. Ce commit que nous venons de faire a un parent, `C1`, qui référence le commit sur lequel il est basé."],command:"git commit",beforeCommand:""}},{type:"ModalAlert",options:{markdowns:["Allez-y et essayez par vous-même ! Après la fermeture de cette fenêtre, faites deux commits pour terminer ce niveau."]}}]},ko:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git 커밋","커밋은 Git 저장소에 여러분의 디렉토리에 있는 모든 파일에 대한 스냅샷을 기록하는 것입니다. 디렉토리 전체를 복사하여 붙여넣는것과 유사하지만, 훨씬 유용한 방법입니다!","",'Git은 가능한 한 커밋을 가볍게 유지하고자 하기때문에, 커밋할 때마다 디렉토리 전체를 복사하진 않습니다. 각 커밋은 저장소의 이전 버전과 다음 버전의 변경내역("delta"라고도 함)을 저장합니다. 그래서 대부분의 커밋이 그 커밋 위의 부모 커밋을 가리킵니다. -- 다음 화면에서 곧 살펴보게 될 것입니다.',"","저장소를 복제(clone)하려면 모든 변경분(delta)를 풀어내야 하는데, 이 때문에 명령행 결과로 아래 문구를 볼 수 있습니다.","","`resolving deltas`","","알아야 할 것이 꽤 많습니다만, 일단은 커밋을 프로젝트의 스냅샷들로 생각하면 충분합니다. 커밋은 매우 가볍고 커밋 사이의 전환도 매우 빠르다는 것을 기억해주세요!"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["연습할 때 어떻게 보이는지 확인해봅시다. 오른쪽 화면에 git 저장소를 그림으로 표현해 놓았습니다. 현재 두번 커밋한 상태입니다 -- 첫번째 커밋으로 `C0`, 그 다음으로 `C1`이라는 어떤 의미있는 변화가 있는 커밋이 있습니다.","","아래 버튼을 눌러 새로운 커밋을 만들어보세요."],afterMarkdowns:["이렇게 보입니다! 멋지죠. 우리는 방금 저장소 내용을 변경해서 하나의 커밋으로 저장했습니다. 방금 만든 커밋은 부모는 `C1`이고, 어떤 커밋을 기반으로 변경된 것인지를 가리킵니다."],command:"git commit",beforeCommand:""}},{type:"ModalAlert",options:{markdowns:["계속해서 직접 한번 해보세요! 이 창을 닫고, 커밋을 두 번 하면 다음 레벨로 넘어갑니다."]}}]},zh_CN:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Commit","Git 仓库中的提交记录保存的是你的目录下所有文件的快照,就像是把整个目录复制,然后再粘贴一样,但比复制粘贴优雅许多!","","Git 希望提交记录尽可能地轻量,因此在你每次进行提交时,它并不会盲目地复制整个目录。条件允许的情况下,它会将当前版本与仓库中的上一个版本进行对比,并把所有的差异打包到一起作为一个提交记录。","","Git 还保存了提交的历史记录。这也是为什么大多数提交记录的上面都有 parent 节点的原因 —— 我们会在图示中用箭头来表示这种关系。对于项目组的成员来说,维护提交历史对大家都有好处。","","关于提交记录太深入的东西咱们就不再继续探讨了,现在你可以把提交记录看作是项目的快照。提交记录非常轻量,可以快速地在这些提交记录之间切换!"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["咱们来实际操作一下,看看提交记录是怎样的。右边展示了一个(小型)Git 代码库。当前有两个提交记录 —— 初始提交 `C0` 和其后可能包含某些有用修改的提交 `C1`。","","点击下面的按钮创建一个新的提交记录。"],afterMarkdowns:["好了!非常棒!我们刚才修改了代码库,并把这些修改保存成了一个提交记录 `C2`。`C2` 的 parent 节点是 `C1`, parent 节点是当前提交中变更的基础。"],command:"git commit",beforeCommand:""}},{type:"ModalAlert",options:{markdowns:["接下来自己试一试吧。当前窗口关闭后,完成两次提交就可以过关!"]}}]},zh_TW:{childViews:[{type:"ModalAlert",options:{markdowns:["## git commit","一個 commit 在 git repo 中會記錄目錄下所有文件的快照。感覺像是大量的複製和貼上,但 git 的速度更快!","",'git 希望 commit 儘可能地不占空間,所以每次進行 commit 的時候,它不會單純地複製整個目錄。實際上它把每次 commit 視為從目前的版本到下一個版本的變化量,或者說一個 "(delta)"。',"","git 會保存 commit 的歷史紀錄,所以,絕大部分的 commit 的上面都會有 parent commit,在我們的圖形表示中,箭頭方向表示從 parent commit 到所對應的 child commit,保存這樣子的一個歷史紀錄是非常有用的。","","要學的東西有很多,但現在你可以把 commit 當作是當下的 project 的快照。commit 不佔空間且可以快速切換!"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["在實例中學習 commit。右邊是一個(小)git repository。當前有兩個 commit,一開始的 commit `C0` 以及 `C1` 這一個 commit 來表示之後可能的一些修改。","","點擊下面的按鈕生成新的 commit。"],command:"git commit",afterMarkdowns:["看吧!很厲害!我們對於文件做了一些修改,並且把這些修改表示成一個 commit。剛剛做的 commit `C2` 有一個 parent commit `C1`,代表此次修改是從那裡過來的。"],beforeCommand:""}},{type:"ModalAlert",options:{markdowns:["接下來你可以隨便測試。當目前的視窗關閉之後,輸入兩次 commit 就可以過關!"]}}]},ru_RU:{childViews:[{type:"ModalAlert",options:{markdowns:["## Коммиты в GIT","Коммит в git репозитории хранит снимок всех файлов в директории. Почти как огромная копия, только лучше","","Git пытается быть лёгким и быстрым насколько это только возможно, так что он не просто слепо копирует всю директорию каждый раз, а ужимает (когда это возможно) коммит в набор изменений или «дельту» между текущей версией и предыдущей.","","Также Git хранит всю историю о том, когда какой коммит был сделан. Вот почему большинство коммитов имеют предков - мы указываем на предков стрелками при визуализации. Поддержка истории коммитов более чем важна для всех, кто работает над проектом!","","Можно ещё долго рассказывать о коммитах, но для простоты будем считать их полными снимками проекта. Коммиты очень легки, так что переключение между ними происходит предельно быстро!"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Посмотрим, как это выглядит на практике. Справа расположена визуализация небольшого git репозитория. Сейчас в нём два коммита: первый, исходный коммит С0 и один коммит С1 после него, содержащий изменения.","","Нажми на кнопку, чтобы совершить коммит"],afterMarkdowns:["Отлично. Мы только что внесли изменения в репозиторий и сохранили их как коммит. У коммита, который мы только что сделали, есть родитель, С1, который указывает на предыдущий коммит."],command:"git commit",beforeCommand:""}},{type:"ModalAlert",options:{markdowns:["Пора попробовать! После того, как это окно закроется, сделай два коммита, чтобы пройти этот уровень."]}}]},uk:{childViews:[{type:"ModalAlert",options:{markdowns:["## Коміти в Git","Коміт в Git репозиторії зберігає моментальну копію всіх файлів в поточній директорії. Це як гігантська копіпаста, тільки краще.","",'Git намагається зберігати коміти якнайпростіше й ефективніше, тому він не просто копіює всю директорію при кожному коміті. Він може стиснути коміт в набір правок чи "дельту" між двома версіями репозиторію.',"","Git також зберігає історію коли і ким був створений той чи інший коміт. Тому більшість комітів мають комітів-предків, що знаходяться вище в ієрархії — ми це зображуємо стрілочками в нашій візуалізації. Історія — це необхідна річ для кожного, хто працює з конкретним проектом.","","Тут є багато над чим подумати, але наразі ти можеш уявляти коміти як моментальні знімки проекту. Коміти майже невагомі й перемикання між ними дуже швидке."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Давай подивимось, як це виглядає на практиці. Справа зображена візуалізація маленького Git-репозиторію. Наразі ми бачимо два коміти: початковий коміт `C0`, та наступний коміт `C1`, який містить якісь змістовні зміни.","","Натисни кнопку нижче, щоб створити новий коміт."],afterMarkdowns:["Чудово. Ми щойно зробили деякі зміни з репозиторієм і зберегли їх як новий коміт. Цей коміт має предка `C1`, який вказує на коміт, з якого він був створений."],command:"git commit",beforeCommand:""}},{type:"ModalAlert",options:{markdowns:["Спробуй сам. Після того як це вікно закриється, зроби два коміти, щоб пройти цей рівень."]}}]},vi:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Commits","Một commit trong một Git repository (kho chứa) lưu trữ một ảnh chụp của tất cả các file trong thư mục của bạn. Như kiểu copy và paste cỡ bự, thậm chí còn tốt hơn thế!","",'Thế nhưng Git muốn giữ cho các commit nhẹ hết mức có thể, cho nên Git không copy tất cả thư mục một cách mù quáng mỗi khi bạn commit. Nó có thể (khi khả dĩ) nén commit như một tập hợp các thay đổi, hay là một "bản so sánh", giữa một phiên bản kho chứa Git với phiên bản tiếp theo.',"","Đồng thời Git cũng lưu trữ lịch sử commit nào được tạo ra lúc nào. Đó là tại sao hầu hết các commit có commit tổ tiên phía trên nó -- chúng tôi đã hình tượng hóa mối quan hệ này bằng các mũi tên. Trong cộng tác nhóm thì việc gìn giữ lịch sử là rất có ích!","","Có vẻ là hơi nhiều lý thuyết rồi, bây giờ bạn chỉ cần hiểu các commit là các lát cắt của dự án. Các commit rất nhẹ nên việc chuyển qua lại giữa chúng thì nhanh vô cùng!"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Thử thực hành chút nào. Ở bên phải chúng ta có mô tả một kho Git (nhỏ). Hiện tại đang có 2 commit, một là commit khởi nguyên `C0`, và một commit sau đó `C1` có thể đã có một vài thay đổi.","","Bấm nút bên dưới để tạo một commit mới."],afterMarkdowns:["Đúng rồi! Tuyệt vời. Bạn vừa tạo thay đổi cho kho chứa và lưu vào commit. Cái commit bạn vừa tạo nó có cha, là `C1` đấy, có thể hiểu commit vừa được tạo dựa trên commit cũ hơn là C1."],command:"git commit",beforeCommand:""}},{type:"ModalAlert",options:{markdowns:["Nào bây giờ thì thử tự làm bài tập nào! Sau khi đóng cửa sổ này, tạo ra 2 commit để hoàn thành cấp độ."]}}]},sl_SI:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Commits","Commit v git repozitoriju zabeleži stanje vseh datotek v tvoji mapi. Deluje kot tak velik 'Izreži in Prilepi', vendar še bolje!","",'Git hoče commite ohraniti majhne kot se le da, tako da ne skopira vsakič kar vseh datotek ob commitu. Lahko (kadar je možno) stisne commit le kot množico sprememb oziroma kot "delto" sprememb med eno in drugo različico v repozitoriju.',"","Git vodi tudi zgodovino o tem, kdaj je bil kateri commit narejen. Zato ima večina commitov nad seboj svoje prednike -- to je v vizualizaciji predstavljeno s puščicami. Vzdrževanje zgodovine je uporabno za vse, ki delajo na projektu!","","Veliko je za dojeti na začetku, ampak za zdaj si lahko predstavljaš commite kot posnetek projekta v določenem času. Commiti so zelo majhni in prehajanje med njimi je noro hitro!"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Poglejmo kako to izgleda v praksi. Na desni imamo vizualizacijo (majhnega) git repozitorija. Trenutno imamo dva commita -- prvi začetni commit, `C0`, in še en commit za tem, `C1`, ki ima lahko pomembne spremembe.","","Pritisni gumb spodaj, da narediš nov commit."],afterMarkdowns:["Tako ja! Super. Pravkar smo naredili spremembe v repozitoriju in jih shranili kot commit. Commit, ki smo ga naredili ima starša, `C1`, ki nam pove iz katerega commita smo izhajali."],command:"git commit",beforeCommand:""}},{type:"ModalAlert",options:{markdowns:["Čas je, da poizkusiš sam! Ko se to okno zapre, naredi dva commita, da dokončaš to stopnjo."]}}]},pl:{childViews:[{type:"ModalAlert",options:{markdowns:["## Commity Gita","`commit` w repozytorium Gita rejestruje migawkę wszystkich (śledzonych) plików w twoim katalogu. To jak gigantyczne kopiowanie i wklejanie, ale jeszcze lepsze!","",'Git stara się, aby commity były tak lekkie, jak to tylko możliwe, więc nie kopiuje na ślepo całego katalogu za każdym razem, gdy zatwierdzasz zmiany. Możesz (jeśli to możliwe) skompresować commita jako zestaw zmian (lub _"delta"_) między jedną wersją w repozytorium a następną.',"","Git przechowuje również całą historię, kiedy dokonano każdego zatwierdzenia. Dlatego większość commitów ma na sobie zmiany przodków -- oznaczamy to strzałkami w naszej wizualizacji. Zachowanie historii to świetna funkcja dla wszystkich, którzy pracują nad projektem!","",'To sporo do zapamiętania, ale na razie możesz myśleć o commitach jako "rewizjach" albo migawkach projektu. Są bardzo lekkie, a przełączanie się między nimi jest niesamowicie szybkie!']}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Zobaczmy, jak to wygląda w praktyce. Po prawej stronie mamy wizualizację (małego) repozytorium Gita. Istnieją dwa zatwierdzenia:\n początkowy commit `C0`, a następnie po nim commit `C1`, który może mieć kilka interesujących zmian.","","Kliknij przycisk poniżej, aby dodać nowego commita."],afterMarkdowns:["Gotowe! Niesamowite. Właśnie wprowadziliśmy zmiany w repozytorium i zapisaliśmy je jako commita. Commit, który właśnie wykonaliśmy, ma rodzica `C1`, który odnosi się do commitu, na którym się opierał."],command:"git commit",beforeCommand:""}},{type:"ModalAlert",options:{markdowns:["Śmiało, wypróbuj to! Po zamknięciu tego okna wykonaj dwa commity, aby ukończyć poziom."]}}]},ta_IN:{childViews:[{type:"ModalAlert",options:{markdowns:["## கிட் கமிட்கள்","கிட் கமிட் உங்கள் கோப்பகத்தில் உள்ள கண்காணிக்கப்பட்ட (tracked) கோப்புகளை கிட் களஞ்சியத்தில் ஒரு நகலாக பதிவு செய்கின்றது. ஆனால் இது முழு நகல் எடுத்து ஒட்டுவதை விட சிறந்தது!","",'கிட் கமிட்களை முடிந்தவரை இலகுவாக இருக்கும்படி செய்கின்றது, எனவே நீங்கள் ஒவ்வொரு முறை கமிட் செய்யும் போதும் கிட் கோப்பகங்களை கண்மூடித்தனமாக நகலெடுக்காது. அது (முடிந்தால்) கமிட்களை சுருக்கப்பட்ட மாற்றங்களின் தொகுப்பாகவோ, அல்லது களஞ்சியத்தில் ஏற்க்கனவே உள்ள பதிப்பின் "வேறுபாட்டை" மட்டும் கண்க்கிட்டோ சேமிக்க செயிகிறது.',"","மேலும் கிட் கமிட்கள் எப்போது செய்யப்படுகிறது என்பதன் வரலாற்றையும் பராமரிக்கிறது. அதனால் தான் பெரும்பான்மையான கமிட்கள் முன்பு பதிவிட்ட கமிட்களை பின் தொடருகின்றன -- நமது வரைபடங்கள் அதனை அம்பு குறியீடுகளாக காட்டு கின்றன. வரலாற்றைப் பராமரிப்பது கணினிதிட்டத்தில் பணிபுரியும் அனைவருக்கும் உதவியாக இருக்கும்!","","புரிந்து கொள்ள நிறைய இருக்கிறது, ஆனால் இப்போதைக்கு நீங்கள் கமிட்களை திட்டத்தின் பிரதியாக நினைக்கலாம். கமிட்டுகள் மிகவும் இலகுவானவை மேலும் அவற்றுக்கிடையே மாறுவது மிகவும் எளிமையானது!"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["இது நடைமுறையில் எப்படி இருக்கும் என்று பார்ப்போம். இங்கு வலதுபுறத்தில் ஒரு (சிறிய) கிட் களஞ்சியத்தின் காட்சிப்படுத்தல் உள்ளது. இப்போது அதில் இரண்டு கமிட்கள் உள்ளன -- முதல் கமிட், `C0`, மற்றும் மேலும் இரண்டாவதாக `C1` அதில் சில பயண்னுள்ள மாற்றங்கள் இருக்கலாம்.","","புதிய கமிட் செய்ய கீழே உள்ள பொத்தானை அழுத்தவும்."],afterMarkdowns:["அவ்வலவுதான்! அருமை. நாம் களஞ்சியத்தில் மாற்றங்களைச் செய்து கமிட்டாக சேமித்துள்ளோம். இப்போது செய்த கமிட்டிர்க்கு `C1` மூலமாக உள்ளது, அது அதனுடைய மூலத்தை தொடர்ந்து உள்ளது."],command:"git commit",beforeCommand:""}},{type:"ModalAlert",options:{markdowns:["இப்போது இந்த திரை மூடிய பிறகு நீங்கள் முயற்சி செய்யுங்கள்!, இந்த நிலையை நிரைவு செய்ய இரண்டு கமிட்டுகள் செய்யுங்கள்."]}}]},it_IT:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Commits","Un commit in git memorizza un'instantanea di tutti i file (tracciati) della cartella di lavoro. È come un enorme copia-incolla, ma migliore!","",'Git conserva i commit nel modo più leggero possibile, perciò non copia ciecamente l\'intera cartella per ogni commit. Può (ove possibile) comprimere un commit come un insieme di cambiamenti, o "delta", da una versione alla successiva del repository.',"","Git memorizza anche la storia di tutti i commit effettuati. Questo è il motivo per cui molti commit hanno genitori sopra di essi -- questo viene rappresentato con delle frecce nelle nostre spiegazioni. Conoscere la storia è utilissimo per tutti quelli che collaborano ad un progetto!","","C'è tanto da sapere, ma per ora pensa ai commit come a delle instantanee del progetto. I commit sono leggerissimi e si può passare da uno all'altro in un battibaleno!"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Vediamolo in pratica. Sulla destra abbiamo l'immagine di un (piccolo) repository git. Ci sono due commit -- il primo commit, `C0`, e un altro dopo, `C1`, che potrebbe avere modifiche importanti.","","Premi il pulsante qua sotto per eseguire un nuovo commit."],afterMarkdowns:["Ecco qua! Fantastico. Abbiamo modificato il repository e salvato con un commit. Il commit che abbiamo creato ha un genitore, `C1`, che ci indica su chi è basato il nostro commit."],command:"git commit",beforeCommand:""}},{type:"ModalAlert",options:{markdowns:["Vai avanti e prova da solo! Dopo che questa finestra si chiude, crea due commit per completare il livello."]}}]},tr_TR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Commit'leri","Git commit'leri, projenizin tüm (izlenen) dosyalarının anlık bir fotoğrafını çeker. Düşünün ki bu, büyük bir kopyala-yapıştır işlemi gibi, ama işte burada daha eğlenceli bir olay var!","","Git, commit'leri hafif tutmak ister, bu yüzden her seferinde sırf her şeyi körü körüne kopyalamaz. Mümkün olduğunda, bir commit'i değişikliklerin seti olarak sıkıştırabilir veya bir sürümün bir sonraki sürüme olan farkını, yani bir \"delta\"yı yakalayabilir.","","Git aynı zamanda hangi commit'lerin ne zaman yapıldığını da kayıt altında tutar. İşte bu yüzden çoğu commit, üstünde atası olan başka commit'lerle gelir - bu görselde oklarla belirtilir. Tarih tutmak, projede çalışan herkes için harika bir şeydir!","","İlk bakışta karmaşık gelebilir, ama şimdilik commit'leri projenizin anlık fotoğrafları gibi düşünün. Commit'ler hafiftir ve aralarında çok hızlı geçiş yapılabilir!"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Bakalım bu pratikte nasıl görünüyor. Sağ tarafta, (küçük) bir git deposunun görselleştirmesini görüyorsunuz. Şu anda iki commit var - ilk başlangıç commit'i, `C0`, ve ondan sonra gelen anlamlı değişiklikler içerebilecek bir commit olan `C1`.","","Yeni bir commit için aşağıdaki düğmeye tıklayın."],afterMarkdowns:["İşte bu! Harika. Depoya değişiklikler yaptık ve onları bir commit olarak kaydettik. Yeni yaptığımız commit'in bir atası var, `C1`, bu da commit'imizin ne üzerine inşa edildiğini gösteren bir referans içerir."],command:"git commit",beforeCommand:""}},{type:"ModalAlert",options:{markdowns:["Şimdi sıra sende! Bu pencere kapanır kapanmaz, seviyeyi tamamlamak için iki commit yap."]}}]}}}},{}],124:[function(e,t,o){o.level={goalTreeString:'{"branches":{"main":{"target":"C4","id":"main"},"bugFix":{"target":"C2","id":"bugFix"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C1"],"id":"C3"},"C4":{"parents":["C3","C2"],"id":"C4"}},"HEAD":{"target":"main","id":"HEAD"}}',solutionCommand:"git checkout -b bugFix;git commit;git checkout main;git commit;git merge bugFix",name:{en_US:"Merging in Git",de_DE:"Mergen in Git",es_AR:"Mergeando en Git",es_MX:"Haciendo merge en Git",es_ES:"Haciendo merge en Git",pt_BR:"Merge no Git",gl:"Merge en Git",fr_FR:"Faire des 'merge' (fusions de branches) avec Git",ko:"Git에서 브랜치 합치기(Merge)",ja:"ブランチとマージ",zh_CN:"Git Merge",zh_TW:"git 中的 merge",ru_RU:"Слияния веток в Git",uk:"Злиття гілок в Git",vi:"Gộp nhánh trong Git",sl_SI:"Merganje v Gitu",pl:"Merge w Gicie",it_IT:"Fusione in Git",ta_IN:"கிட்டில் இணைத்தல்",tr_TR:"Git'te Merge işlemleri"},hint:{en_US:"Remember to commit in the order specified (bugFix before main)",de_DE:"Denk dran in der angegebenen Reihenfolge zu committen (erst bugFix, dann main)",ja:"指示された順番でコミットすること(mainの前にbugFixで)",es_AR:"Acordate de commitear en el orden especificado (bugFix antes de main)",es_MX:"Acuérdate de hacer commit en el orden especificado (bugFix antes de main)",es_ES:"Acuérdate de hacer commit en el orden especificado (bugFix antes de main)",pt_BR:"Lembre-se de commitar na ordem especificada (bugFix antes de main)",gl:"Lembrate de facer commit na orde específica (bugFix antes de main)",fr_FR:"Pensez à faire des commits dans l'ordre indiqué (bugFix avant main)",zh_CN:"要按目标窗口中指定的顺序进行提交(bugFix 先于 main)",zh_TW:"記住按指定的順序 commit(bugFix 比 main 優先)",ko:"말씀드린 순서대로 커밋해주세요 (bugFix에 먼저 커밋하고 main에 커밋)",ru_RU:"Не забудь делать коммиты в правильном порядке (сначала bugFix, потом main)",uk:"Не забудь робити коміти в правильному порядку (спочатку bugFix, а вже потім main)",vi:"Nhớ là commit theo đúng thứ tự (bugFix trước main)",sl_SI:"Zapomni si, da je potrebno commitati v pravilnem vrstnem redu (bugfix pred main)",pl:"Pamiętaj, aby commitować w określonej kolejności (bugFix przed main)",it_IT:"Ricorda di effettuare i commit nell'ordine specificato (bugFix prima di main)",ta_IN:"bugFix முன் main என்ற கொடுக்கப்பட்ட வரிசையில் கட்டலை இடுவதை கருத்தில் கொள்க",tr_TR:"Belirlenen sırada commit etmeyi unutmayın (main'den önce bugFix)"},disabledMap:{"git revert":!0},startDialog:{en_US:{childViews:[{type:"ModalAlert",options:{markdowns:["## Branches and Merging","","Great! We now know how to commit and branch. Now we need to learn some kind of way of combining the work from two different branches together. This will allow us to branch off, develop a new feature, and then combine it back in.","",'The first method to combine work that we will examine is `git merge`. Merging in Git creates a special commit that has two unique parents. A commit with two parents essentially means "I want to include all the work from this parent over here and this one over here, *and* the set of all their parents."',"","It's easier with visuals, let's check it out in the next view."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Here we have two branches; each has one commit that's unique. This means that neither branch includes the entire set of \"work\" in the repository that we have done. Let's fix that with merge.","","We will `merge` the branch `bugFix` into `main`."],afterMarkdowns:["Woah! See that? First of all, `main` now points to a commit that has two parents. If you follow the arrows up the commit tree from `main`, you will hit every commit along the way to the root. This means that `main` contains all the work in the repository now.","","Also, see how the colors of the commits changed? To help with learning, I have included some color coordination. Each branch has a unique color. Each commit turns a color that is the blended combination of all the branches that contain that commit.","","So here we see that the `main` branch color is blended into all the commits, but the `bugFix` color is not. Let's fix that..."],command:"git merge bugFix",beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Let's merge `main` into `bugFix`:"],afterMarkdowns:["Since `bugFix` was an ancestor of `main`, git didn't have to do any work; it simply just moved `bugFix` to the same commit `main` was attached to.","","Now all the commits are the same color, which means each branch contains all the work in the repository! Woohoo!"],command:"git checkout bugFix; git merge main",beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit; git merge bugFix"}},{type:"ModalAlert",options:{markdowns:["To complete this level, do the following steps:","","* Make a new branch called `bugFix`","* Checkout the `bugFix` branch with `git checkout bugFix`","* Commit once","* Go back to `main` with `git checkout`","* Commit another time","* Merge the branch `bugFix` into `main` with `git merge`","",'*Remember, you can always re-display this dialog with "objective"!*']}}]},de_DE:{childViews:[{type:"ModalAlert",options:{markdowns:["## Branches und Mergen","","Super! Wir wissen jetzt, wie man committet und einen Branch anlegt. Jetzt müssen wir nur noch rauskriegen, wie man die Arbeit, die in verschiedenen Branches steckt, zusammenführen kann. Dann können wir einen neuen Branch erstellen, darin ein neues Feature entwickeln, und das dann in den ursprünglichen Branch integrieren.","",'Die einfachste Methode, mit der man Branches zusammenführen kann, ist `git merge`. Das Mergen erzeugt in git einen speziellen Commit, der zwei Vorgänger hat. Ein solcher Commit bedeutet im Prinzip "ich möchte alle Arbeit von dem Vorgänger hier und dem dort *und* allen ihren jeweiligen Vorgängern miteinander kombinieren".',"","Grafisch dargestellt ist es einfacher zu verstehen, lass es uns mal ansehen."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Hier haben wir zwei Branches; jeder besteht jeweils aus einem eigenen Commit. Das bedeutet, dass keiner der beiden Branches alle Inhalte des gesamten Repositorys kennt. Das werden wir mit einem Merge ändern.","","Wir werden den Branch `bugFix` in `main` integrieren."],afterMarkdowns:["Wow! Hast du das gesehen? Zunächst mal zeigt `main` jetzt auf einen Commit mit zwei Vorgängern. Wenn du den beiden Pfeilen immer weiter folgst, kommst du an jedem Commit im Repository vorbei. Das heißt `main` enthält jetzt alles, was es im Repository gibt.","","Siehst du außerdem wie sich die Farben der Commits verändert haben? Um die Vorgänge zu verdeutlichen hab ich etwas Farbe ins Spiel gebracht. Jeder Branch hat seine eindeutige Farbe. Jeder Merge Commit bekommt als Farbe eine Mischung aus den Farben seiner Vorgänger.","","Wir sehen also, dass die Farbe des Branch `main` in alle Commits gemischt wurde, die von `bugFix` aber nicht. Ändern wir das ..."],command:"git merge bugFix",beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Mergen wir `main` in `bugFix`:"],afterMarkdowns:["Da `bugFix` ein Vorgänger von `main` war, musste git hier kaum etwas tun; es verschiebt `bugFix` einfach auf den Commit, auf den auch `main` zeigt.","","Jetzt haben alle Commits dieselbe Farbe, das heißt jeder Branch enthält die Informationen des gesamten Repositorys! Juhu!"],command:"git checkout bugFix; git merge main",beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit; git merge bugFix"}},{type:"ModalAlert",options:{markdowns:["Führe folgendes aus, um diesen Level zu schaffen:","","* Lege einen neuen Branch `bugFix` an","* Checke `bugFix` aus mittels `git checkout bugFix`","* Mach einen Commit","* Geh mit `git checkout` zum `main` zurück","* Mach noch einen Commit","* Merge den Branch `bugFix` in `main` mit `git merge`","","*Denk dran, du kannst diese Meldung mit dem Befehl `objective` so oft anzeigen, wie du willst!*"]}}]},ja:{childViews:[{type:"ModalAlert",options:{markdowns:["## ブランチとマージ","","いい調子ですね。これまでにコミットとブランチについて学びました。そろそろ2つのブランチを1つにまとめるやり方について見ていきましょう。これができれば新しい機能の開発のために新しいブランチを切って、開発が終わったら変更を元のブランチへ統合することができるようになります。","","はじめに紹介するのは、`git merge`を使ったマージのやり方です。mergeコマンドによって、2つの独立した親を持つ特別なコミットを作ることができます。2つの親を持つコミットが持つ意味とは、「全く別々の場所にいる2つの親(*かつ*、それらの親の祖先全て)が持つ全ての変更を含んでいますよ」ということです。","","見てみた方が早いので、次の画面で確認してみましょう。"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["それぞれ別のコミットを指している2つのブランチがあります。変更が別々のブランチに分散していて統合されていないケースです。これをマージで1つにまとめてみましょう。","","`bugFix`ブランチを`main`ブランチにマージしてみます。"],afterMarkdowns:["わあ、見ましたか?まず初めに、`main`ブランチが2つのコミットを親に持つ新しいコミットを指してますね。`main`から親をたどっていくと、最も古いコミットにたどり着くまでに全てのコミットを含んでいる様が確認できます。これで、全ての変更を含む`main`が完成しました。","","色がどう変わったかにも注目して下さい。学習を助けるために、ブランチ毎に色をつけています。それぞれのブランチは自分の色を持っていて、どのブランチから派生して出てくるか次第でコミットごとの色が決まります。","","今回のコミットには`main`ブランチの色が使われました。しかし`bugFix`ブランチの色がまだ変わってないようなので、これを変えてみましょう。"],command:"git merge bugFix",beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["`main`ブランチを`bugFix`ブランチにマージしてみます。"],afterMarkdowns:["`bugFix`ブランチは`main`ブランチの派生元だったので、gitは実際大したことはしていません。`bugFix`ブランチを指していたポインタを`main`が指していたコミットへと移動させただけです。","","これで全てのコミットが同じ色になりました。つまり、リポジトリの中の全ての変更をそれぞれのブランチが持ったことになります。やったね!"],command:"git checkout bugFix; git merge main",beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit; git merge bugFix"}},{type:"ModalAlert",options:{markdowns:["以下の作業で理解度の確認をしてみましょう:","","* `bugFix`という名前で新しいブランチを切る","* `git checkout bugFix`コマンドで`bugFix`ブランチに切り替える","* 一回だけコミット","* `git checkout`で`main`へ戻る","* もう1回コミットする","* `git merge`コマンドを使って、`bugFix`ブランチを`main`ブランチへとマージする","",'*注:"objective"コマンドでこのヘルプにいつでも戻ってこれます*']}}]},es_AR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Mergeando ramas","","¡Genial! Ya sabemos cómo commitear y cómo crear ramas. Ahora tenemos que aprender algún modo de unificar el trabajo de dos ramas diferentes. Esto nos va a permitir abrir una nueva rama de desarrollo, implementar alguna nueva funcionalidad, y después unirla de nuevo con el trabajo principal.","",'El primer método para combinarlas que vamos a explorar es `git merge`. Mergear en Git crea un commit especial que tiene dos padres diferentes. Un commit con dos padres esencialmente significa "Quiero incluir todo el trabajo de este padre de acá y este otro padre de acá, *y* del conjunto de todos sus ancestros"',"","Es más simple visualizarlo, veámoslo a continuación"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:['Acá tenemos dos ramas, y cada una tiene un commit que le es único. Esto significa que ninguna de las ramas incluye "todo el trabajo" que hay en nuestro repositorio. Hagamos un merge para solucionar eso.',"","Vamos a `merge`ar la rama `bugFix` a `main`."],afterMarkdowns:["¡Wooow! ¿Viste eso? Primero que nada, `main` ahora apunta a un commit que tiene dos padres. Si seguís las flechas por el árbol de commits empezando desde `main` vas a cruzarte con cada commit del repositorio hasta llegar a la raíz. Esto significa que `main` ahora contiene todo el trabajo que hay en el repositorio.","","Además, ¿viste cómo cambiaron los colores de los commits? Para ayudar al aprendizaje, incluí algunas convenciones de colores. Cada rama tiene un color propio. Cada commmit se vuelve del color resultante de mezclar los colores de todas las ramas que lo contienen.","","Así que acá vemos que el color de la rama `main` participa en la mezcla de todos los commits, pero que el de `bugFix` no. Arreglemos eso..."],command:"git merge bugFix",beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Mergeemos `main` a `bugFix`:"],afterMarkdowns:["Como `bugFix` era un ancestro de `main`, git no tuvo que hacer ningún trabajo; simplemente movió `bugFix` al mismo commit al que estaba anexado `main`.","","Ahora todos los commits son del mismo color, lo que significa que cada rama contiene todo el trabajo que hay en el repositorio. ¡Wiii!"],command:"git checkout bugFix; git merge main",beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit; git merge bugFix"}},{type:"ModalAlert",options:{markdowns:["Para completar este nivel, seguí estos pasos:","","* Creá una nueva rama, llamada `bugFix`","* Checkouteá la rama `bugFix` usando `git checkout bugFix`","* Hacé un commit","* Volvé a `main` con `git checkout`","* Hacé otro commit","* Mergeá la rama `bugFix` a `main` usando `git merge`","",'*Acordate: siempre podés volver a ver este mensaje tipeando "objective"!*']}}]},es_MX:{childViews:[{type:"ModalAlert",options:{markdowns:["## Mezclando ramas","","¡Genial! Ya sabemos cómo hacer commit y cómo crear ramas. Ahora tenemos que aprender algún modo de unificar el trabajo de dos ramas diferentes. Esto nos va a permitir abrir una nueva rama de desarrollo, implementar alguna nueva funcionalidad y después unirla de nuevo con el trabajo principal.","",'El primer método para combinarlas que vamos a explorar es `git merge`. Mezclar en Git crea un commit especial que tiene dos padres diferentes. Un commit con dos padres esencialmente significa "Quiero incluir todo el trabajo de este padre de acá y este otro padre de acá, *y* del conjunto de todos sus ancestros"',"","Es más simple visualizarlo, veámoslo a continuación"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:['Acá tenemos dos ramas y cada una tiene un commit único. Esto significa que ninguna de las ramas incluye "todo el trabajo" que hay en nuestro repositorio. Hagamos una mezcla para solucionar eso.',"","Vamos a `merge`(mezclar) la rama `bugFix` a `main`."],afterMarkdowns:["¡Wooow! ¿Viste eso? Primero que nada, `main` ahora apunta a un commit que tiene dos padres. Si sigues las flechas por el árbol de commits empezando desde `main` vas a cruzarte con cada commit del repositorio hasta llegar a la raíz. Esto significa que `main` ahora contiene todo el trabajo que hay en el repositorio.","","Además, ¿Viste cómo cambiaron los colores de los commits? Para ayudar al aprendizaje, incluí algunas convenciones de colores. Cada rama tiene un color propio. Cada commmit se vuelve del color resultante de mezclar los colores de todas las ramas que lo contienen.","","Así que acá vemos que el color de la rama `main` participa en la mezcla de todos los commits, pero que el de `bugFix` no. Arreglemos eso..."],command:"git merge bugFix",beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Merge (mezclemos) `main` a `bugFix`:"],afterMarkdowns:["Como `bugFix` era un ancestro de `main`, git no tuvo que hacer ningún trabajo; simplemente movió `bugFix` al mismo commit al que estaba anexado `main`.","","Ahora todos los commits son del mismo color, lo que significa que cada rama contiene todo el trabajo que hay en el repositorio. ¡Súper!"],command:"git checkout bugFix; git merge main",beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit; git merge bugFix"}},{type:"ModalAlert",options:{markdowns:["Para completar este nivel, sigue estos pasos:","","* Crea una nueva rama, llamada `bugFix`","* Cambia a la rama `bugFix` usando `git checkout bugFix`","* Haz un commit","* Vuelve a `main` con `git checkout`","* Haz otro commit","* Haz un merge de la rama `bugFix` a `main` usando `git merge`","",'*Recuerda: siempre puedes volver a ver este mensaje usando el comando "objective"!*']}}]},es_ES:{childViews:[{type:"ModalAlert",options:{markdowns:["## Haciendo merge en ramas","","¡Genial! Ya sabemos cómo crear un commit y cómo crear ramas. Ahora tenemos que aprender algún modo de unificar el trabajo de dos ramas diferentes. Esto nos va a permitir abrir una nueva rama de desarrollo, implementar alguna nueva funcionalidad, y después unirla de nuevo con el trabajo principal.","",'El primer método para combinarlas que vamos a explorar es `git merge`. Hacer merge en Git crea un commit especial que tiene dos padres diferentes. Un commit con dos padres escencialmente significa "Quiero incluir todo el trabajo de estos dos padres , *y* del conjunto de todos sus ancestros"',"","Es más simple visualizarlo, veámoslo a continuación"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:['Aquí tenemos dos ramas, y cada una tiene un commit que le es único. Esto significa que ninguna de las ramas incluye "todo el trabajo" que hay en nuestro repositorio. Hagamos un merge para solucionar eso.',"","Vamos a `merge`ar la rama `bugFix` a `main`."],afterMarkdowns:["¡Caramba! ¿Viste eso? Antes de nada, `main` ahora apunta a un commit que tiene dos padres. Si sigues las flechas por el árbol de commits empezando desde `main` vas a cruzarte con cada commit del repositorio hasta llegar a la raíz. Esto significa que `main` ahora contiene todo el trabajo que hay en el repositorio.","","Además, ¿viste cómo cambiaron los colores de los commits? Para ayudar al aprendizaje, he incluido algunas convenciones de colores. Cada rama tiene un color propio. Cada commmit se vuelve del color resultante de mezclar los colores de todas las ramas que lo contienen.","","Así que aquí vemos que el color de la rama `main` participa en la mezcla de todos los commits, pero que el de `bugFix` no. Arreglemos eso..."],command:"git merge bugFix",beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Hagamos merge de `main` a `bugFix`:"],afterMarkdowns:["Como `bugFix` era un ancestro de `main`, git no tuvo que hacer ningún trabajo; simplemente movió `bugFix` al mismo commit al que estaba anexado `main`.","","Ahora todos los commits son del mismo color, lo que significa que cada rama contiene todo el trabajo que hay en el repositorio. ¡Genial!"],command:"git checkout bugFix; git merge main",beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit; git merge bugFix"}},{type:"ModalAlert",options:{markdowns:["Para completar este nivel, sigue estos pasos:","","* Crea una nueva rama, llamada `bugFix`","* Haz checkout de la rama `bugFix` usando `git checkout bugFix`","* Crea un commit","* Vuelve a `main` con `git checkout`","* Crea otro commit","* Haz merge de la rama `bugFix` a `main` usando `git merge`","",'*Recuerda: siempre puedes volver a ver este mensaje escribiendo "objective"!*']}}]},pt_BR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Branches e Merge","","Ótimo! Agora sabemos como commitar e criar ramos. Agora precisamos aprender uma forma de combinar o trabalho de dois ramos diferentes. Isso nos permitirá ramificar, desenvolver um novo recurso, e então combiná-lo de volta.","",'O primeiro método para combinar trabalho que vamos examinar é o `git merge`. O merge do Git cria um commit especial que possui dois pais únicos. Um commit com dois pais essencialmente significa "Quero incluir todo o trabalho deste pai aqui com o daquele outro pai ali, *e* com o do conjunto de todos os seus ancestrais."',"","É mais fácil com uma visualização, vamos ver logo a seguir."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:['Aqui nós temos dois ramos; cada um tem um commit que é único. Isso significa que nenhum ramo inclui o conjunto do "trabalho" que foi realizado no repositório. Vamos consertar isso com um merge.',"","Vamos juntar o ramo `bugFix` no `main`."],afterMarkdowns:["Uau! Viu isso? Antes de tudo, o `main` agora aponta para um commit que possui dois pais. Se você seguir as setas subindo a árvore de commits a partir do `main`, você será capaz de encontrar, ao longo do caminho até a raiz, qualquer um dos commits. Isso significa que o `main` contém todo o trabalho realizado no repositório até o momento.","","Além disso, viu como as cores dos commits mudaram? Para ajudá-lo a aprender, eu incluí uma legenda. Cada ramo tem uma cor única. Cada commit tem a cor resultante da mistura das cores de todos os ramos que o contém.","","Aqui vemos que a cor do ramo `main` está misturada em todos os commits, mas a cor do `bugFix` não está. Vamos corrigir isso..."],command:"git merge bugFix",beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Vamos juntar o `main` no `bugFix`:"],afterMarkdowns:["Como o `bugFix` é um ancestral do `main`, o git não teve trabalho nenhum; ele só precisou mover o `bugFix` para o mesmo commit do `main`.","","Agora todos os commits possuem a mesma cor, o que significa que ambos os ramos contém todo o trabalho realizado no repositório! Eba!"],command:"git checkout bugFix; git merge main",beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit; git merge bugFix"}},{type:"ModalAlert",options:{markdowns:["Para completar este nível, faça o seguinte:","","* Crie um novo ramo chamado `bugFix`","* Faça checkout no ramo `bugFix` com `git checkout bugFix`","* Faça um commit","* Volte ao `main` com `git checkout`","* Faça um novo commit","* Junte o ramo `bugFix` no `main` com `git merge`","",'*Lembre-se, você pode sempre mostrar esta mensagem novamente com o comando "objective"!*']}}]},gl:{childViews:[{type:"ModalAlert",options:{markdowns:["## Ramas e merges","","¡Xenial! Agora sabemos como facer commits e crear ramas. Agora precisamos aprender unha forma de combinar o traballo de dúas ramas diferentes. Iso permitiríanos ramificar, facer un novo cambio, e entón mesturalo de volta.","",'O primeiro comando para mesturar o traballo que imos ver é `git merge`. O merge de Git crea un commit especial que ten dous pais únicos. Un commit con dous pais significa "Quero incluír todo o traballo deste pai cos cambios do outro pai, *e* o conxunto de tódolos ancestros."',"","É máis doado con unha visualización, ímolo ver na seguinte vista."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:['Aquí nos temos dúas ramas; cada unha ten un commit que é único. Isto significa que ningunha rama inclúe o conxunto de "traballo" feito no noso repositorio. Imos arranxar esto cun merge.',"","Imos xuntar a rama `bugFix` na `main`."],afterMarkdowns:["¡Uah! ¿Viches? Antes de todo, `main` agora apunta a un commit que ten dous pais. Se ti sigues as frechas subindo a árbore de commits a partir de `main`, serás capaz de ver tódolos commits ata a raíz, calquera de eles. Isto significa que a rama `main` contén todo o traballo realizado no repositorio ata ese momento.","","Ademáis, ¿viches como cambiaron as cores dos commits? Para axudarte a aprender, hai unha lenda. Cada rama ten unha única cor. Cada commit ten a cor resultante de mesturar as cores de tódalas ramas que contén.","","Aquí vemos que a rama `main` está mesturada en todos os commits, pero a cor da rama `bugFix` non o está. Imos arranxar eso..."],command:"git merge bugFix",beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Imos mesturar a rama `main` en `bugFix`:"],afterMarkdowns:["Como o `bugFix` é un ancestro de `main`, o git non ten traballo que facer; el só ten que mover o punteiro de `bugFix` para o mesmo commit que `main`.","","Agora tódolos commits teñen a mesma cor, o que significa que ambas ramas teñen o mesmo traballo no repositorios! Iepa!"],command:"git checkout bugFix; git merge main",beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit; git merge bugFix"}},{type:"ModalAlert",options:{markdowns:["Para completar este nivel, fai o seguinte:","","* Crea unha nova ramara chamada `bugFix`","* Fai checkout da rama `bugFix` con `git checkout bugFix`","* Fai un commit","* Volve á rama `main` con `git checkout`","* Fai un novo commit","* Xunta a rama `bugFix` en `main` con `git merge`","",'¡Recorda, podes amosar esta mensaxe novamente co comando "objective"!']}}]},fr_FR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Branches et Merges","","Super ! Nous savons désormais comment faire des commits et des branches. Maintenant nous devons apprendre comment combiner ensemble les contenus de deux branches différentes. Ceci nous permettra de créer une nouvelle branche, développer une nouvelle fonctionnalité sur cette dernière, puis intégrer cette fonctionnalité en combinant le contenu de cette branche de développement à la branche d'origine (main par exemple).","","La première méthode que nous allons voir pour combiner le contenu de deux branches est `git merge`. Faire un 'merge' avec Git crée un commit spécial qui a deux parents. Un commit avec deux parents indique en susbtance \"Je veux inclure le contenu de ce parent et le contenu de cet autre parent, *et* l'ensemble de leurs parents.\"","","C'est plus facile en visualisant, regardons dans la vue suivante."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Ici nous avons deux branches ; chacune a un commit qui lui est propre. Cela signifie qu'aucune des deux branches n'inclut la totalité du \"travail\" qui a été fait dans le dépôt. Arrangeons-cela avec merge.","","Nous allons `merge` («fusionner») la branche `bugFix` dans `main`."],afterMarkdowns:["Youhou ! Vous avez vu ça ? Pour commencer, `main` pointe maintenant sur un commit qui a deux parents. Si vous remontez l'enchaînement des flèches depuis `main`, vous allez passez par tous les commits jusqu'à la racine. Cela signifie que `main` contient maintenant tout le travail du dépôt.","","Par ailleurs, avez-vous remarqué les nouvelles couleurs des commits ? Pour faciliter l'apprentissage, j'ai inclus une certaine logique dans la coloration. Chaque branche a une unique couleur. Chaque commit est de la couleur de toutes les branches qui le contiennent.","","Ici nous voyons que la couleur de `main` est intégrée à tous les commits, sauf ceux de `bugFix`. Réparons cela..."],command:"git merge bugFix",beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Faisons un merge de `main` dans `bugFix` :"],afterMarkdowns:["Puisque `bugFix` était un ancêtre de `main`, Git n'avait aucun travail à effectuer; il a simplement déplacé `bugFix` au même commit auquel `main` est attaché.","","Maintenant tous les commits sont de la même couleur, ce qui indique que chaque branche contient tout le contenu du dépôt ! Woohoo !"],command:"git checkout bugFix; git merge main",beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit; git merge bugFix"}},{type:"ModalAlert",options:{markdowns:["Pour accomplir ce niveau, effectuez les opérations suivantes :","","* Faites une nouvelle branche appelée `bugFix`","* Positionnez-vous sur la branche `bugFix` avec `git checkout bugFix`","* Faites un commit","* Retournez sur la branche `main` (commande `git checkout`)","* Faites un nouveau commit","* Fusionnez la branche `bugFix` dans `main` avec `git merge`","",'*Rappelez-vous que vous pouvez à tout moment réafficher ces indications avec "objective" !*']}}]},zh_CN:{childViews:[{type:"ModalAlert",options:{markdowns:["## 分支与合并","","太好了! 我们已经知道如何提交以及如何使用分支了。接下来咱们看看如何将两个分支合并到一起。就是说我们新建一个分支,在其上开发某个新功能,开发完成后再合并回主线。","","咱们先来看一下第一种方法 —— `git merge`。在 Git 中合并两个分支时会产生一个特殊的提交记录,它有两个 parent 节点。翻译成自然语言相当于:“我要把这两个 parent 节点本身及它们所有的祖先都包含进来。”","","通过图示更容易理解一些,咱们到下一页看一下。"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["我们准备了两个分支,每个分支上各有一个独有的提交。这意味着没有一个分支包含了我们修改的所有内容。咱们通过合并这两个分支来解决这个问题。","","我们要把 `bugFix` 合并到 `main` 里"],command:"git merge bugFix",afterMarkdowns:["哇哦!看见了吗?首先,`main` 现在指向了一个拥有两个 parent 节点的提交记录。假如从 `main` 开始沿着箭头向上看,在到达起点的路上会经过所有的提交记录。这意味着 `main` 包含了对代码库的所有修改。↓↓↓","","还有,看见各个提交记录的颜色变化了吗?为了帮助学习理解,我引入了颜色搭配。每个分支都有不同的颜色,而每个提交记录的颜色是所有包含该提交记录的分支的颜色混合之后的颜色。","","所以,`main` 分支的颜色被混入到所有的提交记录,但 `bugFix` 没有。下面咱们让它也改变一下颜色。"],beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["咱们再把 `main` 分支合并到 `bugFix`:"],command:"git checkout bugFix; git merge main",afterMarkdowns:["因为 `main` 继承自 `bugFix`,Git 什么都不用做,只是简单地把 `bugFix` 移动到 `main` 所指向的那个提交记录。","","现在所有提交记录的颜色都一样了,这表明每一个分支都包含了代码库的所有修改!大功告成!"],beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit; git merge bugFix"}},{type:"ModalAlert",options:{markdowns:["要想通过这一关,需要以下几步:","","* 创建新分支 `bugFix`","* 用 `git checkout bugFix` 命令切换到该分支","* 提交一次","* 用 `git checkout main` 切换回 `main`","* 再提交一次","* 用 `git merge` 把 `bugFix` 合并到 `main`","","* 你随时都可以用“objective”命令来打开这个对话框!*"]}}]},zh_TW:{childViews:[{type:"ModalAlert",options:{markdowns:["## branch 以及 merge","","太好了! 我們已經知道怎麼使用 commit 和 branch 了。接下來要學的一招是如何合併(merge)兩個不同 branch 的工作。這讓我們可以建立一個新的 branch ,並且在上面開發新功能,然後合併回 main branch。","","`git merge` 是我們要學習 merge 的第一個方法。該 merge 會產生一個特殊的 commit,它包含兩個唯一 parent commit。一個 commit 如果有兩個 parent commit 的話,那就表示:「我想把這兩個 parent commit 本身及它們的 所有的 parent commit 都包含進來。」","","有圖有真相,看看下面的圖就明白了。"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["在這裡,我們有兩個 branch:各自都有一個唯一的 commit。這意味著沒有一個 branch 包含我們對文件的所有修改。讓我們 merge 這兩個 branch 來解決這個問題。","","我們要 merge `bugFix` 到 `main` "],command:"git merge bugFix",afterMarkdowns:["哇!看見了沒有?首先,`main` 現在指向一個 commit,這個 commit 有兩個 parent commit。假如從 `main` 開始沿著箭頭向上走,在到達起點的路上會經過所有的 commit。這說明了現在 `main` 紀錄了對文件的所有修改。","","還有,看見各個 commit 的顏色變化了嗎?為了幫助學習,我混合了顏色。每個 branch 都有特定的顏色。每個 commit 的顏色都變成了含有此 commit 的所有 branch 的混合色。","","所以,`main` branch 的顏色被混入到所有的 commit,但 `bugFix` 沒有。接下來就改一下這裡吧。"],beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["讓我們 merge `main` branch 到 `bugFix` 吧。"],command:"git checkout bugFix; git merge main",afterMarkdowns:["因為 `bugFix` branch只是 `main` branch 的 parent,git 什麼都不用做,只是簡單地把 `bugfix` branch 移動到 `main` 指向的 commit。","","現在所有的 commit 的顏色都是一樣的啦,這表示每一個 branch 都包含了所有文件的修改!太厲害了啦!"],beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit; git merge bugFix"}},{type:"ModalAlert",options:{markdowns:["想完成這一關,執行以下的操作:","","* 建立新的 branch,叫做 `bugFix` ","* 用 `git checkout bugFix` 切換到 `bugFix` branch","* commit 一次","* 用 `git checkout` 切換回 `main` branch","* 再 commit 一次","* 用 `git merge` 將 `bugFix` merge 到 `main`","",'*記住,你可以用 "objective" 指令來重新顯示這個對話框!*']}}]},ko:{childViews:[{type:"ModalAlert",options:{markdowns:["## 브랜치와 합치기(Merge)","","좋습니다! 지금까지 커밋하고 브랜치를 만드는 방법을 알아봤습니다. 이제 두 별도의 브랜치를 합치는 몇가지 방법을 알아볼 차례입니다. 이제부터 배우는 방법으로 브랜치를 따고, 새 기능을 개발 한 다음 합칠 수 있게 될 것입니다.","",'처음으로 살펴볼 방법은 `git merge`입니다. Git의 합치기(merge)는 두 개의 부모(parent)를 가리키는 특별한 커밋을 만들어 냅니다. 두개의 부모가 있는 커밋이라는 것은 "한 부모의 모든 작업내역과 나머지 부모의 모든 작업, *그리고* 그 두 부모의 모든 부모들의 작업내역을 포함한다"라는 의미가 있습니다. ',"","그림으로 보는게 이해하기 쉬워요. 다음 화면을 봅시다."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["여기에 브랜치가 두 개 있습니다. 각 브랜치에 독립된 커밋이 하나씩 있구요. 그 말은 이 저장소에 지금까지 작업한 내역이 나뉘어 담겨 있다는 얘기입니다. 두 브랜치를 합쳐서(merge) 이 문제를 해결해 볼까요?","","`bugFix` 브랜치를 `main` 브랜치에 합쳐(merge) 보겠습니다."],afterMarkdowns:["보셨어요? 우선, `main`가 두 부모가 있는 커밋을 가리키고 있습니다. ","","또, 커밋들의 색이 바뀐 것을 눈치 채셨나요? 이해를 돕기위해 색상으로 구분해 표현했습니다. 각 브랜치는 그 브랜치만의 색상으로 그렸습니다. 브랜치가 합쳐지는 커밋의 경우에는, 그 브랜치들의 색을 조합한 색상으로 표시 했습니다.","","그런식으로 여기에 `bugFix`브랜치 쪽을 제외한 나머지 커밋만 `main` 브랜치의 색으로 칠해져 있습니다. 이걸 고쳐보죠..."],command:"git merge bugFix",beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["이제 `main` 브랜치에 `bugFix`를 합쳐(merge) 봅시다:"],afterMarkdowns:["`bugFix`가 `main`의 부모쪽에 있었기 때문에, git이 별다른 일을 할 필요가 없었습니다; 간단히 `bugFix`를 `main`가 붙어 있는 커밋으로 이동시켰을 뿐입니다.","","짜잔! 이제 모든 커밋의 색이 같아졌고, 이는 두 브랜치가 모두 저장소의 모든 작업 내역을 포함하고 있다는 뜻입니다."],command:"git checkout bugFix; git merge main",beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit; git merge bugFix"}},{type:"ModalAlert",options:{markdowns:["아래 작업을 해서 이 레벨을 통과하세요:","","* `bugFix`라는 새 브랜치를 만듭니다","* `git checkout bugFix`를 입력해 `bugFix` 브랜치로 이동(checkout)합니다.","* 커밋 한 번 하세요","* `git checkout` 명령어를 이용해 `main`브랜치로 돌아갑니다","* 커밋 또 하세요","* `git merge` 명령어로 `bugFix`브랜치를 `main`에 합쳐 넣습니다.","",'*아 그리고, "objective" 명령어로 이 안내창을 다시 볼 수 있다는 것을 기억해 두세요!*']}}]},ru_RU:{childViews:[{type:"ModalAlert",options:{markdowns:["## Ветки и слияния","","Ок! Мы уже знаем, как создавать ветки и коммитить наши изменения. Теперь надо понять, как объединять изменения из двух разных веток. Очень удобно создать ветку, сделать свою часть работы в ней и потом объединить изменения из своей ветки с общими.","","Первый способ объединения изменений, который мы рассмотрим - это `git merge` - слияние или просто мердж. Слияния в Git создают особый вид коммита, который имеет сразу двух родителей. Коммит с двумя родителями обычно означает, что мы хотим объединить изменения из одного коммита с другим коммитом и всеми их родительскими коммитами.","","Слишком запутанно =) На схеме всё проще и понятнее."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:['Вот у нас две ветки, каждая содержит по одному уникальному коммиту. Это означает, что ни одна из веток не содержит полный набор "работ", выполненных в этом репозитории. Можно исправить эту ситуацию, выполнив слияние.',"","Мы сделаем `merge` ветки `bugFix` в ветку `main`."],afterMarkdowns:["Что мы видим? Во-первых, ветка `main` теперь указывает на коммит, у которого два родителя. Если проследовать по стрелкам от этого коммита, вы пройдёте через каждый коммит в дереве прямиком к началу. Это означает, что теперь в ветке `main` содержатся все изменения репозитория.","","Во-вторых, обрати внимание, как изменились цвета коммитов. Мы ввели цветовую дифференциацию, чтобы помочь пониманию. У каждой ветки — свой цвет. Каждый коммит становится того цвета, какого его ветка. Если в нём изменения сразу двух веток - он становится цветом, смешанным из цветов родительских веток.","","И вот мы видим, что цвет ветки `main` подмешан к каждому коммиту, а ветки `bugFix` - нет. Это можно поправить."],command:"git merge bugFix",beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Смерджим ветку `main` в ветку `bugFix`."],afterMarkdowns:["Так как ветка `bugFix` была предшественницей `main`, Git не делал ничего, только сдвинул `bugFix` на тот же коммит, где находится `main`","","Теперь все коммиты одного цвета, что означает, что каждая ветка содержит все изменения репозитория! Поздравляем!"],command:"git checkout bugFix; git merge main",beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit; git merge bugFix"}},{type:"ModalAlert",options:{markdowns:["Чтобы пройти этот уровень, сделай следующее:","","* Создай новую ветку под названием `bugFix`","* Переключись на новую ветку `bugFix` командой `git checkout bugFix`","* Сделай один коммит","* Вернись на ветку `main` при помощи `git checkout`","* Сделай ещё один коммит","* Слей ветку `bugFix` с веткой `main` при помощи `git merge`","",'* Если что-то пошло не так - можешь подглядеть в эту шпаргалку командой "objective"!*']}}]},uk:{childViews:[{type:"ModalAlert",options:{markdowns:["## Гілки та їх Злиття","","Чудово! Ми знаємо як комітити та створювати гілки. Тепер потрібно навчитися в якийсь спосіб поєднувати інфу з двох чи більше гілок. Це дозволить нам відгілкуватись, зробити нову фічу, й потім інтегрувати її назад.","","Перший спосіб об’єднувати робочу інфу з яким ми розберемось це `git merge`. Команда merge (злити) в Git створює спеціальний коміт який має двох унікальних батьків. Коміт з двома батьками в приниципі просто значить що в нього включена інфа з обох батьків і всіх їх попередників.","","Це простіше сприймається візуально, тому розберемо це в наступному слайді"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:['Тут ми маємо дві гілки; кожна з них містить унікальний коміт. Це означає що жодна з них не містить повного набору "робочої інфи" в цьому репозиторії. Давайте зіллємо всю інфу докупи за допомогою merge.',"","Ми `змержимо` гілку `bugFix` в `main`."],afterMarkdowns:["Нічого собі! Ви це бачили? По-перше, `main` тепер вказує на коміт з двома батьками. Якщо ти піднімешся вверх з цього коміту по дереву, починаючи з `main`, на шляху ти зустрінеш кожен коміт аж до кореневого. Це означає що гілка `main` тепер містить всю інфу в цьому репозиторії.","","А ти помітив як змінилися кольори комітів? Для кращого розуміння процесу я додав певну кольорову диференціацію. Кожен бранч виділено окремим кольором. Колір кожного коміту це суміш кольорів всіх гілок що місять цей коміт.","","Тож ми бачимо що колір гілки `main` містять всі коміти, але не колір `bugFix`. Давайте виправимо це..."],command:"git merge bugFix",beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Давай змержимо `main` в `bugFix`:"],afterMarkdowns:["Так як `bugFix` є нащадком `main`, git'у не потрібно нічого робити; він просто пересунув `bugFix` на тей самий коміт, на якому знаходиться `main`.","","Тепер всі коміти одного кольору, що означає що кожен бранч включає в собі всю корисну інфу яка є в цьому репозиторії! Ура!"],command:"git checkout bugFix; git merge main",beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit; git merge bugFix"}},{type:"ModalAlert",options:{markdowns:["Щоб пройти цей рівень виконай наступні кроки:","","* Зроби нову гілку (branch) з назвою `bugFix`","* Перейди на гілку `bugFix` за допомогою `git checkout bugFix`","* Зроби один коміт","* Повернись до `main` за допомогою `git checkout`","* Зроби ще один коміт","* Змерджи (злий) гілку `bugFix` в `main` за допомогою `git merge`","",'*Не забувай, ти можеш завжди повернутися до цього діалогу за допомогою "objective"!*']}}]},vi:{childViews:[{type:"ModalAlert",options:{markdowns:["## Nhánh và gộp nhánh","","Tuyệt! Ta đã biết làm sao để commit và tạo nhánh. Giờ ta cần học cách để tập hợp thành quả của 2 nhánh khác biệt lại với nhau. Đây sẽ là cách để ta phân tách để phát triển chức năng, rồi sau đó hợp nhất nó trở lại.","",'Cách đầu tiên để hợp nhất thành quả cần xem xét đến là lệnh `git merge`. Merge trong Git là tạo ra một commit đặc biệt mà có 2 người cha độc nhất. Một commit mà có 2 cha căn bản nghĩa là "Tôi muốn có thành quả của ông này và ông kia nữa, *và* tất cả ông cha của họ."',"","Trực quan thì dễ hiểu hơn, sang trang tiếp theo nào."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:['Ở đây ta có 2 nhánh; mỗi nhánh có 1 commit độc nhất. Có nghĩa là chẳng nhánh nào có đủ "thành quả" trong kho chứa của ta cả. Sửa nó bằng merge nào.',"","Ta sẽ `merge` nhánh `bugFix` vào `main`."],afterMarkdowns:["Wao! Thấy chứ? Trước tiên, `main` giờ đã trỏ đến commit có 2 cha. Nếu bạn lần theo mũi tên lên trên từ `main`, bạn sẽ gặp tất cả các commit lên đến commit gốc. Có nghĩa là `main` giờ đã chứa tất cả thành quả trong kho.","","Đồng thời, bạn thấy màu commit thay đổi chứ? Để bạn dễ học hơn, tôi đã phối hợp một số bảng màu. Mỗi nhánh có một màu duy nhất. Mỗi commit mang màu pha trộn của tất cả nhánh chứa nó.","","Vì vậy, ở đây chúng ta thấy rằng màu nhánh `main` được pha trộn vào tất cả các commit, nhưng màu `bugFix` thì không. Hãy sửa nó nào..."],command:"git merge bugFix",beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Hãy gộp nhánh `main` vào `bugFix` nào:"],afterMarkdowns:["Vì `bugFix` là bậc cha ông của `main`, Git chẳng phải làm gì cả; nó đơn giản chỉ chuyển `bugFix` vào commit mà `main` đang trỏ tới.","","Giờ thì tất cả commit đã có cùng màu, nghĩa là mỗi nhánh đã chứa tất cả thành quả trong kho! Ồ hố!"],command:"git checkout bugFix; git merge main",beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit; git merge bugFix"}},{type:"ModalAlert",options:{markdowns:["Để hoàn thành cấp độ này, hãy làm theo các bước bên dưới:","","* Tạo một nhánh mới tên là `bugFix`","* Chuyển sang nhánh `bugFix` với `git checkout bugFix`","* Commit một lần","* Trở về `main` với `git checkout`","* Commit một lần nữa","* Gộp nhánh `bugFix` vào `main` với `git merge`","",'*Nhớ rằng, bạn luôn luôn có thể bật lại hộp thoại này với lệnh "objective"!*']}}]},sl_SI:{childViews:[{type:"ModalAlert",options:{markdowns:["## Branchi in Merganje","","Odlično! Sedaj znamo commitati in branchati. Naslednja stvar je, da se naučimo združiti delo iz dveh različnih branchev. To nam bo omogočilo, da naredimo branch, razvijemo novo funkcionalnost in jo združimo nazaj.","",'Prva metoda za združevanje dela, ki jo bomo preučili je `git merge`. Merganje v Gitu naredi poseben commit, ki ima dva edinstvena starša. Commit z dvema staršema v bistvu pomeni "Hočem vključiti vso delo iz tega starša tukaj in iz tega tu *ter* vse delo iz njunih staršev".',"","Vizualizacija je enostavnejša, poglejmo v naslednjem oknu."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:['Tu imamo dva brancha; vsak ima en commit, ki je unikaten. To pomeni, da noben branch v repozitorju nima vsega "dela". Pa popravimo to z mergeom.',"","Sedaj bomo `mergeali` branch `bugFix` v `main`."],afterMarkdowns:["Woah! Si videl to? `main` sedaj kaže na commit, ki ima dva starša. Če slediš puščicam po drevesu commitov iz `main`, boš našel vsak commit po poti do roota. To pomeni, da `main` sedaj vsebuje vso delo iz repozitorija.","","Opaziš tudi, kako so se barve commitov spremenile? V pomoč pri učenju, sem vključil še nekaj barvne pomoči. Vsak branch ima svojo barvo. Vsak commit spremeni barvo v kombinirano barvo vseh branchev, ki imajo ta commit.","","Torej tukaj vidimo, da je `main` branch barva zmešana v vseh commitih, `bugFix` barva pa ne. Popravimo to ..."],command:"git merge bugFix",beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Zmergajmo sedaj `main` v `bugFix`:"],afterMarkdowns:["Ker je `bugFix` bil prednik `main`, git ni rabil storiti ničesar; preprosto je premaknil `bugFix` v isti commit, kamer kaže `main`.","","Sedaj so vsi commiti iste barve, kar pomeni, da vsak branch vsebuje vse delo v repozitoriju!! Woohoo!"],command:"git checkout bugFix; git merge main",beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit; git merge bugFix"}},{type:"ModalAlert",options:{markdowns:["Da zaključiš to stopnjo, naredi naslednje korake:","","* Naredi novi branch `bugFix`","* Checkoutaj `bugFix` branch z `git checkout bugFix`","* Enkrat commitaj","* Pojdi nazaj na `main` z `git checkout`","* Še enkrat commitaj","* Mergeaj branch `bugFix` v `main` z `git merge`","",'*Pomni, vedno lahko spet pogledaš ta dialog z "objective"!*']}}]},pl:{childViews:[{type:"ModalAlert",options:{markdowns:["## Łączenie gałęzi","","Świetnie! Już wiemy, jak dodawać commity oraz jak tworzyć gałęzie (czyli branche). Teraz musimy się nauczyć, jak połączyć pracę dwóch różnych gałęzi. Stwórzmy nową gałąź, wprowadźmy nową funkcjonalność, a następnie połączmy gałęzie.","",'Pierwszą metodą scalania (łączenia) gałęzi, której zamierzamy użyć, jest `git merge` (w Polsce możesz spotkać się z takimi określeniami jak merge\'owanie albo usłyszeć o merdżowaniu). Połączenie to tworzy w Git specjalny commit, który ma dwoje różnych rodziców. Commit z dwojgiem rodziców zasadniczo oznacza: "Chcę uwzględnić całą pracę tych rodziców *oraz* wszystkich ich przodków".',"","Zaraz zobaczysz, jak to wygląda i łatwiej będzie ci wszystko zrozumieć."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:['Mamy tutaj dwie gałęzie. Każda z nich ma po jednym unikalnym commicie. Oznacza to, że żadna z nich nie zawiera "całej pracy", którą wykonaliśmy w naszym repozytorium. Naprawmy to!.',"","Użyjmy `git merge`, aby połączyć branche `bugFix` oraz `main`."],afterMarkdowns:['Łał! Widzisz to? Teraz "main" wskazuje na commit, który ma dwoje rodziców. Jeśli podążasz za strzałkami w górę drzewa źródłowego od `main`, trafisz na każdy commit po drodze do korzenia. Oznacza to, że `main` zawiera teraz całą pracę w repozytorium.',"","Zobacz też, jak zmieniły się kolory commitów. Aby pomóc Ci w nauce, dołączyłem kilka konwencji kolorów. Każdy branch ma swój własny kolor. Kolor każdego commita to mieszanka kolorów wszystkich gałęzi, które commitujesz","","Tutaj widzimy, że kolor gałęzi `main` jest składową kolorów wszystkich commitów, ale kolor gałęzi `bugFix` już nie. Naprawmy to..."],command:"git merge bugFix",beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Połączmy gałąź `main` z gałęzią `bugFix`:"],afterMarkdowns:["Ponieważ `bugFix` był przodkiem gałęzi `main`, git nie musiał wykonywać żadnej pracy. Po prostu przeniósł branch `bugFix` do tego samego commita, do którego dołączony był `main`.","","Teraz wszystkie commity mają ten sam kolor, co oznacza, że każda gałąź zawiera całą pracę znajdującą się w repozytorium! Super!"],command:"git checkout bugFix; git merge main",beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit; git merge bugFix"}},{type:"ModalAlert",options:{markdowns:["Aby ukończyć ten poziom, wykonaj następujące czynności:","","* Stwórz nową gałąź o nazwie `bugFix`","* Przełącz się na gałąź `bugFix`, używając polecenia `git checkout bugFix`","* Zrób jeden commit","* Wróć do gałęzi `main` za pomocą polecenia `git checkout`","* Zrób kolejny commit","* Połącz gałąź `bugFix` z gałęzią `main`, używając polecenia `git merge`","",'*Pamiętaj: zawsze możesz zobaczyć tę wiadomość ponownie, wpisując "objective"!*']}}]},ta_IN:{childViews:[{type:"ModalAlert",options:{markdowns:["## கிளைகள் மற்றும் ஒருங்கினைத்தல் இணைத்தல்","","நன்று! நமக்கு இப்போது கமிட் மற்றும் கிளை பிறித்தில் பற்றி தெரியும். இப்போது நாம் இரண்டு வெவ்வேறு கிளைகளிலிருந்து மாற்றங்களை ஒன்றிணைக்கும் வழியை கற்றுக்கொள்ள வேண்டும். இது நம்மை கிளை பிரிக்கவும், அதில் புதிய அம்சத்தை உருவாக்கி, பின்னர் அதை மீண்டும் இணைக்கவும் உதவும்.","",'நாம் முதலில் `git merge` எப்படி இணைப்பதற்கான வேலையை செய்கிறது என்பதை காண்போம். Gitஇல் ஒருங்கினைக்க இரண்டு கிளைகளின் மாற்றங்களை இணைத்து ஒரு சிற்ப்பு கமிட் உருவாக்க படும். அது "நான் மாற்றத்தினை முதல் கிளேயில் இருந்தும் மற்ற சில மாற்றங்களை அடுத்த கிளையில் இருந்தும் *மேலும்* அவற்றின் மூலங்களையும் இணைத்து ஒரே தொகுப்பாக உருவாக்க விரும்புகிறைன்." என சொல்வதை போன்றதுபோன்றது',"","காட்சிகள் மூலம் இதை எளிதாக புறிந்து கொள்ள முடியும், அடுத்த பகுதியில் அதைப் பார்ப்போம்."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:['இங்கே இரண்டு கிளைகள் உள்ளன; ஒவ்வொன்றும் தனித்துவமான ஒரு மாற்றத்துடன் கமிட் கொண்டுள்ளன. இதன் பொருள் என்னவென்றால், நாம் செய்த "மாற்றங்களின்" முழு தொகுப்பும் களஞ்சியத்தின் இரு கிளைகளிலும் இல்லை. அதை ஒன்றிணைப்பதன் மூலம் சரிசெய்வோம்.',"","`bugFix` கிளையை `main` உடன் இணைப்போம்(`merge`)."],afterMarkdowns:["ஓ! அதை பார்தீர்களா? முதலில், `main` இரண்டு பெற்றோர்களைக் கொண்ட ஒரு கமிட்டை சுட்டிக்காட்டுகிறது. `main` கமிட் மரத்திலிருந்து நீங்கள் அம்புகளைப் பின்தொடர்ந்தால், அனைத்து வழியாகவும் வேருக்கு செல்லும் வழியில் இணைவீர்கள். இதன் பொருள் என்னவென்றால், `main` இப்போது களஞ்சியத்தில் உள்ள அனைத்து மாற்றங்களையும் கொண்டுள்ளது.","","மேலும், கமிட்டுகளின் நிறங்கள் எவ்வாறு மாற்றப்பட்டன என்பதைப் பாருங்கள்? கற்றலுக்கு உதவ, நான் சில வண்ண ஒருங்கிணைப்பைச் சேர்த்துள்ளேன். ஒவ்வொரு கிளைக்கும் ஒரு தனித்துவமான நிறம் உள்ளது. ஒவ்வொரு கமிட்டும் அது உள்ள அனைத்து கிளைகளின் கலவையால் ஆன நிறமாக மாறும்.","","ஆகவே, `main` கிளையின் வண்ணம் அனைத்து கமிட்டுகளிலும் கலந்திருப்பதை இங்கே காண்கிறோம், ஆனால் `bugFix` நிறம் மட்டும் இல்லை. அதை சரிசெய்வோம்..."],command:"git merge bugFix",beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["`main`-ஐ `bugFix` உடன் இணைப்போம்:"],afterMarkdowns:["`bugFix` என்பது `main`-இன் மூலக்கிளை என்பதால், கிட் எந்த வேலையும் செய்ய வேண்டியதில்லை; அது `main` இணைந்துள்ள அதே கமிட்டுடன் `bugFix`-ஐ சேர்த்துவிடுகின்றது.","","இப்போது அனைத்து கமிட்களும் ஒரே நிரத்தில் உள்ளது, அதாவது அனைத்து கிளைகளிலும் களஞ்சியத்தில் உள்ள அனைத்து மாற்றங்களும் உள்ளன! வூஹூ!"],command:"git checkout bugFix; git merge main",beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit; git merge bugFix"}},{type:"ModalAlert",options:{markdowns:["இந்த நிலையை முடிக்க, பின்வரும் படிகளைச் செய்யுங்கள்:","","* `bugFix` என்ற புதிய கிளையை உருவாக்குங்கள்","* `git checkout bugFix` கொண்டு `bugFix` கிளைக்கு மாற்றி கொல்லுங்கள்","* ஒரு கமிட் செய்யுங்கள்","* மீண்டும் `main`-க்கு `git checkout` கட்டளைமூலம் மாறுங்கள்","* மீண்டும் ஒரு கமிட் செய்யுங்கள்","* இப்போது `bugFix`-ஐ `main` உடன் `git merge` இணைக்கலாம்","",'*நினைவில் கொள்ளுங்கள், இந்த உரையாடலை "குறிக்கோள்" கொண்டு நீங்கள் மீண்டும் காணலாம்!*']}}]},it_IT:{childViews:[{type:"ModalAlert",options:{markdowns:["## Rami e fusione","","Ottimo! Ora sappiamo come funzionano i commit e i rami. Adesso dobbiamo trovare il modo per unire il lavoro di due rami diversi. Questo ci permetterà di creare un nuovo ramo, aggiungere una nuova funzionalità, e poi riunire il tutto.","",'Il primo metodo che vediamo per unire il lavoro è `git merge` (fusione). La fusione in Git crea un commit speciale che possiede due genitori distinti. Un commit con due genitori significa "Voglio unire tutto il lavoro da questo e da quest\' altro genitore, *e anche* di tutti i loro genitori."',"","È più semplice con le immagini, vediamolo nella prossima schermata."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:['Qui abbiamo due rami; ognuno di essi ha un commit univoco. Ciò significa che nessuno dei rami contiene per intero il "lavoro" del repository. Sistemiamo le cose con una fusione.',"","Ora facciamo `merge` del ramo `bugFix` nel `main`."],afterMarkdowns:["WOW! Visto? Prima di tutto, `main` ora punta a un commit con due genitori. Se ripercorri l'albero dei commit dal `main`, potrai attraversare tutti i commit fino alla radice (root). Questo significa che `main` ora contiene tutto il lavoro del repository.","","Hai visto come è cambiato il colore del commit? Per imparare più facilmente, ho aggiunto i colori. Ogni ramo ha un colore univoco. Ogni (merge) commit ha un colore che è la combinazione dei colori dei rami che lo compongono.","","Qui vediamo che il colore del ramo `main` è la combinazione di tutti i commit , ma il colore di `bugFix` è diverso. Sistemiamolo..."],command:"git merge bugFix",beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Fondiamo `main` in `bugFix`:"],afterMarkdowns:["Visto che `bugFix` era un antenato di `main`, git non ha dovuto fare nulla di che; ha semplicemente spostato `bugFix` sullo stesso commit in cui era collegato `main`.","","Ora tutti i commit hanno lo stesso colore, il che significa che ogni ramo contiene tutto il lavoro del repository! WoWoWoW!"],command:"git checkout bugFix; git merge main",beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit; git merge bugFix"}},{type:"ModalAlert",options:{markdowns:["Per completare questo livello, esegui i seguenti passaggi:","","* Crea un nuovo ramo di nome `bugFix`","* Seleziona il ramo `bugFix` con il comando `git checkout bugFix`","* Esegui un commit","* Ritorna al ramo `main` con `git checkout`","* Esegui un nuovo commit","* Fondi il ramo `bugFix` nel `main` con `git merge`","",'*Ricorda, puoi sempre rivedere questa schermata digitando "objective"!*']}}]},tr_TR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Branch'ler ve Merge İşlemleri","","Harika! Nasıl commit yapılacağını ve branch oluşturulacağını öğrendik. Şimdi iki farklı branch'in çalışmasını birleştirmenin (merge) bir yolunu öğrenmemiz gerekiyor. Bu, yeni bir özellik geliştirmek için bir branch'i alacak ve sonra onu geri birleştirebilmemizi sağlayacak.","","Birleştirme işlemini inceleyeceğimiz ilk yöntem `git merge`'dir. Git'te birleştirme işlemi, iki benzersiz üst öğesi olan özel bir commit oluşturur. İki ata'sı olan bir commit, temelde \"Bu kaynak kodun bu noktadaki tüm çalışmasını ve diğer noktadaki kaynak kodun tüm çalışmasını *ve* tüm bu kaynak kodlarının üstündeki kaynak kodlarını dahil etmek istiyorum.\" anlamına gelir.","","Bu işlem görsellerle daha kolay anlaşılır, bir sonraki görünümde görelim."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["İşte iki branch'imiz var; her birinin benzersiz bir commit'i var. Bu, her iki branch'in de repo'da yaptığımız \"çalışmanın\" tamamını içermediği anlamına gelir. Birleştirme (merge) ile bunu düzeltebiliriz.","","`bugFix` branch'ini `main` ile `merge` edeceğiz."],afterMarkdowns:["Vay canına! Görüyor musunuz? İlk olarak, `main` artık iki ata'sı (Parent) olan bir commit'e işaret ediyor. `main` üzerinden commit ağacındaki okları takip ederseniz, köke giden yol boyunca her commit'e ulaşırsınız. Bu, `main`'in artık repo'nun tamamındaki tüm çalışmayı içerdiği anlamına gelir.","","Ayrıca, commit'lerim renklerinin nasıl değiştiğini gördünüz mü? Öğrenmenize yardımcı olmak için bazı renk koordinasyonları ekledik. Her branch'in kendine özgü bir rengi vardır. Her commit, kendisini içeren tüm branch'lerin karışık bir kombinasyonu olan bir renge dönüşür.","","Yani burada `main` branch'inin renginin tüm commit'lere karıştığını, ancak `bugFix` renginin karışmadığını görüyoruz. Şimdi bunu düzeltelim..."],command:"git merge bugFix",beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Hadi`main`'i `bugFix`'e merge'leyelim:"],afterMarkdowns:["`bugFix`, `main`'in atası olduğu için, git'in ekstra hiçbir iş yapmasına gerek kalmadı; sadece`bugFix`'i `main`'in bağlı olduğu aynı commit'e taşıdı.","","Artık tüm commit'ler aynı renk oldu, bu da her branch'in repo'daki tüm çalışmaları içerdiği anlamına geliyor! Yaşasın!"],command:"git checkout bugFix; git merge main",beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit; git merge bugFix"}},{type:"ModalAlert",options:{markdowns:["Bu level'i tamamlamak için aşağıdaki adımları yapmanız gerekiyor:","","* `bugFix` adında yeni bir branch oluşturun","* `git checkout bugFix` komutu ile `bugFix` branch'ine geçin ","* bir commit atın","* `git checkout` komutu ile `main` branch'ine geri dönün ","* başka bir commit atın","* Ardından `git merge` komutu ile `bugFix`'i `main`'e merge edin","",'*Unutmayın, "objective" komutunu kullanılarak bu iletişim penceresini her zaman yeniden görüntüleyebilirsiniz!*']}}]}}}},{}],125:[function(e,t,o){o.level={goalTreeString:"%7B%22branches%22%3A%7B%22main%22%3A%7B%22target%22%3A%22C3%22%2C%22id%22%3A%22main%22%7D%2C%22bugFix%22%3A%7B%22target%22%3A%22C2%27%22%2C%22id%22%3A%22bugFix%22%7D%7D%2C%22commits%22%3A%7B%22C0%22%3A%7B%22parents%22%3A%5B%5D%2C%22id%22%3A%22C0%22%2C%22rootCommit%22%3Atrue%7D%2C%22C1%22%3A%7B%22parents%22%3A%5B%22C0%22%5D%2C%22id%22%3A%22C1%22%7D%2C%22C2%22%3A%7B%22parents%22%3A%5B%22C1%22%5D%2C%22id%22%3A%22C2%22%7D%2C%22C3%22%3A%7B%22parents%22%3A%5B%22C1%22%5D%2C%22id%22%3A%22C3%22%7D%2C%22C2%27%22%3A%7B%22parents%22%3A%5B%22C3%22%5D%2C%22id%22%3A%22C2%27%22%7D%7D%2C%22HEAD%22%3A%7B%22target%22%3A%22bugFix%22%2C%22id%22%3A%22HEAD%22%7D%7D",solutionCommand:"git checkout -b bugFix;git commit;git checkout main;git commit;git checkout bugFix;git rebase main",name:{en_US:"Rebase Introduction",de_DE:"Einführung in Rebase",ja:"Rebaseの解説",es_AR:"Introducción a rebase",es_MX:"Introducción a rebase",es_ES:"Introducción a rebase",pt_BR:"Introdução ao rebase",gl:"Introducción a rebase",fr_FR:"Introduction à rebase",ko:"리베이스(rebase)의 기본",zh_CN:"Git Rebase",zh_TW:"介紹 rebase",ru_RU:"Введение в rebase",uk:"Знайомство з rebase",vi:"Giới thiệu về rebase",sl_SI:"Uvod v Rebase",it_IT:"Introduzione al rebase (ribasare)",pl:"Wprowadzenie do Rebase",tr_TR:"Rebase İşlemine Giriş"},hint:{en_US:"Make sure you commit from bugFix first",de_DE:"Geh vor dem committen sicher, dass du auf bugFix arbeitest",ja:"初めにbugFixを指した状態でコミットする",fr_FR:"Assurez-vous de bien faire votre commit sur bugFix en premier",es_AR:"Asegurate de commitear desde bugFix primero",es_MX:"Asegúrate de hacer commit desde bugFix primero",es_ES:"Asegúrate de hacer commit desde bugFix primero",pt_BR:"O bugFix precisa ser commitado primeiro",gl:"Asegurate de facer o commit dende bugFix primeiro",ko:"bugFix 브랜치에서 먼저 커밋하세요",zh_CN:"先在 bugFix 分支上进行提交",zh_TW:"你要先在 bugFix branch 進行 commit",ru_RU:"Убедись, что сделал коммит в ветке bugFix",uk:"Впевнись, що зробив коміт в гілці bugFix",vi:"Hãy chắc chắn rằng bạn commit từ bugFix trước",sl_SI:"Prepričaj se, da si najprej commital bugFix.",it_IT:"Assicurati di fare prima il commit da bugFix",pl:"Upewnij się, że masz już commit z bugFix",tr_TR:"Önce bugFix'tencommit attığınıza emin olun"},disabledMap:{"git revert":!0},startDialog:{en_US:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Rebase","",'The second way of combining work between branches is *rebasing.* Rebasing essentially takes a set of commits, "copies" them, and plops them down somewhere else.',"","While this sounds confusing, the advantage of rebasing is that it can be used to make a nice linear sequence of commits. The commit log / history of the repository will be a lot cleaner if only rebasing is allowed.","","Let's see it in action..."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Here we have two branches yet again; note that the bugFix branch is currently selected (note the asterisk)","","We would like to move our work from bugFix directly onto the work from main. That way it would look like these two features were developed sequentially, when in reality they were developed in parallel.","","Let's do that with the `git rebase` command."],afterMarkdowns:["Awesome! Now the work from our bugFix branch is right on top of main and we have a nice linear sequence of commits.","",'Note that the commit C3 still exists somewhere (it has a faded appearance in the tree), and C3\' is the "copy" that we rebased onto main.',"","The only problem is that main hasn't been updated either, let's do that now..."],command:"git rebase main",beforeCommand:"git commit; git checkout -b bugFix C1; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Now we are checked out on the `main` branch. Let's go ahead and rebase onto `bugFix`..."],afterMarkdowns:["There! Since `main` was an ancestor of `bugFix`, git simply moved the `main` branch reference forward in history."],command:"git rebase bugFix",beforeCommand:"git commit; git checkout -b bugFix C1; git commit; git rebase main; git checkout main"}},{type:"ModalAlert",options:{markdowns:["To complete this level, do the following","","* Checkout a new branch named `bugFix`","* Commit once","* Go back to main and commit again","* Check out bugFix again and rebase onto main","","Good luck!"]}}]},de_DE:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Rebase","",'Der zweite Weg um Inhalte aus verschiedenen Branches zu kombinieren ist `git rebase`. Rebasen nimmt im Prinzip eine Menge von Commits, "kopiert" sie und packt sie auf etwas anderes drauf.',"","Auch wenn das erst mal komisch klingt, liegt der Vorteil von Rebase darin, dass man es benutzen kann um hübsch lineare Abfolgen von Commits zu erhalten. Das Commit-Protokoll des Repositorys wird durch Rebase eine ganze Ecke einfacher aussehen, weil Merge Commits vermieden werden.","","Schauen wir's uns mal in Aktion an ..."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Hier haben wir wieder zwei Branches; wie du siehst ist `bugFix` aktuell ausgewählt (sieht man am `*`).","","Wir würden jetzt gerne unsere Arbeit aus `bugFix` direkt auf den `main` packen. Das Ergebnis wäre, dass alle aktuellen Änderungen in `main` auch im Branch `bugFix` sind.","","Das machen wir mit dem Befehl `git rebase`:"],afterMarkdowns:["Hammer! Was wir in `bugFix` gemacht haben ist jetzt oben auf `main` draufgepackt und wir haben eine schön lineare Abfolge von Commits bekommen.","",'Commit `C3` existiert immer noch irgendwo (deswegen ist er blass dargestellt) und `C3\'` ist die "Kopie" die wir auf den `main` gepackt haben.',"","Aber `main` ist jetzt nicht aktualisiert worden, lass uns das gerade noch nachholen ..."],command:"git rebase main",beforeCommand:"git commit; git checkout -b bugFix C1; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Jetzt sind wir im `main`. Lass uns den mal auf `bugFix` rebasen ..."],afterMarkdowns:["So! Da `main` ein Vorgänger von `bugFix` war konnte Git hier einfach den Bezeichner `main` auf denselben Commit schieben, auf den auch `bugFix` zeigt."],command:"git rebase bugFix",beforeCommand:"git commit; git checkout -b bugFix C1; git commit; git rebase main; git checkout main"}},{type:"ModalAlert",options:{markdowns:["Um dieses Level abzuschließen musst du folgendes tun:","","* Einen neuen Branch namens `bugFix` auschecken","* Einen Commit machen","* Zurück zum `main` wechseln und noch einmal committen","* `bugFix` auschecken und auf den `main` rebasen","","Viel Erfolg!"]}}]},ja:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Rebase","","ブランチを一つにまとめる方法として前回はマージを紹介しましたが、今回紹介するリベースを使うこともできます。リベースの動作は、マージするコミットのコピーをとって、どこかにストンと落とすというイメージです。","","ピンと来ないかもしれませんが、リベースのメリットは一本の連続したコミットに整形できることです。リベースだけ使っていると、コミットのログや履歴が非常にクリーンな状態に保たれます。","","早速実際にどう動くのかを見てみましょう。"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["前回と同様の2つのブランチを考えます。仮にいまbugFixブランチをチェックアウトしているとします。(アスタリスクつきのもの)","","bugFixに入ってる作業内容をそのまま直接mainブランチ上の内容に移動したいとします。こうすることで、実際には並行して開発された2つの別々のブランチ上の機能のソースを、あたかも1本のブランチ上で連続して開発されていたかのように見せることができます。","","`git rebase`コマンドでそれをやってみましょう。"],afterMarkdowns:["できました!これでbugFixブランチの作業内容はmainブランチのすぐ先に移動したので、見た目が一本になってスッキリしました。","","気を付けてほしいのは、C3コミットはどこかに残ってるということ(ツリーの中で半透明にしてあります)、そしてC3'は(C1との接続が切れているC3の)コピーがmainブランチ上に作られているということです。","","一つ問題が残ってて、mainブランチがまだ最新化されていませんね。ちょっと直してみましょう。。"],command:"git rebase main",beforeCommand:"git commit; git checkout -b bugFix C1; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["mainブランチにチェックアウトしてあります。この状態からmainブランチを`bugFix`へとリベースしてみましょう。"],afterMarkdowns:["できた!`main`は`bugFix`の直前のコミットだったので、gitは単純に`main`ブランチのポインタを前に進めただけでした。"],command:"git rebase bugFix",beforeCommand:"git commit; git checkout -b bugFix C1; git commit; git rebase main; git checkout main"}},{type:"ModalAlert",options:{markdowns:["以下の作業で理解度の確認をしてみましょう。","","* `bugFix`という名前の新しいブランチをチェックアウトする","* 一回だけコミット","* mainブランチに戻ってもう1回コミット","* bugFixをもう1回チェックアウトして、main上にリベース","","幸運を祈る!"]}}]},es_AR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Rebase","",'El segundo modo de combinar el trabajo de distintas ramas es el *rebase*. Rebasear esencialmente agarra un conjunto de commits, los "copia", y los aplica sobre algún otro lado.',"","Aunque esto pueda sonar confuso, la ventaja de rebasear es que puede usarse para conseguir una secuencia de commits lineal, más bonita. El historial / log de commits del repositorio va a estar mucho más claro si sólo usás rebase.","","Veámoslo en acción..."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Acá tenemos dos ramas otra vez. Notar que la rama bugFix está actualmente seleccionada (tiene un asterisco)","","Nos gustaría mover nuestro trabajo de bugFix directamente sobre el trabajo de main. De ese modo, parecería que esas dos tareas se desarrollaron secuencialmente, cuando en realidad se hicieron en paralelo.","","Hagámoslo usando el comando `git rebase`."],afterMarkdowns:["¡Genial! Ahora el trabajo de nuestra rama bugFix está justo encima del de main, y tenemos una secuencia lineal de commits.","",'Notá que el commit C3 sigue existiendo en algún lado (aparece medio desvanecido en el árbol), y C3\' es la "copia" que rebaseamos sobre main.',"","El único problema es que main todavía no se actualizó, resolvámoslo ahora..."],command:"git rebase main",beforeCommand:"git commit; git checkout -b bugFix C1; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Ahora nos encontramos sobre la rama `main`. Avancemos y rebaseémosla sobre `bugFix`..."],afterMarkdowns:["¡Ahí está! Como `main` era un ancestro de `bugFix`, git simplemente movió la referencia de `main` hacia adelante en la historia."],command:"git rebase bugFix",beforeCommand:"git commit; git checkout -b bugFix C1; git commit; git rebase main; git checkout main"}},{type:"ModalAlert",options:{markdowns:["Para completar este nivel, hacé lo siguiente:","","* Checkouteá una nueva rama llamada `bugFix`","* Commiteá una vez","* Volvé a main y commiteå de nuevo","* Checkoutá bugFix otra vez y rebaseala sobre main","","¡Éxitos!"]}}]},es_MX:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Rebase","",'El segundo modo de combinar el trabajo de distintas ramas es el *rebase*. Rebasear esencialmente agarra un conjunto de commits, los "copia", y los aplica sobre algún otro lado.',"","Aunque esto pueda sonar confuso, la ventaja de rebasear es que puede usarse para conseguir una secuencia de commits lineal, más bonita. El historial / log de commits del repositorio va a estar mucho más claro si sólo usas rebase.","","Veámoslo en acción..."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Acá tenemos dos ramas otra vez. Nota que la rama bugFix está actualmente seleccionada (tiene un asterisco)","","Nos gustaría mover nuestro trabajo de bugFix directamente sobre el trabajo de main. De ese modo, parecería que esas dos tareas se desarrollaron secuencialmente, cuando en realidad se hicieron en paralelo.","","Hagámoslo usando el comando `git rebase`."],afterMarkdowns:["¡Genial! Ahora el trabajo de nuestra rama bugFix está justo encima del de main, y tenemos una secuencia lineal de commits.","",'Notá que el commit C3 sigue existiendo en algún lado (aparece medio desvanecido en el árbol), y C3\' es la "copia" que rebaseamos sobre main.',"","El único problema es que main todavía no se actualizó, resolvámoslo ahora..."],command:"git rebase main",beforeCommand:"git commit; git checkout -b bugFix C1; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Ahora estamos parados sobre la rama `main`. Avancemos y rebaseémosla sobre `bugFix`..."],afterMarkdowns:["¡Ahí está! Como `main` era un ancestro de `bugFix`, git simplemente movió la referencia de `main` hacia adelante en la historia."],command:"git rebase bugFix",beforeCommand:"git commit; git checkout -b bugFix C1; git commit; git rebase main; git checkout main"}},{type:"ModalAlert",options:{markdowns:["Para completar este nivel, haz lo siguiente:","","* Cámbiate a una nueva rama llamada `bugFix`","* Haz un commit de una vez","* Vuelve a main y haz commit de nuevo","* Cámbiate a la rama bugFix otra vez y rebaséala sobre main","","¡Éxitos!"]}}]},es_ES:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Rebase","",'El segundo modo de combinar el trabajo de distintas ramas es el *rebase*. Hacer rebase escencialmente selecciona un conjunto de commits, los "copia", y los aplica en algún otro lado.',"","Aunque esto pueda sonar confuso, la ventaja de hacer rebase es que puede usarse para conseguir una secuencia de commits lineal, más bonita. El historial / log de commits del repositorio va a estar mucho más claro si sólo usas rebase.","","Veámoslo en acción..."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Aquí tenemos dos ramas otra vez. Observa que la rama bugFix está actualmente seleccionada (tiene un asterisco)","","Nos gustaría mover nuestro trabajo de bugFix directamente sobre el trabajo de main. De ese modo, parecería que esas dos tareas se desarrollaron secuencialmente, cuando en realidad se hicieron en paralelo.","","Hagámoslo usando el comando `git rebase`."],afterMarkdowns:["¡Genial! Ahora el trabajo de nuestra rama bugFix está justo encima del de main, y tenemos una secuencia lineal de commits.","",'Nota que el commit C3 sigue existiendo en algún lado (aparece medio desvanecido en el árbol), y C3\' es la "copia" que rebaseamos sobre main.',"","El único problema es que main todavía no se actualizó, resolvámoslo ahora..."],command:"git rebase main",beforeCommand:"git commit; git checkout -b bugFix C1; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Ahora estamos parados sobre la rama `main`. Avancemos y hagamos rebase sobre `bugFix`..."],afterMarkdowns:["¡Ahí está! Como `main` era un ancestro de `bugFix`, git simplemente movió la referencia de `main` hacia adelante en la historia."],command:"git rebase bugFix",beforeCommand:"git commit; git checkout -b bugFix C1; git commit; git rebase main; git checkout main"}},{type:"ModalAlert",options:{markdowns:["Para completar este nivel, haz lo siguiente:","","* Haz checkout de una nueva rama llamada `bugFix`","* Crea un commit","* Vuelve a la rama main y crea otro commit","* Haz checkout en bugFix otra vez y haz rebase sobre main","","¡Misión cumplida!"]}}]},pt_BR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Rebase no Git","",'A segunda forma de combinar trabalho entre ramos é o *rebase*. O rebase essencialmente pega um conjunto de commits, "copia" os mesmos, e os despeja em outro lugar.',"","Isso pode parecer confuso, mas a vantagem do rebase é que ele pode ser usado para construir uma sequência mais bonita e linear de commits. O registro de commits (história do repositório) ficará muito mais limpa se for utilizado apenas rebase em vez de merge.","","Vejamo-lo em ação..."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Aqui temos dois ramos novamente; note que o ramo bugFix está atualmente ativo (veja o asterisco)","","Queremos mover nosso trabalho do bugFix diretamente dentro do main. Desta forma, vai parecer que esses dois recursos foram desenvolvidos sequencialmente, quando na realidade foram feitos em paralelo.","","Vamos fazê-lo com o comando `git rebase`."],afterMarkdowns:["Incrível! Agora o trabalho do nosso ramo bugFix está logo após o do main, e temos uma linda sequência linear de commits.","",'Perceba que o commit C3 ainda existe em algum lugar (ele está clareado na árvore), e que o C3\' é a "cópia" que rebaseamos no main.',"","O único problema é que o main não foi atualizado também, vamos fazê-lo agora..."],command:"git rebase main",beforeCommand:"git commit; git checkout -b bugFix C1; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Agora o ramo `main` está ativo. Vamos em frente, fazer rebase no `bugFix`..."],afterMarkdowns:["Aí está! Como o `main` era um ancestral do `bugFix`, o git simplesmente moveu a referência do ramo `main` para frente na história."],command:"git rebase bugFix",beforeCommand:"git commit; git checkout -b bugFix C1; git commit; git rebase main; git checkout main"}},{type:"ModalAlert",options:{markdowns:["Para completar este nível, faça o seguinte","","* Faça checkout de um novo branch chamado `bugFix`","* Faça um commit","* Volte ao main e faça um novo commit","* Faça checkout do bugFix novamente e faça rebase no main","","Boa sorte!"]}}]},gl:{childViews:[{type:"ModalAlert",options:{markdowns:["## Rebase en Git","",'A segunda forma de mesturar traballo entre ramas é o *rebase*. O rebase esencialmente pega un conxunto de commits, "copia" os commits, e os sitúa en outro lugar.',"","Esto pode paracer confuso, pero a vantaxe do rebase é que se pode usar para construír unha secuencia máis bonita e linial de commits. O rexisto de commits do repositorio estará máis limpo se só se permite facer rebases.","","Ímolo ver en acción..."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Aquí temos dúas ramas novamente; decátate de que a rama `bugFix` está seleccionada (olla ó asterisco)","","Queremos mover o noso traballo do `bugFix` directamente dentro da rama `main`. Desta forma, vai parecer que eses dous recursos foron editados secuencialmente, cando a realidade é que se fixeron en paralelo.","","Imos lanzar o comando `git rebase`."],afterMarkdowns:["¡Buah chorvo! Agora o traballo da nosa rama `bugFix` está seguida de main, e temos unha fermosa línea de commits.","",'Percibe que o commit `C3` aínda existe nalgún lugar (el está borrado na árbore), e que `C3\'` é a "copia" que rebasamos en main.',"","O único problema é que a rama main non foi actualizada tamén, ímolo facer agora..."],command:"git rebase main",beforeCommand:"git commit; git checkout -b bugFix C1; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Agora a rama `main` está ativa. Continuamos facendo o rebase na `bugFix`..."],afterMarkdowns:["¡Xa está! Como `main` era um ancestro de `bugFix`, git simplemente moveu a referencia da rama `main` máis adiante na historia."],command:"git rebase bugFix",beforeCommand:"git commit; git checkout -b bugFix C1; git commit; git rebase main; git checkout main"}},{type:"ModalAlert",options:{markdowns:["Para completar este nivel, fai o seguinte","","* Fai checkout de un novo branch chamado `bugFix`","* Fai un commit","* Regresa a main e fai un commit novamente","* Móvete á rama bugFix outra vez e fai rebase sobre main","","Boa sorte!"]}}]},fr_FR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Rebase","",'La seconde façon de combiner les contenus de deux branches est *rebase*. Rebase prend un ensemble de commits, les "recopie", et les ajoute en bout de chaîne à un autre endroit.',"","Bien que cela puisse sembler compliqué, l'avantage de rebase est de permettre d'obtenir une simple séquence linéaire de commits. Les logs/l'historique du dépôt seront bien plus propres si seul rebase est autorisé (plutôt que merge).","","Voyons rebase en action…"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Ici nous avons encore une fois deux branches ; notez que nous sommes sur la branche bugFix (cf. l'astérisque)","","Nous voudrions transférer notre travail de la branche 'bugFix' directement sur le travail existant dans 'main'. Ainsi on aurait l'impression que ces deux travaux ont été développés séquentiellement alors qu'en réalité ils ont été réalisés en parallèle.","","Faisons cela avec la commande `git rebase`."],afterMarkdowns:["Super ! Désormais, le travail de la branche 'bugFix' est juste en haut de la branche 'main' et nous avons une belle séquence linéaire de commits.","","Notez que le commit C3 existe toujours quelque part (il est en grisé sur l'arbre), et C3' est la \"copie\" que nous avons créée sur main avec rebase.","","Le seul problème est que main n'a pas été mis à jour, faisons cela maintenant…"],command:"git rebase main",beforeCommand:"git commit; git checkout -b bugFix C1; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Nous sommes désormais positionnés sur la branche `main`. Continuons en faisant le rebase sur `bugFix`…","Et voilà ! Puisque `main` était un ascendant de `bugFix`, Git a simplement déplacé la référence de la branche `main` en avant dans le temps."],afterMarkdowns:["Voilà vous avez vu comment cela fonctionne","","Continuons et essayons ce niveau !"],command:"git rebase bugFix",beforeCommand:"git commit; git checkout -b bugFix C1; git commit; git rebase main; git checkout main"}},{type:"ModalAlert",options:{markdowns:["Pour accomplir ce niveau, faites les opérations suivantes","","* Positionnez-vous (checkout) sur une nouvelle branche nommée `bugFix`","* Faites un commit","* Retournez sur main et faites un nouveau commit","* Positionnez-vous à nouveau sur bugFix et faites un rebase sur main","","Bonne chance !"]}}]},zh_CN:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Rebase","","第二种合并分支的方法是 `git rebase`。Rebase 实际上就是取出一系列的提交记录,“复制”它们,然后在另外一个地方逐个的放下去。","","Rebase 的优势就是可以创造更线性的提交历史,这听上去有些难以理解。如果只允许使用 Rebase 的话,代码库的提交历史将会变得异常清晰。","","咱们还是实际操作一下吧……"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["还是准备了两个分支;注意当前所在的分支是 bugFix(星号标识的是当前分支)","","我们想要把 bugFix 分支里的工作直接移到 main 分支上。移动以后会使得两个分支的功能看起来像是按顺序开发,但实际上它们是并行开发的。","","咱们这次用 `git rebase` 实现此目标"],command:"git rebase main",afterMarkdowns:["怎么样?!现在 bugFix 分支上的工作在 main 的最顶端,同时我们也得到了一个更线性的提交序列。","","注意,提交记录 C3 依然存在(树上那个半透明的节点),而 C3' 是我们 Rebase 到 main 分支上的 C3 的副本。","","现在唯一的问题就是 main 还没有更新,下面咱们就来更新它吧……"],beforeCommand:"git commit; git checkout -b bugFix C1; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["现在我们切换到了 `main` 上。把它 rebase 到 `bugFix` 分支上……"],command:"git rebase bugFix",afterMarkdowns:["好了!由于 `bugFix` 继承自 `main`,所以 Git 只是简单的把 `main` 分支的引用向前移动了一下而已。"],beforeCommand:"git commit; git checkout -b bugFix C1; git commit; git rebase main; git checkout main"}},{type:"ModalAlert",options:{markdowns:["要完成此关,执行以下操作:","","* 新建并切换到 `bugFix` 分支","* 提交一次","* 切换回 main 分支再提交一次","* 再次切换到 bugFix 分支,rebase 到 main 上","","祝你好运!"]}}]},zh_TW:{childViews:[{type:"ModalAlert",options:{markdowns:["## git rebase","",'*rebasing* 是 merge branch 的第二種方法。rebasing 就是取出一連串的 commit,"複製"它們,然後把它們接在別的地方。',"","雖然聽起來難以理解,rebasing 的優點是可以建立更線性的 commit history。假如只允許使用 rebasing 的話,則我們的 repo 中的 commit log 或者是 commit history 會更加簡潔好看。","","讓我們親身體會一下..."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["這裡,還是有兩個 branch;注意目前我們所在的 branch 是 bugFix(看那顆星啦)","","我們想要把在 bugfix 所做的修改直接移到 main branch上。使用 rebasing 的話,兩個 branch 看起來像是依序按順序進行修改,實際上它們的修改是平行進行的。","","用 `git rebase` 來實現吧"],command:"git rebase main",afterMarkdowns:["很厲害吧!現在 bugFix branch 上的工作在 main branch 的最前端,同時我們也得到了一個更加線性的 commit 順序。","",'注意,本來的 commit C3 沒有消失(在圖上面呈現陰影),而我們"複製" C3,將它的副本 C3\' 接在 main branch 的後面。',"","現在唯一的問題是 main branch 還沒有更新...我們接下來就更新它吧!"],beforeCommand:"git commit; git checkout -b bugFix C1; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["現在,切換到 `main` branch。接下來就把它 rebase 到 `bugFix` 上面吧..."],command:"git rebase bugFix",afterMarkdowns:["完成!因為 `main` branch 是 `bugFix` 的 parent,所以 git 只是把 `main` branch 往前移動到 `bugFix` 上。"],beforeCommand:"git commit; git checkout -b bugFix C1; git commit; git rebase main; git checkout main"}},{type:"ModalAlert",options:{markdowns:["想完成這一關,執行以下操作:","","* 建立 `bugFix` branch","* commit 一次","* 切換回 main branch 再 commit 一次","* 再次切換到 bugFix branch,接著 rebase bugFix 這個 branch 到 main branch 上","","祝你好運啦!"]}}]},ko:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git 리베이스(Rebase)","","브랜치끼리의 작업을 접목하는 두번째 방법은 *리베이스(rebase)*입니다. 리베이스는 기본적으로 커밋들을 모아서 복사한 뒤, 다른 곳에 떨궈 놓는 것입니다.","","조금 어렵게 느껴질 수 있지만, 리베이스를 하면 커밋들의 흐름을 보기 좋게 한 줄로 만들 수 있다는 장점이 있습니다. 리베이스를 쓰면 저장소의 커밋 로그와 이력이 한결 깨끗해집니다.","","어떻게 동작하는지 살펴볼까요..."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["여기 또 브랜치 두 개가 있습니다; bugFix브랜치가 현재 선택됐다는 점 눈여겨 보세요 (별표 표시)","","bugFix 브랜치에서의 작업을 main 브랜치 위로 직접 옮겨 놓으려고 합니다. 그렇게 하면, 실제로는 두 기능을 따로따로 개발했지만, 마치 순서대로 개발한 것처럼 보이게 됩니다.","","`git rebase` 명령어로 함께 해보죠."],afterMarkdowns:["오! 이제 `bugFix` 브랜치의 작업 내용이 `main`의 바로 위에 깔끔한 한 줄의 커밋으로 보이게 됐습니다.","","C3 커밋은 어딘가에 아직 남아있고(그림에서 흐려짐), C3'는 `main` 위에 올려 놓은 복사본입니다.","","`main`이 아직 그대로라는 문제가 남아있는데요, 바로 해결해보죠..."],command:"git rebase main",beforeCommand:"git commit; git checkout -b bugFix C1; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["우리는 지금 `main` 브랜치를 선택한 상태입니다. `bugFix` 브랜치쪽으로 리베이스 해보겠습니다..."],afterMarkdowns:["보세요! `main`이 `bugFix`의 부모쪽에 있었기 때문에, 단순히 그 브랜치를 더 앞쪽의 커밋을 가리키게 이동하는 것이 전부입니다."],command:"git rebase bugFix",beforeCommand:"git commit; git checkout -b bugFix C1; git commit; git rebase main; git checkout main"}},{type:"ModalAlert",options:{markdowns:["이하 작업을 하면 이번 레벨을 통과합니다","","* `bugFix`라는 새 브랜치를 만들어 선택하세요","* 커밋 한 번 합니다","* `main` 브랜치로 돌아가서 또 커밋합니다","* `bugFix`를 다시 선택하고 `main`에 리베이스 하세요","","화이팅!"]}}]},ru_RU:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Rebase","","Второй способ объединения изменений в ветках - это *rebasing*. При ребейзе Git по сути копирует набор коммитов и переносит их в другое место.","","Несмотря на то, что это звучит достаточно непонятно, преимущество `rebase` в том, что c его помощью можно делать чистые и красивые линейные последовательности коммитов. История коммитов будет чище, если вы применяете `rebase`.","","Посмотрим, как это работает..."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["У нас здесь снова две ветки. Обрати внимание, что выбрана ветка `bugFix` (отмечена звёздочкой)","","Хочется сдвинуть наши изменения из `bugFix` прямо на вершину ветки `main`. Благодаря этому всё будет выглядеть, как будто эти изменения делались последовательно, хотя на самом деле - параллельно.","","Применим `git rebase`."],afterMarkdowns:["Супер! Теперь изменения из `bugFix` находятся в конце ветки `main` и являют собой линейную последовательность коммитов.","",'Обрати внимание, что коммит С3 до сих пор существует где-то, а С3\' - это его "копия" в ветке `main`',"","Единственная проблема - ветка `main` не обновлена до последних изменений. Это легко исправить."],command:"git rebase main",beforeCommand:"git commit; git checkout -b bugFix C1; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Вот мы выбрали ветку `main`. Вперёд - сделаем rebase на `bugFix`."],afterMarkdowns:["Вуаля! Так как `main` был предком `bugFix`, git просто сдвинул ссылку на `main` вперёд."],command:"git rebase bugFix",beforeCommand:"git commit; git checkout -b bugFix C1; git commit; git rebase main; git checkout main"}},{type:"ModalAlert",options:{markdowns:["Чтобы пройти этот уровень, сделай следующее:","","* Переключись на ветку `bugFix`","* Сделай коммит","* Вернись на `main` и сделай коммит ещё раз","* Переключись на `bugFix` и сделай rebase на `main`","","Удачи!"]}}]},uk:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Rebase","",'Інший спосіб комбінування змін з різних бранчів називається *rebase*. Rebase по суті бере кілька комітів , "копіює" їх, й кладе їх в інше місце.',"","Це може звучати трохи незрозуміло, але основна перевага rebase в тому, що його використовують щоб створити зручну лінійну послідовність комітів. Коміт лог та історія будуть виглядати набагато чистіша, якщо користуватися лише rebase (а не merge)","","Спробуємо на практиці..."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Ми знову маємо дві гілки; зауваж, що наразі вибрана гілка bugFix (вважай зірочку)","","Ми хочемо перемістити наші зміни з гілки bugFix прямо до змін з гілки main. Тоді це буде виглядати наче ці зміни були додані одна за одною, хоча насправді вони були додані одночасно.","","Давайте зробимо це за допомогою команди `git rebase`."],afterMarkdowns:["Добре! Тепер зміни з гілки bugFix знаходяться прямо попереду змін з main й ми отримали зручну лінійну послідовність комітів.","",'Вважай що коміт C3 досі десь існує (в дереві він тьмяніший за решту), й C3\' це "копія" яку ми заребейсили в main.',"","Є лише одна проблема: гілка main також не була оновлена, давайте зробимо це наступним кроком..."],command:"git rebase main",beforeCommand:"git commit; git checkout -b bugFix C1; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Тепер ми перейшли (checkout) до гілки `main`. Далі робимо rebase на `bugFix`..."],afterMarkdowns:["Вуаля! Так як `main` це предок `bugFix`, git просто просунув посилання гілки `main` вперед в історії."],command:"git rebase bugFix",beforeCommand:"git commit; git checkout -b bugFix C1; git commit; git rebase main; git checkout main"}},{type:"ModalAlert",options:{markdowns:["Щоб пройти цей рівень, зроби наступне:","","* Зачекауть (checkout) новий бранч з назвою `bugFix`","* Зроби один коміт","* Повернись на main й зроби ще один коміт","* Зачекауть bugFix знову й заребейсь його на main","","Нехай щастить!"]}}]},vi:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Rebase","",'Cách thứ 2 để kết hợp thành quả của 2 nhánh là *rebase.* Rebase về căn bản là chọn một loạt các commit, "sao chép" chúng, và ném chúng sang chỗ khác.',"","Nghe có vẻ phức tạp, lợi thế của rebase là có thể tạo ra cây lịch sử thẳng tuột. Lịch sử commit nhìn sẽ gọn gàng hơn nhiều.","","Xem nó hoạt động thế nào nào..."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Giờ ta lại có 2 nhánh; để ý rằng nhánh bugFix đang được chọn (thấy dấu hoa thị chứ?)","","Ta muốn chuyển công việc từ bugFix trực tiếp sang main. Theo cách đó thì các chức năng nhìn có vẻ được phát triển tuần tự, trong khi thực tế chúng được phát triển song song.","","Dùng lệnh `git rebase` để thử nào."],afterMarkdowns:["Tuyệt vời! Giờ thành quả của nhánh bugFix nằm ngay trên main và ta có các commit nằm thẳng tuột.","",'Để ý rằng commit C3 vẫn nằm đâu đó (đã được làm mờ), và commit C3\' là bản "sao chép" mà ta dán lên nhánh main.',"","Vấn đề duy nhất bây giờ là nhánh main vẫn chưa được cập nhật, làm luôn cho nóng nào..."],command:"git rebase main",beforeCommand:"git commit; git checkout -b bugFix C1; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Giờ thì ta đã chuyển sang nhánh `main`. Tiếp tục dán nó vào `bugFix` nào..."],afterMarkdowns:["Đó! Bởi vì `main` là cha ông của `bugFix`, Git đơn giản chuyển tham chiếu của nhánh `main` tiến lên."],command:"git rebase bugFix",beforeCommand:"git commit; git checkout -b bugFix C1; git commit; git rebase main; git checkout main"}},{type:"ModalAlert",options:{markdowns:["Để hoàn thành cấp độ này, làm theo hướng dẫn sau","","* Chuyển sang nhánh mới tên là `bugFix`","* Commit một lần","* Quay về main và commit lần nữa","* Quay trở lại bugFix và rebase sang main","","Chúc may mắn!"]}}]},sl_SI:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Rebase","",'Drugi način kombiniranja dela med branchi je *rebasing*. Rebasing vzame listo commitov, jih "skopira", nato pa jih položi nekam drugam.',"","To se morda sliši komplicirano, ampak prednost rebeasinga je, da se ga lahko uporabi za lepo linearno zaporedje commitov. Commit log / zgodovina repozitorija bo dosti lepša, če je dovoljeno le rebaseanje.","","Poglejmo to na primeru ..."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Tu imamo spet dva brancha; trenutno izbran je branch bugFix (zvezdica).","","Radi bi prestavili naše delo iz bugFix direktno na delo iz masterja. Tako bi izgledalo, kot da sta bili ti dve funkcionalnosti razviti zaporedno, v resnici pa sta bili razviti vzporedno.","","Naredimo sedaj to z `git rebase` ukazom."],afterMarkdowns:["Super! Sedaj je naše delo iz bugFix brancha na vrhu masterja in imamo lepo zaporedje commitov.","",'Omenimo, da commit C3 še vedno obstaja nekje (v drevesu je zbledel), in C3\' je v bistvu "kopija", ki smo jo rebaseali na main.',"","Edini problem je, da tudi main ni bil posodobljen, naredimo to sedaj ..."],command:"git rebase main",beforeCommand:"git commit; git checkout -b bugFix C1; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Sedaj smo checkoutani na `main` branchu. Pojdimo in rebaseajmo na `bugFix`..."],afterMarkdowns:["Tako! Ker je bil `main` prednik `bugFix`, je git enostavno premaknil `main` branch referenco naprej v zgodovini."],command:"git rebase bugFix",beforeCommand:"git commit; git checkout -b bugFix C1; git commit; git rebase main; git checkout main"}},{type:"ModalAlert",options:{markdowns:["Da zaključiš to stopnjo, naredi naslednje:","","* Checkoutaj nov branch poimenovan `bugFix`","* Enkrat commitaj","* Pojdi nazaj na main in commitaj ponovno","* Ponovno checkoutaj bugFix in ga rebaseaj na main","","Srečno!"]}}]},pl:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Rebase","",'Drugim sposobem na łączenie naszej pracy z różnych gałęzi jest *rebase*. Rebase zasadniczo pobiera zestaw commitów, "kopiuje" je i wrzuca je gdzie indziej.',"","Chociaż brzmi to niejasno, zaletą rebase jest to, że można go użyć do stworzenia ładnej, liniowej sekwencji commitów. Rebase sprawi, że historia commitów w repozytorium będzie wyglądała na dużo prostszą, ponieważ nia ma wtedy commitów scalających.","","Sprawdźmy, jak to działa..."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Tutaj znowu mamy dwie gałęzie. Zauważ, że gałąź bugFix jest aktualnie wybrana (zwróć uwagę, że ma gwiazdkę)","","Chcielibyśmy przenieść naszą pracę z gałęzi bugFix bezpośrednio na gałąź main. W ten sposób wyglądałoby to tak, jakby te dwa zadania były rozwijane sekwencyjnie, podczas gdy w rzeczywistości rozwijano je równolegle.","","Zróbmy to za pomocą polecenia `git rebase`."],afterMarkdowns:["Świetnie! Teraz nasz branch bugFix znajduje się tuż nad main i mamy ładną liniową sekwencję commitów.","",'Zauważ, że commit C3 nadal gdzieś istnieje (jest wyblakły w drzewie), a commit C3\' jest "kopią", którą przenosimy na main.',"","Jedynym problemem jest to, że `main` nie został jeszcze zaktualizowany. Zróbmy to teraz..."],command:"git rebase main",beforeCommand:"git commit; git checkout -b bugFix C1; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Znajdujemy się na gałęzi `main`. Przejdźmy dalej i zróbmy połączenie rebase z branchem `bugFix`..."],afterMarkdowns:["Gotowe! Ponieważ `main` był przodkiem `bugFix`, git po prostu przesunął odniesienie do `main` do przodu w historii."],command:"git rebase bugFix",beforeCommand:"git commit; git checkout -b bugFix C1; git commit; git rebase main; git checkout main"}},{type:"ModalAlert",options:{markdowns:["Aby ukończyć ten poziom, wykonaj następujące czynności:","","* Przejdź do nowej gałęzi o nazwie `bugFix`","* Zrób commit","* Wróć do gałęzi `main` i zrób kolejny commit","* Przejdź do `bugFix` i połącz za pomocą rebase z `main`","","Powodzenia!"]}}]},it_IT:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Rebase","",'Il secondo modo per unire il lavoro tra rami è il *rebasing* (ribasare). Quando si ribasa vengono presi una serie di commit, vengono "copiati", e incollati da qualche parte.',"","Anche se sembra un sistema complesso, il vantaggio del rebasing è che può essere usato per creare una sequenza lineare di commit. Il log / storia dei commit del repository sarebbe molto più ordinata e comprensibile se fosse consentito solo il rebasing.","","Vediamolo in azione..."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Anche qui abbiamo ancora due rami; prestate attenzione al fatto che il ramo selezionato è bugFix (notare l'asterisco*)","","Ora vogliamo spostare il nostro lavoro dal ramo bugFix direttamente sul ramo main. In questo modo sembrerà che i due lavori sono stati sviluppati in sequenza, quando in realtà sono stati sviluppati in parallelo.","","Vediamo il comando `git rebase` all'opera."],afterMarkdowns:["Fantastico! Ora il lavoro del ramo bugFix è sopra al main e abbiamo una sequenza lineare di commit.","",'Nota che il commit C3 continua ad esistere (messo in trasparenza), e C3\' è la "copia" che abbiamo ribasato sul main.',"","L'unico problema è che il main non è ancora stato aggiornato, facciamolo ora..."],command:"git rebase main",beforeCommand:"git commit; git checkout -b bugFix C1; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Ora il ramo selezionato è il main. Procediamo e facciamo rebase su `bugFix`..."],afterMarkdowns:["Ecco qua! Visto che main era un antenato di `bugFix`, git sposta semplicemente il riferimento al ramo `main` in avanti."],command:"git rebase bugFix",beforeCommand:"git commit; git checkout -b bugFix C1; git commit; git rebase main; git checkout main"}},{type:"ModalAlert",options:{markdowns:["Per completare questo livello, esegui i seguenti passaggi","","* Crea un nuovo ramo di nome `bugFix`","* Crea un commit","* Torna al main e crea un nuovo commit","* Seleziona nuovamente bugFix e fai rebase sul main","","In bocca al lupo!"]}}]},tr_TR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Rebase","","Branch'ler arasında çalışmayı birleştirmenin ikinci yolu, *rebasing* (tekrar temele almak) işlemidir. Rebasing, temelde bir dizi commit'i alır, bunları \"kopyalar\" ve başka bir yere yerleştirir.","","Bu karmaşık gibi görünse de, rebasing'in avantajı, güzel bir doğrusal commit dizisi oluşturmak için kullanılabilmesidir. Yalnızca rebasing'e izin verildiğinde, repo commit kaydı / geçmişi çok daha temiz gözükebilmektedir.","","Nasıl çalıştığını görelim..."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["İşte yine karşımızda iki branch'imiz var; bugFix branch'inin şu an seçili olduğuna dikkat edin (yıldız işareti ile belirtilmiş).","","BugFix branch'indeki çalışmamızı doğrudan main branch'indeki çalışmanın üzerine taşımak istiyoruz. Böylece bu iki özelliğin sırayla geliştirildiği görünürken, gerçekte eşzamanlı olarak geliştirildiği anlaşılacaktır.","","Hadi bunu `git rebase` komutuyla yapalım."],afterMarkdowns:["Harika! Şimdi bugFix branch'indeki çalışmamız doğrudan main'in üstünde ve güzel bir doğrusal commit dizimiz var.","","C3 commit'inin hala bir yerde bulunduğunu (ağaçta soluk bir görünümde olduğunu) ve C3'ün main üzerine yeniden temellendiği (rebase) ve bir \"kopya\" olduğunu unutmayın.","","Tek sorun, main'in henüz güncellenmemiş olması, hadi şimdi bunu yapalım..."],command:"git rebase main",beforeCommand:"git commit; git checkout -b bugFix C1; git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Şu anda `main` branch'inde bulunuyoruz. Şimdi `bugFix` branch'ini yeniden temel alalım..."],afterMarkdowns:["İşte! main, bugFix'in atsı olduğu için, git sadece main dalının referansını tarihte ileri taşıdı."],command:"git rebase bugFix",beforeCommand:"git commit; git checkout -b bugFix C1; git commit; git rebase main; git checkout main"}},{type:"ModalAlert",options:{markdowns:["Bu seviyeyi tamamlamak için aşağıdaki adımları uygulamanız gerekiyor:","","* `bugFix` isminde yeni bir branch'e geçin","* Bir commit atın","* main'e geri dönün ve bir commit daha atın","* bugFix'e geri dönün ve main'e rebase atın","","Bol Şans!"]}}]}}}},{}],126:[function(e,t,o){o.level={goalTreeString:'{"branches":{"main":{"target":"C2","id":"main","remoteTrackingBranchID":null},"side":{"target":"C4","id":"side","remoteTrackingBranchID":null},"bugFix":{"target":"C7","id":"bugFix","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C1"],"id":"C3"},"C4":{"parents":["C3"],"id":"C4"},"C5":{"parents":["C3"],"id":"C5"},"C6":{"parents":["C5"],"id":"C6"},"C7":{"parents":["C6"],"id":"C7"}},"tags":{"v0":{"target":"C0","id":"v0","type":"tag"},"v1":{"target":"C3","id":"v1","type":"tag"}},"HEAD":{"target":"bugFix","id":"HEAD"}}',solutionCommand:"git commit ",startTree:'{"branches":{"main":{"target":"C2","id":"main","remoteTrackingBranchID":null},"side":{"target":"C4","id":"side","remoteTrackingBranchID":null},"bugFix":{"target":"C6","id":"bugFix","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C1"],"id":"C3"},"C4":{"parents":["C3"],"id":"C4"},"C5":{"parents":["C3"],"id":"C5"},"C6":{"parents":["C5"],"id":"C6"}},"tags":{"v0":{"target":"C0","id":"v0","type":"tag"},"v1":{"target":"C3","id":"v1","type":"tag"}},"HEAD":{"target":"bugFix","id":"HEAD"}}',onlyEvaluateAsserts:!0,goalAsserts:{bugfix:[function(e){return e.__num_commits_upstream>5}]},name:{en_US:"Git Describe",fr_FR:"Git describe",de_DE:"Git Describe",ja:"Git Describe",es_AR:"Git Describe",es_MX:"Git Describe",es_ES:"Git Describe",pt_BR:"Git Describe",gl:"Git Describe",zh_TW:"git describe",zh_CN:"Git Describe",ru_RU:"Git describe",ko:"Git describe(묘사)",uk:"Git Describe",vi:"Git Describe (mô tả)",sl_SI:"Git Describe",it_IT:"Git Describe",pl:"Git describe",tr_TR:"git describe"},hint:{en_US:"Just commit once on bugFix when you're ready to move on",fr_FR:"Faites un commit sur bugFix quand vous êtes prêt",de_DE:"Committe nur einmal auf bugFix, wenn du soweit bist",ja:"次に進む準備が整ったなら、bugFixに対して一回commitしてください",es_AR:"Simplemente commiteá una vez en bugFix cuando estés listo para seguir",es_MX:"Simplemente crea un commit en la rama bugFix cuando estés listo para continuar",es_ES:"Simplemente crea un commit en la rama bugFix cuando estés listo para seguir",pt_BR:"Simplesmente commite uma vez em bugFix quando quiser parar de experimentar",gl:"Simplemente fai commit en bugFix cando estés listo para continuar.",zh_TW:"當你要移動的時候,只要在 bugFix 上面 commit 就好了",zh_CN:"当你准备好时,在 bugFix 分支上面提交一次就可以了",ru_RU:"Когда закончишь, просто сделай commit",ko:"다음으로 넘어가고 싶으면 bugFix를 한번 커밋하면 됩니다.",uk:"Просто зроби один коміт в bugFix коли ти будеш готовий іти далі",vi:"Đơn giản là hãy commit một lẩn ở bugFix là xong rồi",sl_SI:"Commitaj enkrat na bugFix, ko boš pripravljen za nadaljevanje.",it_IT:"Fai un commit da bugFix per procedere",pl:"Scommituj raz na bugFix, żeby przejść dalej",tr_TR:"Hazır olduğunuzda bugFix üzerine sadece bir commit atmanız yeterlidir."},startDialog:{en_US:{childViews:[{type:"ModalAlert",options:{markdowns:["### Git Describe","",'Because tags serve as such great "anchors" in the codebase, git has a command to *describe* where you are relative to the closest "anchor" (aka tag). And that command is called `git describe`!',"","Git describe can help you get your bearings after you've moved many commits backwards or forwards in history; this can happen after you've completed a git bisect (a debugging search) or when sitting down at the computer of a coworker who just got back from vacation."]}},{type:"ModalAlert",options:{markdowns:["Git describe takes the form of:","","`git describe `","","Where `` is anything git can resolve into a commit. If you don't specify a ref, git just uses where you're checked out right now (`HEAD`).","","The output of the command looks like:","","`__g`","","Where `tag` is the closest ancestor tag in history, `numCommits` is how many commits away that tag is, and `` is the hash of the commit being described."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Let's look at a quick example. For this tree below:"],afterMarkdowns:["The command `git describe main` would output:","","`v1_2_gC2`","","Whereas `git describe side` would output:","","`v2_1_gC4`"],command:"git tag v2 C3",beforeCommand:"git commit; go -b side HEAD~1; gc; gc; git tag v1 C0"}},{type:"ModalAlert",options:{markdowns:["That's pretty much all there is to git describe! Try describing a few of the locations in this level to get a feel for the command.","","Once you're ready, just go ahead and commit once to finish the level. We're giving you a freebie :P"]}}]},fr_FR:{childViews:[{type:"ModalAlert",options:{markdowns:["### Git describe","","Parce ce que les tags sont de très bonnes références dans le code, Git a une commande pour *décrire* (describe) la différence entre le commit et le tag le plus récent. Cette commande s'appelle `git describe` !","","Git describe peut vous aider lorsque vous vous êtes beaucoup déplacé; cela peut arriver après un git bisect (chercher l'apparition d'un bug) ou lorsque vous revenez de vacances après 3 semaines sur l'ordinateur d'un collègue."]}},{type:"ModalAlert",options:{markdowns:["Git describe s'écrit comme suit :","","`git describe `","","où `` est n'importe quelle chose que Git peut résoudre en un commit. Si vous ne spécifiez pas de ref, `HEAD` est pris par défaut.","","Le résultat de la commande ressemble à :","","`__g`","","où `tag` est le tag le plus proche dans l'historique, `numCommits` le nombre de commits avec le tag, et `` le hash/identifiant du commit décrit."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Regardons un petit exemple. Prenons cet arbre :"],afterMarkdowns:["La commande`git describe main` donne le résultat :","","`v1_2_gC2`","","alors que `git describe side` donne :","","`v2_1_gC4`"],command:"git tag v2 C3",beforeCommand:"git commit; go -b side HEAD~1; gc; gc; git tag v1 C0"}},{type:"ModalAlert",options:{markdowns:["Ceci résume bien git describe ! Amusez-vous à utiliser cette commande avec d'autres endroits dans ce niveau pour bien comprendre describe.","","Lorsque vous serez prêt, faites simplement un commit pour finir le niveau. Un petit niveau bonus :P"]}}]},zh_TW:{childViews:[{type:"ModalAlert",options:{markdowns:["### git describe","","因為 tag 在 commit tree 上表示的是一個錨點,git 有一個指令可以用來*顯示*離你最近的錨點(也就是 tag),而且這個指令叫做 `git describe`!","","當你已經完成了一個 `git bisect`(一個找尋有 bug 的 commit 的指令),或者是當你使用的是你跑去度假的同事的電腦時, `git describe` 可以幫助你了解你離最近的 tag 差了多少個 commit。"]}},{type:"ModalAlert",options:{markdowns:["`git describe` 的使用方式:","","`git describe `","","`` 是任何一個可以被 git 解讀成 commit 的位置,如果你沒有指定的話,git 會以你目前所在的位置為準(`HEAD`)。","","指令的輸出就像這樣:","","`__g`","","`` 表示的是離 `` 最近的 tag, `numCommits` 是表示這個 tag 離 `` 有多少個 commit, `` 表示的是你所給定的 `` 所表示的 commit 的前七個 id。"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["讓我們來看一個例子,對於下面的 tree:"],afterMarkdowns:["`git describe main` 會輸出:","","`v1_2_gC2`","","`git describe side` 會輸出:","","`v2_1_gC4`"],command:"git tag v2 C3",beforeCommand:"git commit; go -b side HEAD~1; gc; gc; git tag v1 C0"}},{type:"ModalAlert",options:{markdowns:["`git describe` 就是這樣了!試著在這個關卡指定幾個位置來感受一下這個指令吧!","","當你完成的時候,只要一個 commit 就可以結束這個關卡,我們會給你一個免費贈品:P"]}}]},zh_CN:{childViews:[{type:"ModalAlert",options:{markdowns:["### Git Describe","","由于标签在代码库中起着“锚点”的作用,Git 还为此专门设计了一个命令用来**描述**离你最近的锚点(也就是标签),它就是 `git describe`!","","Git Describe 能帮你在提交历史中移动了多次以后找到方向;当你用 `git bisect`(一个查找产生 Bug 的提交记录的指令)找到某个提交记录时,或者是当你坐在你那刚刚度假回来的同事的电脑前时, 可能会用到这个命令。"]}},{type:"ModalAlert",options:{markdowns:["`git describe` 的语法是:","","`git describe `","","`` 可以是任何能被 Git 识别成提交记录的引用,如果你没有指定的话,Git 会使用你目前所在的位置(`HEAD`)。","","它输出的结果是这样的:","","`__g`","","`tag` 表示的是离 `ref` 最近的标签, `numCommits` 是表示这个 `ref` 与 `tag` 相差有多少个提交记录, `hash` 表示的是你所给定的 `ref` 所表示的提交记录哈希值的前几位。","","当 `ref` 提交记录上有某个标签时,则只输出标签名称"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["让我们来看一个例子,对于下面的提交树:"],afterMarkdowns:["`git describe main` 会输出:","","`v1_2_gC2`","","`git describe side` 会输出:","","`v2_1_gC4`"],command:"git tag v2 C3",beforeCommand:"git commit; go -b side HEAD~1; gc; gc; git tag v1 C0"}},{type:"ModalAlert",options:{markdowns:["`git describe` 就是这样了!试着在这个关卡指定几个位置来感受一下这个命令吧!","","当你准备进行下一关时,只要提交一次就可以通过这个关卡。算是我们送你的一个小礼物吧 :P"]}}]},es_AR:{childViews:[{type:"ModalAlert",options:{markdowns:["### Git Describe","",'Como los tags sirven tanto para marcar "hitos" en el código, git tiene un comando para *describir* (_describe_) dónde estás relativo al "hito" más cercano (digamos, "tag"). Y ese comamndo se llama ¡`git describe`!',"","Git describe puede ayudarte a saber dónde estás después de que te hayas movido varios commits hacia adelante o atrás en la historia. Esto puede pasarte después de que termines un git bisect (una búsqueda que te ayuda a debuggear problemas) o cuando te sentás en la computadora de un compañero de trabajo que recién vuelve de unas vacaciones."]}},{type:"ModalAlert",options:{markdowns:["Git describe tiene la siguiente forma:","","`git describe `","","Donde `` es cualquier cosa que git puede resolver a un commit. Si no especificás ninguna referencia, git simplemente usa el commit en que estás parado ahora (`HEAD`).","","La salida de ese comando se ve así:","","`__g`","","Donde `tag` es el tag más cercano en la historia, `numCommits` dice a cuántos commits de ese tag estás, y `` es el hash del commit que estás describiendo."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Veamos un ejemplo breve. Para este árbol de commits:"],afterMarkdowns:["El comando `git describe main` mostraría:","","`v1_2_gC2`","","Mientras que `git describe side` debería mostrar:","","`v2_1_gC4`"],command:"git tag v2 C3",beforeCommand:"git commit; go -b side HEAD~1; gc; gc; git tag v1 C0"}},{type:"ModalAlert",options:{markdowns:["¡Eso es prácticamente todo lo que hay sobre git describe! Probá describiendo algunas referencias en este nivel para amigarte con el comando.","","Cuando quieras, hacé un commit para terminar el nivel. Te estamos dando una gratis :P"]}}]},es_ES:{childViews:[{type:"ModalAlert",options:{markdowns:["### Git Describe","",'Como los tags sirven genial como "marcas" en el código, git tiene un comando para _describir_ dónde estás relativo a la "marca" (es decir, al "tag") más cercana. Y ese comamndo se llama ¡`git describe`!',"","`git describe` puede ayudarte a saber dónde estás después de haberte movido varios commits hacia adelante o atrás en la historia. Esto puede pasarte después de que termines un _git bisect_ (una búsqueda de debug) o cuando te sientas delante de la computadora de un compañero de trabajo que acaba de volver de vacaciones."]}},{type:"ModalAlert",options:{markdowns:["Git describe tiene la siguiente forma:","","`git describe `","","Donde `` es cualquier cosa que git puede resolver a un commit. Si no especificas ninguna referencia, git simplemente usa el commit en el que estás en ese momento (`HEAD`).","","La salida de ese comando se ve así:","","`__g`","","Donde `tag` es el tag más cercano en la historia, `numCommits` es a cuántos commits de ese tag estás, y `` es el hash del commit que está siendo descrito."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Veamos un ejemplo rápido. Para este árbol de commits:"],afterMarkdowns:["El comando `git describe main` mostraría:","","`v1_2_gC2`","","Mientras que `git describe side` mostraría:","","`v2_1_gC4`"],command:"git tag v2 C3",beforeCommand:"git commit; go -b side HEAD~1; gc; gc; git tag v1 C0"}},{type:"ModalAlert",options:{markdowns:["¡Eso es prácticamente todo lo que hay sobre git describe! Prueba describiendo algunas _ubicaciones_ en este nivel para familiarizarte con el comando.","","Cuando estés listo, crea un commit para terminar el nivel. Te estamos dejando este nivel de regalo. :P"]}}]},es_ES:{childViews:[{type:"ModalAlert",options:{markdowns:["### Git Describe","",'Como los tags sirven tanto para marcar "hitos" en el código, git tiene un comando para *describir* (_describe_) dónde estás relativo al "hito" más cercano (digamos, "tag"). Y ese comamndo se llama ¡`git describe`!',"","Git describe puede ayudarte a saber dónde estás después de que te hayas movido varios commits hacia adelante o atrás en la historia. Esto puede pasarte después de que termines un git bisect (una búsqueda que te ayuda a debuggear problemas) o cuando te sientas delante de la computadora de un compañero de trabajo que acaba de volver de unas vacaciones."]}},{type:"ModalAlert",options:{markdowns:["Git describe tiene la siguiente forma:","","`git describe `","","Donde `` es cualquier cosa que git puede resolver a un commit. Si no especificas ninguna referencia, git simplemente usa el commit en el que estás parado ahora (`HEAD`).","","La salida de ese comando se ve así:","","`__g`","","Donde `tag` es el tag más cercano en la historia, `numCommits` dice a cuántos commits de ese tag estás, y `` es el hash del commit que estás describiendo."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Veamos un ejemplo breve. Para este árbol de commits:"],afterMarkdowns:["El comando `git describe main` mostraría:","","`v1_2_gC2`","","Mientras que `git describe side` debería mostrar:","","`v2_1_gC4`"],command:"git tag v2 C3",beforeCommand:"git commit; go -b side HEAD~1; gc; gc; git tag v1 C0"}},{type:"ModalAlert",options:{markdowns:["¡Eso es prácticamente todo lo que hay sobre git describe! Prueba con algunas referencias en este nivel para familiarizarte con el comando.","","Cuando estés listo, crea un commit para terminar el nivel. Te estamos dando una gratis :P"]}}]},pt_BR:{childViews:[{type:"ModalAlert",options:{markdowns:["### Git Describe","",'Devido ao fato de as tags servirem como "âncoras" tão boas no código, o Git tem um comando para *descrever* onde você está com relação à "âncora" (tag) mais próxima. Esse comando é chamado `git describe`!',"","O git describe pode ajudar a recuperar a sua orientação depois de você ter se movido muitos commits para trás ou para frente no histórico; isso pode acontecer depois de você completar um git bisect (uma busca para debug) ou quando se sentar no computador de um colega que acabou de voltar de férias."]}},{type:"ModalAlert",options:{markdowns:["O git describe é chamado da seguinte forma:","","`git describe `","","Onde `` é qualquer coisa que o git possa resolver como uma referência a um commit. Se você não especificar o ref, o Git usa simplesmente o commit atual (`HEAD`).","","A saída do comando é mais ou menos assim:","","`__g`","","Onde `tag` é a tag ancestral mais próxima no histórico, `numCommits` é o número de commits de distância da tag, e `` é o hash do commit sendo descrito."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Vejamos um exemplo rápido. Para a árvore abaixo:"],afterMarkdowns:["O comando `git describe main` daria a saída:","","`v1_2_gC2`","","Enquanto `git describe side` daria:","","`v2_1_gC4`"],command:"git tag v2 C3",beforeCommand:"git commit; go -b side HEAD~1; gc; gc; git tag v1 C0"}},{type:"ModalAlert",options:{markdowns:["É basicamente disso que se trata o git describe! Tente descrever alguns locais da árvore para sentir como o comando se comporta.","","Uma vez que você estiver satisfeito, apenas faça um commit que o nível será finalizado. Essa é de graça :P"]}}]},gl:{childViews:[{type:"ModalAlert",options:{markdowns:["### Git Describe","",'Como as tags fan a función de "áncora" no repositorio, Git ten un comando para *describir* ónde podes estar ti en relación á "áncora" (tag) máis próxima. Ese comando chámase `git describe`!',"","Git describe pode axudar a recuperar a túa posición despois de mover moitos commits para atrás ou para adiante na historia; esto pode suceder depois de que fagas un git bisect (unha búsqueda para atopar erros) ou cando te sentas no ordenador dun colega que chegou das vacacións."]}},{type:"ModalAlert",options:{markdowns:["Git describe lánzase do seguinte xeito:","","`git describe `","","Onde `` é qualquera cousa que git poida resolver como unha referencia a un commit. Se non especificas a ref, git usará o commit actual no que se esté traballando (`HEAD`).","","A resposta do comando é algo semellante a esto:","","`__g`","","Onde `tag` é a tag anterior máis próxima na historia, `numCommits` é o número de commits de distancia ó tag, e `` é o hash do commit no que estamos."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Vexamos un exemplo rápido. Para a árbore de abaixo:"],afterMarkdowns:["O comando `git describe main` daría a saída:","","`v1_2_gC2`","","Mentres que `git describe side` daría:","","`v2_1_gC4`"],command:"git tag v2 C3",beforeCommand:"git commit; go -b side HEAD~1; gc; gc; git tag v1 C0"}},{type:"ModalAlert",options:{markdowns:["¡Básicamente é iso do que trata git describe! Intenta descubrir algúns locais da árbore para sentir como se comporta o comando.","","Cando estés listo, fai un commit para que o nivel remate. Esa é a gracia."]}}]},de_DE:{childViews:[{type:"ModalAlert",options:{markdowns:["### Git Describe","",'Weil Tags so super als "Anker" im Repository dienen können, bietet Git einen Befehl um zu *beschreiben*, wo du dich relativ zum nächsten "Anker" (also Tag) befindest. Und der heißt `git describe`.',"","Er hilft dir dabei, dir einen Überblick zu verschaffen, nachdem du viele Commits im Log zurück- oder vorgegangen bist; das kann vorkommen, nachdem du ein `git bisect` (eine Fehlersuche) abgeschlossen hast oder wenn du dich an den Rechner eines Kollegen setzt, der gerade aus dem Urlaub gekommen ist."]}},{type:"ModalAlert",options:{markdowns:["Der Befehl ist folgendermaßen aufgebaut:","","`git describe `","","Dabei ist `` jeder beliebige Name, der einem Commit zugeordnet ist (Branch, Tag etc). Wenn du keinen angibst, benutzt Git `HEAD`, also den aktuellen Checkout.","","Die Befehlsausgabe sieht so aus:","","`__g`","","`` ist dabei der nächstliegende Tag in den Vorgänger-Commits, `` zeigt an, wie viele Commits dieses Tag entfernt ist und `` ist das SHA des Commits, auf den HEAD zeigt.","","**Achtung**: `` und `` erscheint nur, wenn HEAD nicht auf ein Tag zeigt. `git describe` verarbeitet standardmäßig nur annotierte Tags. Um nicht annotierte Tags zu sehen, verwende bitte `git describe --tags`."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Schauen wir uns das schnell an einem Beispiel an. Für den folgenden Baum:"],afterMarkdowns:["Der Befehl `git describe main` würde folgendes ausgeben:","","`v1_2_gC2`","","Wohingegen `git describe side` dies ausgeben würde:","","`v2_1_gC4`"],command:"git tag v2 C3",beforeCommand:"git commit; go -b side HEAD~1; gc; gc; git tag v1 C0"}},{type:"ModalAlert",options:{markdowns:["Das ist so ziemlich alles, was es über `git describe` zu wissen gibt. Versuch ein paar Orte in diesem Level damit auszugeben, um ein Gefühl dafür zu bekommen.","","Sobald du fertig bist, mach einfach einen Commit um den Level abzuschließen. Der geht auf's Haus. :P"]}}]},ja:{childViews:[{type:"ModalAlert",options:{markdowns:["### Git Describe","","タグは、ソースリストの優秀な「アンカー(標識)」として作用するので、Gitには最も近く関係のある「アンカー」(タグの別名)を*記述するため*のコマンドがあります。そして、そのコマンドは`git describe`と呼ばれています!","","Gitの`describe`は、あなたが大量のコミットの中を移動するとき、今どこにいるかを知るのを助けてくれます(このような状況は、例えばあなたがデバッグ検索コマンドの一つ`git bisect`を走らせ終わった後や、同僚が休暇から帰ってきて自分の席に座るときに起こります)。"]}},{type:"ModalAlert",options:{markdowns:["Gitの`describe`は、以下の形式をとります:","","`git describe <参照>`","","`<参照>`には、Gitが解釈可能なコミットの参照表現(ブランチやタグの指定、コミットハッシュなど)をいれます。もし、何も入力しなかった場合、Gitは現在の位置のコミット(`HEAD`)を使います。","","コマンドの結果は以下のようになります:","","`<タグ>_<コミット数>_g<ハッシュ>`","","`<タグ>`には履歴の一番最新のタグ名が、`<コミット数>`にはそのタグから幾つのコミットがあったか、`<ハッシュ>`はそのコミットのハッシュがそれぞれ入ります。"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["軽い例を見てみましょう。この木においての例は以下のようになります:"],afterMarkdowns:["コマンド`git describe main`の結果は以下のようになります:","","`v1_2_gC2`","","さらに`git describe side`の結果は以下のようになります:","","`v2_1_gC4`"],command:"git tag v2 C3",beforeCommand:"git commit; go -b side HEAD~1; gc; gc; git tag v1 C0"}},{type:"ModalAlert",options:{markdowns:["`describe`によってGitの情報が簡潔に全て記述されます!このレベルでは、このコマンドの感触をつかむため幾つかの場所で`describe`をしてみてください。","","終わったら、最新のコミットに行き一度コミットを行えばこのレベルを終了することができます。この先では、いくつかの挑戦課題を用意しています :P"]}}]},ru_RU:{childViews:[{type:"ModalAlert",options:{markdowns:["### Git Describe","","Теги являются прекрасными ориентирами в истории изменений, поэтому в git есть команда, которая показывает, как далеко текущее состояние от ближайшего тега. И эта команда называется `git describe`","","Git describe помогает сориентироваться после отката на много коммитов по истории изменений. Такое может случиться, когда вы сделали `git bisect` или если вы недавно вернулись из отпуска =)"]}},{type:"ModalAlert",options:{markdowns:["Git describe выглядит примерно так:","","`git describe `","","Где `ref` — это что-либо, что указывает на конкретный коммит. Если не указать `ref`, то git будет считать, что указано текущее положение (`HEAD`).","","Вывод команды выглядит примерно так:","","`__g`","","Где `tag` – это ближайший тег в истории изменений, `numCommits` – это на сколько далеко мы от этого тега, а `hash` – это хеш коммита, который описывается."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Посмотрим на простой пример. Для дерева, показанного ниже:"],afterMarkdowns:["Команда `git describe main` выведет:","","`v1_2_gC2`","","Тогда как `git describe side` выведет:","","`v2_1_gC4`"],command:"git tag v2 C3",beforeCommand:"git commit; go -b side HEAD~1; gc; gc; git tag v1 C0"}},{type:"ModalAlert",options:{markdowns:["Это, в общем-то, всё, что можно сказать про `git describe`. Попробуй выполнить команду на нескольких коммитах.","","Как только наиграешься, просто сделай один коммит, и уровень будет пройден."]}}]},ko:{childViews:[{type:"ModalAlert",options:{markdowns:["### Git Describe","",'커밋 트리에서 태그가 훌륭한 "닻"역할을 하기 때문에, git에는 여러분이 가장 가까운 "닻(태그)"에 비해 상대적으로 어디에 위치해있는지 *describe(묘사)*해주는 명령어가 있습니다. 이 명령어는 `git describe` 입니다!',"","Git describe는 커밋 히스토리에서 앞 뒤로 여러 커밋을 이동하고 나서 커밋 트리에서 방향감각을 다시 찾는데 도움을 줍니다; 이런 상황은 git bisect(문제가 되는 커밋을 찾는 명령어라고 간단히 생각하자)를 하고 나서라던가 휴가를 다녀온 동료의 컴퓨터에 앉는경우가 있습니다."]}},{type:"ModalAlert",options:{markdowns:["Git describe 는 다음의 형태를 가지고 있습니다:","","`git describe `","","``에는 commit을 의미하는 그 어떤것이던 쓸 수 있습니다. 만약 ref를 특정 지어주지 않으면, git은 그냥 지금 체크아웃된곳을 사용합니다 (`HEAD`).","","명령어의 출력은 다음과 같은 형태로 나타납니다:","","`__g`","","`tag`는 가장 가까운 부모 태그를 나타냅니다. `numCommits`은 그 태그가 몇 커밋 멀리있는지를 나타냅니다. ``는 묘사하고있는 커밋의 해시를 나타냅니다."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["간단한 예제를 확인해 봅시다. 아래의 트리에서:"],afterMarkdowns:["`git describe main` 명령은 다음을 출력합니다:","","`v1_2_gC2`","","`git describe side`는 다음을 출력합니다:","","`v2_1_gC4`"],command:"git tag v2 C3",beforeCommand:"git commit; go -b side HEAD~1; gc; gc; git tag v1 C0"}},{type:"ModalAlert",options:{markdowns:["이정도면 git describe를 충분히 활용할 수 있습니다! 이 레벨의 몇 지점을 describe 명령어를 통해 확인해보면서 느낌을 익혀 봅시다.","","준비가 되면 커밋을 한번해서 레벨을 종료하세요. 자유롭게 연습해보세요 :P"]}}]},uk:{childViews:[{type:"ModalAlert",options:{markdowns:["### Git Describe","",'Через те, що таги є такими чудовими "орієнтирами" по коду, git також має команду *описати* (describe) де ти є відносно найближчого "орієнтира" (тобто тага). І ця команда називається `git describe`!',"","Git describe допоможе тобі знайти себе після того як ти перестрибнеш на кілька комітів по історії вперед чи назад; це може статися після того як ти закінчив git bisect (пошук-дебаггер) чи коли тебе попросили підійти до колеги, котрий щойно прийшов з відпустки."]}},{type:"ModalAlert",options:{markdowns:["Git describe має наступну форму:","","`git describe <посилання>`","","Де `<посилання>` -- це будь-що, що вказує на конкретний коміт. Якщо ти не вкажеш посилання, git використає поточну локацію (`HEAD`).","","Вивід команди виглядає як:","","`<таг>_<к-ть комітів>_g<хеш>`","","де `таг` -- це найближчий попередній таг з історії; `к-ть комітів` -- це наскільки далеко цей таг в історії, а `<хеш>` -- це хеш коміту, який описується."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Розгляньмо короткий приклад. Для дерева нижче:"],afterMarkdowns:["Команда `git describe main` виведе:","","`v1_2_gC2`","","коли `git describe side` виведе:","","`v2_1_gC4`"],command:"git tag v2 C3",beforeCommand:"git commit; go -b side HEAD~1; gc; gc; git tag v1 C0"}},{type:"ModalAlert",options:{markdowns:["Ось і все що ти маєш знати про git describe. Спробуй виконати describe для різних місць в дереві комітів щоб набити руку.","","Як будеш готовий, просто закоміть щось щоб закінчити цей рівень. Трохи шари :P"]}}]},vi:{childViews:[{type:"ModalAlert",options:{markdowns:["### Mô tả của Git","",'Bởi gì thẻ đóng vai trò như là "mỏ neo" trên cây lịch sử rất tốt rồi, Git cũng có lệnh để *mô tả* tương quan của bạn đến vị trí "mỏ neo" (thẻ) gần nhất. Và đó là `git describe`!',"","`git describe` có thể giúp bạn định hướng sau khi dịch chuyển qua lại nhiều lần trên cây lịch sử; đặc biệt là sau khi sử dụng `git bisect` (công cụ tìm kiếm lỗi của Git) hoặc khi sử dụng máy của đồng nghiệp mới đi nghỉ mát về."]}},{type:"ModalAlert",options:{markdowns:["Cú pháp sử dụng Git describe như sau:","","`git describe `","","Trong đó `` là bất kỳ thứ gì mà Git có thể dùng để xác định commit. Nếu bạn không chỉ định tham chiếu, Git sẽ dùng vị trí hiện tại của bạn (`HEAD`).","","Đầu ra của câu lệnh sẽ như sau:","","`
__g`","","Trong đó `
` là thẻ tổ tiên gần nhất, `` là số lượng commit tính từ tham chiếu đến thẻ, và `` là mã băm của commit được mô tả."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Cùng xem nhanh một ví dụ trên cây lịch sử phía dưới:"],afterMarkdowns:["Câu lệnh `git describe main` sẽ cho kết quả:","","`v1_2_gC2`","","Trong khi `git describe side` sẽ cho kết quả:","","`v2_1_gC4`"],command:"git tag v2 C3",beforeCommand:"git commit; go -b side HEAD~1; gc; gc; git tag v1 C0"}},{type:"ModalAlert",options:{markdowns:["Từng đó thông tin là khá đủ về git describe! Hãy thử dùng `git describe` trên vài vị trí để hiểu về lệnh này.","","Một khi bạn đã sẵn sàng thì chỉ cần commit 1 lần là qua bài này. Bài này dễ chơi rồi nhé :P"]}}]},sl_SI:{childViews:[{type:"ModalAlert",options:{markdowns:["### Git Describe","",'Ker tagi služijo kot tako odlična "sidra" v kodi, ima git ukaz za *opis* kje si, relativno glede na najbližje "sidro" (aka tag). Temu ukazu se reče `git describe`!',"","Git describe se ti lahko pomaga orientirati, če si premikal veliko commitov naprej in nazaj po zgodovini; to se lahko zgodi, če si končal git bisekcijo (iskanje kot debuggiranje) ali če se usedeš za sodelavčev računalnik, ko je ravno prišel z dopusta."]}},{type:"ModalAlert",options:{markdowns:["Git describe izgleda takole:","","`git describe `","","Kjer je `` karkoli kar lahko git prepozna kot commit. Če ne podaš ref-a, git uporabi mesto, kjer si trenutno checkoutan (`HEAD`).","","Izpis ukaza je sledeč:","","`__g`","","Kjer je `tag` najbližji prednik v zgodovini, `numCommits` je število commitov oddaljenosti tag-a in `` je hash commita, ki ga opisujemo."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Poglejmo hiter primer. Za drevo spodaj:"],afterMarkdowns:["Bi ukaz `git describe main` izpisal:","","`v1_2_gC2`","","Ukaz `git describe side` pa bi vrnil:","","`v2_1_gC4`"],command:"git tag v2 C3",beforeCommand:"git commit; go -b side HEAD~1; gc; gc; git tag v1 C0"}},{type:"ModalAlert",options:{markdowns:["To je približno vse, kar se tiče git describe-a! Poizkusi za občutek opisati nekaj lokacij v tej stopnji.","","Ko si pripravljen, samo enkrat commitaj, da zaključiš stopnjo. Tole ti častimo :P"]}}]},pl:{childViews:[{type:"ModalAlert",options:{markdowns:["### Git describe","",'Ponieważ znaczniki służą jako świetne "kotwice" w bazie kodu, git ma polecenie *opisujące*, gdzie jesteś w stosunku do najbliższej "kotwicy". I jest to `git describe`!',"","Polecenie `git describe` może pomóc ci zorientować się w sytuacji, gdy przesuniesz wiele commitów wstecz lub do przodu w historii; może się to zdarzyć po użyciu `git bisect` (na potrzeby debugowania) lub gdy siedzisz przy komputerze współpracownika, który właśnie wrócił z wakacji."]}},{type:"ModalAlert",options:{markdowns:["Git describe przyjmuje postać:","","`git describe `","","Gdzie `` jest czymkolwiek, co git może odnieść do commita. Jeśli nie podasz ``, git użyje aktualnie checkoutowanego miejsca (`HEAD`).","","Wynik polecenia wygląda następująco:","","`__g`","","`tag` jest znacznikiem najbliższego przodka w historii, `numCommits` jest liczbą commitów od tego znacznika, a `` jest haszem opisywanego commitu."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Przyjrzyjmy się krótkiemu przykładowi. Dla tego drzewa poniżej:"],afterMarkdowns:["polecenie `git describe main` dałoby wynik:","","`v1_2_gC2`","","a `git describe side` dałoby wynik:","","`v2_1_gC4`"],command:"git tag v2 C3",beforeCommand:"git commit; go -b side HEAD~1; gc; gc; git tag v1 C0"}},{type:"ModalAlert",options:{markdowns:["To w zasadzie wszystko, co musisz wiedzieć o `git describe`! Spróbuj opisać kilka miejsc na tym poziomie, aby wyczuć to polecenie.","","Kiedy zechesz przejść dalej, po prostu zrób jeden commit, aby ukończyć poziom. Masz to w gratisie :P"]}}]},it_IT:{childViews:[{type:"ModalAlert",options:{markdowns:["### Git Describe","",'Visto che i tag fungono da "ancore", si può usare il comando `git describe` per capire dove ci si trova in riferimento all\'"ancora" (tag) più vicina!',"","Git describe aiuta ad orientarti dopo che hai creato molti commit su per giù nell'albero; oppure dopo che hai concluso un git bisect (per ricercare bug) o quando utilizzi il computer di un collega che è appena tornato dalle vacanze."]}},{type:"ModalAlert",options:{markdowns:["Git describe ha questa forma:","","`git describe `","","Dove `` è qualunque cosa che può indicare un commit. Se non specifichi un ref, git farà riferimento alla tua posizione attuale (`HEAD`).","","L'output del comando sarà:","","`__g`","","Dove `tag` è il tag antenato più vicino, `numCommits` corrisponde al numero di commit tra ref e il tag, e `` è l'hash del commit che è descritto."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Vediamo un esempio semplice. In quest'albero:"],afterMarkdowns:["Il comando `git describe main` genera come output:","","`v1_2_gC2`","","Mentre `git describe side` genererà:","","`v2_1_gC4`"],command:"git tag v2 C3",beforeCommand:"git commit; go -b side HEAD~1; gc; gc; git tag v1 C0"}},{type:"ModalAlert",options:{markdowns:["Questo è più o meno quanto fa git describe! Prova questo comando in vari punti in questo livello per prendere confidenza.","","Quando hai finito, procedi e crea un commit per concludere il livello. Consideralo un omaggio della casa :P"]}}]},tr_TR:{childViews:[{type:"ModalAlert",options:{markdowns:["### Git Describe (Tanımla)","",'Etiketler kod tabanında harika "çekirdekler" olarak hizmet ettiği için, Git size en yakın "anchor\'a (etikete)" göre nerede olduğunuzu açıklamak için bir komut sunar. Bu komut `git describe` \'dır!',"","Git describe, birçok commit'i geriye veya ileriye doğru hareket ettikten sonra nerede bulunduğunuzun anlaşılmasına yardımcı olabilir; bu, bir hata ayıklama araması olan git bisect'i tamamladıktan sonra veya tatilden yeni dönen bir iş arkadaşının bilgisayarına oturduğunuzda karşınıza çıkabilir."]}}]}}}},{}],127:[function(e,t,o){o.level={compareOnlyMainHashAgnosticWithAsserts:!0,goalAsserts:{main:[function(e){return e.C4>e.C1}]},disabledMap:{"git revert":!0},goalTreeString:"%7B%22branches%22%3A%7B%22main%22%3A%7B%22target%22%3A%22C4%27%22%2C%22id%22%3A%22main%22%7D%2C%22debug%22%3A%7B%22target%22%3A%22C2%22%2C%22id%22%3A%22debug%22%7D%2C%22printf%22%3A%7B%22target%22%3A%22C3%22%2C%22id%22%3A%22printf%22%7D%2C%22bugFix%22%3A%7B%22target%22%3A%22C4%27%22%2C%22id%22%3A%22bugFix%22%7D%7D%2C%22commits%22%3A%7B%22C0%22%3A%7B%22parents%22%3A%5B%5D%2C%22id%22%3A%22C0%22%2C%22rootCommit%22%3Atrue%7D%2C%22C1%22%3A%7B%22parents%22%3A%5B%22C0%22%5D%2C%22id%22%3A%22C1%22%7D%2C%22C2%22%3A%7B%22parents%22%3A%5B%22C1%22%5D%2C%22id%22%3A%22C2%22%7D%2C%22C3%22%3A%7B%22parents%22%3A%5B%22C2%22%5D%2C%22id%22%3A%22C3%22%7D%2C%22C4%22%3A%7B%22parents%22%3A%5B%22C3%22%5D%2C%22id%22%3A%22C4%22%7D%2C%22C4%27%22%3A%7B%22parents%22%3A%5B%22C1%22%5D%2C%22id%22%3A%22C4%27%22%7D%7D%2C%22HEAD%22%3A%7B%22target%22%3A%22main%22%2C%22id%22%3A%22HEAD%22%7D%7D",solutionCommand:"git rebase -i main --solution-ordering C4; git rebase bugFix main",startTree:'{"branches":{"main":{"target":"C1","id":"main"},"debug":{"target":"C2","id":"debug"},"printf":{"target":"C3","id":"printf"},"bugFix":{"target":"C4","id":"bugFix"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C2"],"id":"C3"},"C4":{"parents":["C3"],"id":"C4"}},"HEAD":{"target":"bugFix","id":"HEAD"}}',name:{ko:"딱 한 개의 커밋만 가져오기",en_US:"Grabbing Just 1 Commit",fr_FR:"Choisir seulement 1 commit",de_DE:"Einen Commit pflücken",es_AR:"Tomando un único commit",es_ES:"Tomando un único commit",es_MX:"Tomando un único commit",pt_BR:"Pegando um único commit",gl:"Escollendo un único commit",ja:"一つのコミットのみを取得",zh_CN:"只取一个提交记录",zh_TW:"只取一個 commit",ru_RU:"Выберем один коммит.",uk:"Вибираємо всього один коміт",vi:"Chỉ lấy 1 commit",sl_SI:"Izbiranje Samo Enega Commita",it_IT:"Prendi solo 1 Commit",pl:"Wzięcie tylko 1 commita",tr_TR:"Sadece 1 commit'i yakalamak"},hint:{en_US:"Remember, interactive rebase or cherry-pick is your friend here",de_DE:"Vergiss nicht: Hier kommst du mit interaktivem Rebase oder Cherry-Picking weiter",fr_FR:"Souvenez-vous, les rebases interactifs ou cherry-pick sont vos amis ici.",es_AR:"Acordate, el rebase interactivo o cherry-pick son tus amigos acá",es_ES:"Recuerda, el rebase interactivo y el cherry-pick son tus amigos",pt_BR:"Lembre-se, o rebase interativo ou o cherry-pick são seus amigos aqui",gl:"Recorda, o rebase interativo ou cherry-pick é un dos teus colegas aquí",ja:"このレベルではインタラクティブモードのrebaseやcherry-pickがクリアのカギです",ko:"대화식 리베이스(rebase -i)나 or 체리픽(cherry-pick)을 사용하세요",zh_CN:"你有两个朋友,cherry-pick 和 rebase -i",zh_TW:"記住,使用互動式的 rebase 或者 cherry-pick 會很有幫助",ru_RU:"Не забывай, что интерактивный rebase и cherry-pick – это твои друзья!",uk:"Не забувай, що інтерактивний rebase та cherry-pick -- це твої друзі!",vi:"Hãy nhớ 2 anh bạn tương tác rebase và cherry-pick",sl_SI:"Pomni, interaktivni rebase ali cherry-pick sta tu tvoja prijatelja.",it_IT:"Ricorda, rebase interattivo o cherry-pick sono tuoi amici",pl:"Pamiętaj, że znasz już interaktywny rebase oraz cherry-pick",tr_TR:"Unutmayın interactive rebase ve cherry-pick buradaki en iyi dostlarınız."},startDialog:{en_US:{childViews:[{type:"ModalAlert",options:{markdowns:["## Locally stacked commits","","Here's a development situation that often happens: I'm trying to track down a bug but it is quite elusive. In order to aid in my detective work, I put in a few debug commands and a few print statements.","","All of these debugging / print statements are in their own commits. Finally I track down the bug, fix it, and rejoice!","","Only problem is that I now need to get my `bugFix` back into the `main` branch. If I simply fast-forwarded `main`, then `main` would get all my debug statements which is undesirable. There has to be another way..."]}},{type:"ModalAlert",options:{markdowns:["We need to tell git to copy only one of the commits over. This is just like the levels earlier on moving work around -- we can use the same commands:","","* `git rebase -i`","* `git cherry-pick`","","To achieve this goal."]}},{type:"ModalAlert",options:{markdowns:["This is a later level so we will leave it up to you to decide which command you want to use, but in order to complete the level, make sure `main` receives the commit that `bugFix` references."]}}]},fr_FR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Les commits empilés localement","","Voici une situation qui arrive souvent : j'ai un bug assez difficile à trouver et corriger. Pour localiser la source du problème je rajoute des commandes et prints de debug à travers le code.","","Tous ces debug se retrouvent dans une branche particulière. Je trouve le bug et le répare, comme toujours !","","Le problème c'est que je ne peux pas faire de merge ou rebase, car tous ces commits de debug seront dans le main. Il doit y avoir une autre façon..."]}},{type:"ModalAlert",options:{markdowns:["Pour réussir ce niveau, nous avons besoin de dire à Git quel commit particulier recopier. C'est comme pour le niveau précédent : nous pouvons utiliser les mêmes commandes :","","* `git rebase -i`","* `git cherry-pick`"]}},{type:"ModalAlert",options:{markdowns:["C'est un niveau avancé, donc à vous de choisir quelle commande utiliser, mais pour réussir ce niveau, assurez-vous que `main` reçoive le même commit que `bugFix` référence."]}}]},es_AR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Commits localmente stackeados","","Esta es una escena que suele pasar cuando uno desarrolla: estoy tratando de encontrar un bug bastante escurridizo. Para ayudar en mi tarea de detective, agrego un par de comandos de debug, y algunas sentencias para imprimir el estado de mi sistema.","","Todas estas cosas de imprimir y debuggear estan en su propia rama. Finalmente encuentro el problema, lo soluciono, ¡y disfruto!","","El único problema es que ahora necesito llevar mi `bugFix` a la rama `main`. Si simplemente fast-forwardeo `main`, entonces `main` va a tener todos mis agregados de debugging, que es indeseado. Tiene que haber otro modo..."]}},{type:"ModalAlert",options:{markdowns:["Necesitamos decirle a git que sólo copie uno de los commits. Esto es tal como los niveles anteriores de mover commits por ahí -- podemos usar los mismos comandos:","","* `git rebase -i`","* `git cherry-pick`","","Para conseguir este resultado."]}},{type:"ModalAlert",options:{markdowns:["Este es un nivel más avanzado, así que está en vos decidir cuál de los dos comandos querés usar, pero para completar el nivel asegurate de que `main` recibe el commit que `bugFix` referencia."]}}]},es_ES:{childViews:[{type:"ModalAlert",options:{markdowns:["## Commits localmente stackeados","","Esta es una escena que suele pasar cuando uno desarrolla: estoy tratando de encontrar un bug bastante escurridizo. Para ayudar en mi tarea de detective, agrego un par de comandos de debug, y algunas sentencias para imprimir el estado de mi sistema.","","Todas estas cosas de imprimir y debuggear estan en su propia rama. Finalmente encuentro el problema, lo soluciono, ¡y disfruto!","","El único problema es que ahora necesito llevar mi `bugFix` a la rama `main`. Si simplemente fast-forwardeo `main`, entonces `main` va a tener todos mis agregados de debugging, lo cual no es deseable. Tiene que haber otro modo..."]}},{type:"ModalAlert",options:{markdowns:["Necesitamos decirle a git que sólo copie uno de los commits. Esto es tal como los niveles anteriores de mover commits por ahí -- podemos usar los mismos comandos:","","* `git rebase -i`","* `git cherry-pick`","","Para conseguir este resultado."]}},{type:"ModalAlert",options:{markdowns:["Este es un nivel más avanzado, así que debes decidir cuál de los dos comandos quieres usar, pero para completar el nivel asegurate de que `main` recibe el commit que `bugFix` referencia."]}}]},es_MX:{childViews:[{type:"ModalAlert",options:{markdowns:["## Commits localmente apilados","","Esta es una situación que suele pasar cuando uno desarrolla: estoy tratando de encontrar un bug bastante escurridizo. Para ayudar en mi tarea de detective, agrego un par de comandos de depuración y algunas sentencias para imprimir el estado de mi sistema.","","Todas estas cosas de imprimir y depurar estan en su propia rama. Finalmente encuentro el problema, lo soluciono y ¡disfruto!","","El único problema es que ahora necesito llevar mi `bugFix` a la rama `main`. Si simplemente fast-forwardeo `main`, entonces `main` va a tener todos mis agregados de depuración, lo cual no es deseable. Tiene que haber otro modo..."]}},{type:"ModalAlert",options:{markdowns:["Necesitamos decirle a Git que sólo copie uno de los commits. Esto es tal como los niveles anteriores de mover commits por ahí -- podemos usar los mismos comandos:","","* `git rebase -i`","* `git cherry-pick`","","Para conseguir este resultado."]}},{type:"ModalAlert",options:{markdowns:["Este es un nivel más avanzado, así que debes decidir cuál de los dos comandos quieres usar, pero para completar el nivel asegurate de que `main` recibe el commit que `bugFix` referencia."]}}]},pt_BR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Commits empilhados localmente","","Aqui está uma situação de acontece frequentemente com desenvolvedores: Estou tentando encontrar um bug, mas ele é escorregadio. Para auxiliar meu trabalho de detetive, eu coloco alguns comandos de debug e prints.","","Todos esses comandos de debug e mensagens estão em seus próprios ramos. Finalmente eu encontro o bug, corrijo, e me regozijo!","","O único problema é que agora eu preciso devolver o meu `bugFix` ao ramo `main`. Se eu simplesmente der um fast-forward no `main`, então o `main` terminará contendo todos os comandos de debug, o que é indesejável. Deve existir alguma outra forma..."]}},{type:"ModalAlert",options:{markdowns:["Precisamos dizer ao git para copiar somente um dos commits. Esta situação é exatamente a mesma dos níveis anteriores a respeito de como mover trabalho -- podemos usar os mesmos comandos:","","* `git rebase -i`","* `git cherry-pick`","","Para alcançar o objetivo."]}},{type:"ModalAlert",options:{markdowns:["Este é um nível avançado, então vamos deixar para você a decisão de qual comando usar, mas para completar este nível, certifique-se de que o `main` receba o commit referenciado por `bugFix`."]}}]},gl:{childViews:[{type:"ModalAlert",options:{markdowns:["## Commits apilados localmente","","Aquí estamos nunha situación que acontece de cotio con desenvolvedores: Estou intentando atopar un erro, mais é escorredizo. Para axudar ó meu traballo de detective, eu coloco algúns comandos de debug e prints.","","¡Todos esos comandos de debug e mensaxes están nas súas ramas propias. Finalmente eu atopo o erro, arránxoo e reorganizo!","","O único problema é que agora eu preciso devolver o meu `bugFix` á rama `main`. Se eu fixera simplemente un fast-forward en `main`, entón o `main` rematará contendo tódolos comandos de debug, o que é indesexable. Debe existir algunha outra forma..."]}},{type:"ModalAlert",options:{markdowns:["Precisamos decirlle a git que copie só os commits que nos interesa. Esta situación é exatamente a mesma dos niveis anteriores respecto de como mover o traballo -- podemos usar os mesmos comandos:","","* `git rebase -i`","* `git cherry-pick`","","Para acadar o objetivo."]}},{type:"ModalAlert",options:{markdowns:["Este é un nivel avanzado, entón imos deixarche a decisión de qué comando empregar, pero para completar este nivel, asegurate de que a rama `main` colla o commit referenciado por `bugFix`."]}}]},de_DE:{childViews:[{type:"ModalAlert",options:{markdowns:["## Lokale Commit-Haufen","","Folgende Situation habe ich beim Entwickeln des Öfteren: Ich bin auf der Suche nach einem Bug, aber er ist echt schwer zu finden. Um ihm auf die Spur zu kommen schreibe ich mehrere Debug-Kommandos und print-Befehle in den Code.","","Die committe ich auch immer wieder, je weiter die Suche mich trägt; natürlich in einem lokalen Branch. Schließlich finde ich den Bug, fixe ihn und freue mich!","","Einziges Problem ist, dass ich diesen `bugFix` jetzt zurück in den `main` kriegen muss. Wenn ich einfach den `main` vorspule oder meinen Branch hinein merge, bekäme der `main` auch die ganzen Debug-Befehle, was nicht gewünscht ist. Das muss anders gehen ..."]}},{type:"ModalAlert",options:{markdowns:["Wir müssten Git sagen können, dass es nur einen Commit herüber kopieren soll. Das ist genauso wie die Level vorhin zum Code-Verschieben. Wir können dieselben Befehle benutzen:","","* `git rebase -i`","* `git cherry-pick`",""]}},{type:"ModalAlert",options:{markdowns:["Da dies ein späterer Level ist, überlasse ich es dir zu entscheiden, welchen Befehl du benutzen willst. Aber um das Level zu schaffen musst du irgendwie sicherstellen, dass `main` den Commit bekommt, auf den `bugFix` zeigt."]}}]},ja:{childViews:[{type:"ModalAlert",options:{markdowns:["## ローカルに積み上がったコミット","","実際の開発ではこういうケースがよくあります:「バグの原因調査を試みているがバグの再現性がかなり低い。調査の補助のために、いくつかのデバッグ用の命令やprint文を差し込んでいる。」","","これらのデバッグ用のコードはバグ修正用のブランチにコミットされています。そしてついにバグの原因を突き止めて、修正した!やった!","","あとは`bugFix`ブランチを`main`ブランチに統合できればOK。そこで単純に`main`をfast-forwardすればよいかというと、それでは`main`ブランチの中にデバッグ用のコードも混入してしまいます。"]}},{type:"ModalAlert",options:{markdowns:["ここでGitの魔法が力を発揮します。解決のためにはいくつかの方法がありますが、最も素直な解決方法は2つあって:","","* `git rebase -i`","* `git cherry-pick`","","インタラクティブモードの(`-i`オプションつきの)rebaseによって、保持したいコミットと破棄したいコミットを選り分けることができます。コミットの順序を変更することも可能です。この方法は、一部の変更をどこかへやってしまいたい時に便利です。","","もう一方のcherry-pickを使うと、持っていきたいコミットを選んで`HEAD`の先にストンと落とすことができます。"]}},{type:"ModalAlert",options:{markdowns:["後半の章ですのでどう解決するかをもう自分で考えることができると思います。このレベルをクリアするためには、`bugFix`が持っているコミットを`main`ブランチが受け取る必要がある点には注意してください。"]}}]},zh_CN:{childViews:[{type:"ModalAlert",options:{markdowns:["## 本地栈式提交","","来看一个在开发中经常会遇到的情况:我正在解决某个特别棘手的 Bug,为了便于调试而在代码中添加了一些调试命令并向控制台打印了一些信息。","","这些调试和打印语句都在它们各自的提交记录里。最后我终于找到了造成这个 Bug 的根本原因,解决掉以后觉得沾沾自喜!","","最后就差把 `bugFix` 分支里的工作合并回 `main` 分支了。你可以选择通过 fast-forward 快速合并到 `main` 分支上,但这样的话 `main` 分支就会包含我这些调试语句了。你肯定不想这样,应该还有更好的方式……"]}},{type:"ModalAlert",options:{markdowns:["实际我们只要让 Git 复制解决问题的那一个提交记录就可以了。跟之前我们在“整理提交记录”中学到的一样,我们可以使用","","* `git rebase -i`","* `git cherry-pick`","","来达到目的。"]}},{type:"ModalAlert",options:{markdowns:["由于我们刚刚闯过类似的关卡,所以要不要再尝试一次就看你自己了。但是如果你想试一把的话,确保 `main` 分支能得到 `bugFix` 分支上的相关提交。"]}}]},zh_TW:{childViews:[{type:"ModalAlert",options:{markdowns:["## 在 local 的堆疊的 commit","","有一個經常發生的情況:我在追蹤一個有點棘手的 bug,但是它實在太難抓出來了,在不得已的情況下我加入了一些 debug 的指令,並且做了一些 commit。","","所有的這些 debug 的指令都只在 `bugFix` 這個 branch 裡面。最後我終於找到這個 bug,並且 fix 掉它,接著撒花慶祝一下!","","現在唯一的問題就是要把我在 `bugFix` branch 裡面所做的修改 merge 回 `main` branch。我可以簡單地透過 fast-forward 來 merge ,但這樣的話 `main` branch 就會包含這些含有 debug 指令的 commit 了。我相信一定有其它方法..."]}},{type:"ModalAlert",options:{markdowns:["我們需要告訴 git 只去複製其中一個 commit。 這種情況跟之前的關卡有一點類似,我們可以使用一樣的指令","","* `git rebase -i`","* `git cherry-pick`","","來完成這個目的。"]}},{type:"ModalAlert",options:{markdowns:["這一個關卡是比較後面的關卡,你可以隨意決定你要選擇使用哪個指令,但是 `bugFix` 所指向的那個 commit 一定要可以被 `main` branch 包含到。"]}}]},ko:{childViews:[{type:"ModalAlert",options:{markdowns:["## 로컬에 쌓인 커밋들","","개발 중에 종종 이런 상황이 생깁니다: 눈에 잘 띄지 않는 버그를 찾아서 해결하려고, 어떤 부분의 문제인지를 찾기 위해 디버그용 코드와 화면에 정보를 프린트하는 코드 몇 줄 넣습니다. ","","디버깅용 코드나 프린트 명령은 그 브랜치에 들어있습니다. 마침내 버그를 찾아서 고쳤고, 원래 작업하는 브랜치에 합치면 됩니다!","","이제 `bugFix`브랜치의 내용을 `main`에 합쳐 넣으려 하지만, 한 가지 문제가 있습니다. 그냥 간단히 `main`브랜치를 최신 커밋으로 이동시킨다면(fast-forward) 그 불필요한 디버그용 코드들도 함께 들어가 버린다는 문제죠."]}},{type:"ModalAlert",options:{markdowns:["여기에서 Git의 마법이 드러납니다. 이 문제를 해결하는 여러가지 방법이 있습니다만, 가장 간단한 두가지 방법 아래와 같습니다:","","* `git rebase -i`","* `git cherry-pick`","","대화형 (-i 옵션) 리베이스(rebase)로는 어떤 커밋을 취하거나 버릴지를 선택할 수 있습니다. 또 커밋의 순서를 바꿀 수도 있습니다. 이 커맨드로 어떤 작업의 일부만 골라내기에 유용합니다.","","체리픽(cherry-pick)은 개별 커밋을 골라서 `HEAD`위에 떨어뜨릴 수 있습니다."]}},{type:"ModalAlert",options:{markdowns:["이번 레벨을 통과하기 위해 어떤 방법을 쓰시든 자유입니다만, `main`브랜치가 `bugFix` 브랜치의 커밋을 일부 가져오게 해주세요."]}}]},ru_RU:{childViews:[{type:"ModalAlert",options:{markdowns:["Вот ситуация, которая часто случается при разработке: мы пытаемся отследить ошибку, но она не очень очевидна. Для того, чтобы достичь успеха на этом поприще, мы используем несколько команд для отладки и вывода","","Каждая отладочная команда (команды) вывода находится в своём коммите. В итоге мы нашли ошибку, исправили её и порадовались!","","Но проблема в том, что мы хотим добавить в `main` только исправление ошибки из ветки `bugFix`. Если мы воспользуемся простым fast-forward, то в `main` попадут также отладочные команды. Должен быть другой способ..."]}},{type:"ModalAlert",options:{markdowns:["Надо заставить git копировать только один из коммитов. Это почти как в предыдущем уровне – мы можем использовать уже известные нам команды: ","","* `git rebase -i`","* `git cherry-pick`","","Чтобы достичь желаемого результата."]}},{type:"ModalAlert",options:{markdowns:["В этом уровне тебе решать, какую команду использовать, но чтобы закончить уровень, убедись, что в ветку `main` попал коммит, на который ссылается `bugFix`."]}}]},uk:{childViews:[{type:"ModalAlert",options:{markdowns:["## Локально складені коміти","","Ось ситуація з життя рядового програміста: я намагаюся відслідкувати баг, але це не завжди вдається. Щоб допомогти собі, я додаю кілька дебаг-команд та ще кілька println'ів.","","Всі ці команди для відлагодження та виводу данних знаходяться в своїх власних комітах. Врешті-решт я знаходжу баг, фікшу його та щиро радію!","","От тільки лишається проблема, що потрібно мій фікс перенести з `bugFix` назад в гілку `main`. Якщо я просто зроблю фастфорвард (fast-forwarded) в `main`, тоді в `main` потраплять всі мої println'и, що є зайвим. Має бути інший шлях..."]}},{type:"ModalAlert",options:{markdowns:["Ми маємо сказати гіту скопіювати лише один коміт. Це все те ж саме, що й у попередніх рівнях, і ми можемо використати ті ж самі команди:","","* `git rebase -i`","* `git cherry-pick`","","для досягнення мети."]}},{type:"ModalAlert",options:{markdowns:["На цьому рівні тобі вирішувати якими командами користуватися, але щоб пройти цей рівень, впевнись що в `main` потрапить коміт, на який посилається `bugFix`."]}}]},vi:{childViews:[{type:"ModalAlert",options:{markdowns:["## Commit xếp chồng cục bộ","","Có tình huống thế này thường hay xảy ra trong quá trình phát triển: Tôi đang cố dò lỗi nhưng mà nó lại khá khó tìm. Để hỗ trợ cho việc này, tôi thêm vào vài dòng lệnh gỡ lỗi và lệnh in.","","Mấy lệnh gỡ lỗi và in này nằm yên trong commit của chúng. Cuối cùng thì tôi cũng tìm ra lỗi, gỡ xong, ngon rồi!","","Bây giờ thì lại phải đưa `bugFix` trở về nhánh `main`. Nếu mà đơn giản dùng fast-forwarded lên `main`, thì `main` lại có tất cả các lệnh gỡ lỗi kia, chẳng muốn chút nào. Phải có cách khác chứ nhỉ..."]}},{type:"ModalAlert",options:{markdowns:["Ta cần phải bảo Git chỉ sao chép 1 commit thôi. Điều này giống với cấp độ trước về điều chỉnh vị trí -- ta có thể dùng các câu lệnh tương tự:","","* `git rebase -i`","* `git cherry-pick`","","Để đạt được mục tiêu này."]}},{type:"ModalAlert",options:{markdowns:["Bây giờ là cấp độ cao hơn rồi nên bạn hãy tự quyết định nên dùng câu lệnh nào, nhưng để hoàn thành được cấp độ, hãy đàm bảo rằng `main` nhận được commit mà `bugFix` tham chiếu tới."]}}]},sl_SI:{childViews:[{type:"ModalAlert",options:{markdowns:["## Lokalno naloženi commiti","","Tu je razvijalska situacija, ki se zgodi pogosto: Hočem najti bug, ampak se kar izmika. V pomoč mojemu detektivskemu delu, sem dodal nekaj ukazov za debuggiranje in izpis.","","Vsi te ukazi za debuggiranje / izpisovanje so v svojih commitih. Končno odkrijem bug, ga popravim in se veselim!","","Edini problem je, da morem sedaj spraviti moj `bugFix` nazaj v `main` branch. Če uporabim samo fast-forward na `masterju`, potem bi `main` vseboval vse moje debug vrstice, česar si ne želim. Mora obstajati še neka druga pot ..."]}},{type:"ModalAlert",options:{markdowns:["Gitu moramo povedati naj skopira čez samo en commit. To je podobno stopnjam prej, ko smo premikali delo okoli -- uporabimo lahko iste ukaze:","","* `git rebase -i`","* `git cherry-pick`","","da dosežemo ta cilj."]}},{type:"ModalAlert",options:{markdowns:["Tebi prepuščam, da se odločiš, kateri ukaz boš uporabil, da končaš stopnjo. Poskrbi samo, da `main` dobi commit na katerega kaže `bugFix` referenca."]}}]},pl:{childViews:[{type:"ModalAlert",options:{markdowns:["## Lokalnie nałożone commity","","Oto sytuacja, która często się zdarza podczas pisania kodu: próbuję wytropić buga, ale jest on nieuchwytny. Aby pomóc sobie w poszukiwaniach, dodaję kilka poleceń debugowania i kilka instrukcji print.","","Wszystkie te polecenia debugowania / drukowania znajdują się w osobnych commitach. W końcu namierzam błąd, naprawiam go i cieszę się!","","Jedynym problemem jest to, że teraz muszę przywrócić mój `bugFix` do gałęzi `main`. Jeśli po prostu zrobiłbym fast-foward `main`, wtedy `main` dostałby wszystkie moje deklaracje debugowania, a tego bym nie chciał. Musi być na to inny sposób..."]}},{type:"ModalAlert",options:{markdowns:["Musimy powiedzieć Gitowi, żeby skopiował tylko jeden z commitów. Dokładnie w ten sam sposób jak we wcześniejszych poziomach z przenoszeniem pracy -- używając tych samych poleceń:","","* `git rebase -i`","* `git cherry-pick`","","aby osiągnać ten cel."]}},{type:"ModalAlert",options:{markdowns:["Jest to wyższy poziom, więc pozostawimy ci decyzję, której komendy chcesz użyć, ale aby ukończyć poziom, upewnij się, że `main` otrzyma commit, do którego odwołuje się `bugFix`."]}}]},it_IT:{childViews:[{type:"ModalAlert",options:{markdowns:["## Commit impilati localmente","","Ecco una situazione che accade spesso in fase di sviluppo: Sto cercando di scovare un bug. Per aiutarmi nel mio lavoro di detective, inserisco alcuni comandi per il debug e alcune print per fare stampe.","","Questi comandi aggiunti per il debug vengono salvati con un commit loro dedicato. Finalmente riesco a beccare il bug, sistemo il tutto, e brindo!","","Ora l'unico problema è che devo salvare il lavoro di `bugFix` nel ramo `main`. Se eseguo un semplice fast-forwarded `main`, allora il `main` andrebbe a prendere anche tutto ciò che è stato aggiunto per il debug. Se solo ci fosse un altro modo..."]}},{type:"ModalAlert",options:{markdowns:["Dobbiamo dire a Git di fare la copia di un solo commit. Questo assomiglia a quanto visto in precedenza -- possiamo riusare gli stessi comandi:","","* `git rebase -i`","* `git cherry-pick`","","Per raggiungere l'obiettivo."]}},{type:"ModalAlert",options:{markdowns:["Questo è un livello più avanzato, lascerò a te la libertà di decidere quale comando usare, ma per concludere il livello, assicurati che `main` riceva il commit puntato da `bugFix`."]}}]},tr_TR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Yerel Olarak Birikmiş Commitler","","Şu sıkça karşılaşılan bir geliştirme senaryosudur: Bir hatayı izlemeye çalışıyorum, ancak bu hata oldukça belirsiz. Dedektiflik çalışmalarıma yardımcı olmak için bazı hata ayıklama komutları ve yazdırma ifadeleri eklerim.","","Bu hata ayıklama veya yazdırma ifadeleri, her biri kendi commit'lerine sahiptir. Sonunda hatayı bulurum, düzeltirim ve sevinirim!","","Tek sorun şu ki şimdi `bugFix` branch'imi `main` branch'imden almalıyım. Eğer sadece `main` branch'ini süratle ileri alırsam, `main` branch'i tüm hata ayıklama ifadelerimi alır ki bu istenmeyen bir durumdur. Bunun için başka bir yol bulunmalıdır..."]}},{type:"ModalAlert",options:{markdowns:["Git'e sadece bir commit'i kopyalamasını söylememiz gerekiyor. Bu, daha önce yaptığımız işleri taşımak için yaptığımız işlemler gibi, orada kullandığımız;","","* `git rebase -i`","* `git cherry-pick`","","komutlarını burada da kullanabiliriz."]}},{type:"ModalAlert",options:{markdowns:["Bu biraz daha ileri bir seviye olduğundan hangi komutu kullanmak istediğiniz size kalmış, ancak `main` branch'inin `bugFix` tarafından atılan ve `main`'e atıfta bulunan commit'i alması gerektiğini unutmayın."]}}]}}}},{}],128:[function(e,t,o){o.level={disabledMap:{"git cherry-pick":!0,"git revert":!0},compareOnlyMainHashAgnosticWithAsserts:!0,goalAsserts:{main:[function(e){return e.C2>e.C3},function(e){return e.C2>e.C1}]},goalTreeString:"%7B%22branches%22%3A%7B%22main%22%3A%7B%22target%22%3A%22C3%27%27%22%2C%22id%22%3A%22main%22%7D%2C%22newImage%22%3A%7B%22target%22%3A%22C2%22%2C%22id%22%3A%22newImage%22%7D%2C%22caption%22%3A%7B%22target%22%3A%22C3%27%27%22%2C%22id%22%3A%22caption%22%7D%7D%2C%22commits%22%3A%7B%22C0%22%3A%7B%22parents%22%3A%5B%5D%2C%22id%22%3A%22C0%22%2C%22rootCommit%22%3Atrue%7D%2C%22C1%22%3A%7B%22parents%22%3A%5B%22C0%22%5D%2C%22id%22%3A%22C1%22%7D%2C%22C2%22%3A%7B%22parents%22%3A%5B%22C1%22%5D%2C%22id%22%3A%22C2%22%7D%2C%22C3%22%3A%7B%22parents%22%3A%5B%22C2%22%5D%2C%22id%22%3A%22C3%22%7D%2C%22C3%27%22%3A%7B%22parents%22%3A%5B%22C1%22%5D%2C%22id%22%3A%22C3%27%22%7D%2C%22C2%27%22%3A%7B%22parents%22%3A%5B%22C3%27%22%5D%2C%22id%22%3A%22C2%27%22%7D%2C%22C2%27%27%22%3A%7B%22parents%22%3A%5B%22C3%27%22%5D%2C%22id%22%3A%22C2%27%27%22%7D%2C%22C2%27%27%27%22%3A%7B%22parents%22%3A%5B%22C1%22%5D%2C%22id%22%3A%22C2%27%27%27%22%7D%2C%22C3%27%27%22%3A%7B%22parents%22%3A%5B%22C2%27%27%27%22%5D%2C%22id%22%3A%22C3%27%27%22%7D%7D%2C%22HEAD%22%3A%7B%22target%22%3A%22main%22%2C%22id%22%3A%22HEAD%22%7D%7D",solutionCommand:"git rebase -i HEAD~2 --solution-ordering C3,C2;git commit --amend;git rebase -i HEAD~2 --solution-ordering C2'',C3';git rebase caption main",startTree:'{"branches":{"main":{"target":"C1","id":"main"},"newImage":{"target":"C2","id":"newImage"},"caption":{"target":"C3","id":"caption"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C2"],"id":"C3"}},"HEAD":{"target":"caption","id":"HEAD"}}',name:{ko:"커밋들 갖고 놀기",en_US:"Juggling Commits",de_DE:"Jonglieren mit Commits",fr_FR:"Jongler avec les commits",es_AR:"Haciendo malabares con los commits",es_ES:"Haciendo malabares con los commits",es_MX:"Malabareando con las confirmaciones",pt_BR:"Malabarismo com commits",gl:"Argallando cos commits",ja:"コミットをやりくりする",zh_CN:"提交的技巧 #1",zh_TW:"commit 的戲法",ru_RU:"Жонглируем коммитами",uk:"Жонглюємо комітами",vi:"Tung hứng commit",sl_SI:"Žongliranje s Commiti",it_IT:"Giocoliere di commit",pl:"Żonglowanie commitami",tr_TR:"Commit Hokkabazlığı"},hint:{en_US:"The first command is git rebase -i HEAD~2",de_DE:"Der erste Befehl ist git rebase -i HEAD~2",fr_FR:"La première commande est git rebase -i HEAD~2",es_AR:"El primer comando es git rebase -i HEAD~2",es_ES:"El primer comando es git rebase -i HEAD~2",pt_BR:"O primeiro comando é git rebase -i HEAD~2",gl:"O primeiro comando é git rebase -i HEAD~2",ja:"最初に打つコマンドはgit rebase -i HEAD~2",ko:"첫번째 명령은 git rebase -i HEAD~2 입니다",zh_CN:"第一个命令是 `git rebase -i HEAD~2`",zh_TW:"第一個命令是 'git rebase -i HEAD~2'",ru_RU:"Первой командой должна быть git rebase -i HEAD~2",uk:"Перша команда має бути git rebase -i HEAD~2",vi:"Lệnh đầu tiên là git rebase -i HEAD~2",sl_SI:"Prvi ukaz je git rebase -i HEAD~2.",it_IT:"Il primo comando è git rebase -i HEAD~2",pl:"Pierwsze polecenie to: git rebase -i HEAD~2",tr_TR:"İlk komutunuz git rebase -i HEAD~2"},startDialog:{en_US:{childViews:[{type:"ModalAlert",options:{markdowns:["## Juggling Commits","","Here's another situation that happens quite commonly. You have some changes (`newImage`) and another set of changes (`caption`) that are related, so they are stacked on top of each other in your repository (aka one after another).","","The tricky thing is that sometimes you need to make a small modification to an earlier commit. In this case, design wants us to change the dimensions of `newImage` slightly, even though that commit is way back in our history!!"]}},{type:"ModalAlert",options:{markdowns:["We will overcome this difficulty by doing the following:","","* We will re-order the commits so the one we want to change is on top with `git rebase -i`","* We will `git commit --amend` to make the slight modification","* Then we will re-order the commits back to how they were previously with `git rebase -i`","* Finally, we will move main to this updated part of the tree to finish the level (via the method of your choosing)","","There are many ways to accomplish this overall goal (I see you eye-ing cherry-pick), and we will see more of them later, but for now let's focus on this technique.","Lastly, pay attention to the goal state here -- since we move the commits twice, they both get an apostrophe appended. One more apostrophe is added for the commit we amend, which gives us the final form of the tree ","","That being said, I can compare levels now based on structure and relative apostrophe differences. As long as your tree's `main` branch has the same structure and relative apostrophe differences, I'll give full credit."]}}]},fr_FR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Jongler avec les commits","","Voici une autre situation fréquente. Vous avez certains changements (`newImage`) et un autre groupe de changements (`caption`) qui sont reliés, ils sont donc empilés l'un sur l'autre dans votre dépôt Git (i.e. l'un après l'autre).","","La situation se complique lorsque vous devez faire une petite modification dans un commit antérieur. Dans ce cas, les configurations de `newImage` devront changer un peu, même si ce commit est loin dans notre historique !!"]}},{type:"ModalAlert",options:{markdowns:["Nous allons régler le problème en faisant ceci :","","* Nous allons réordonner les commits pour que celui que nous voulions changer soit sur le dessus `git rebase -i`","* Nous allons utiliser `git commit --amend` pour faire les petites modifications","* Nous allons réordonner les commits dans l'ordre original avec `git rebase -i`","* Pour finir, nous allons déplacer main vers la nouvelle tête de l'arbre (avec la méthode de votre choix)","","Il y a plusieurs façons d'atteindre ce but (cherry-pick semble très tentant), mais nous allons parler de cherry-pick plus tard, pour le moment concentrez-vous sur cette technique.","","Pour terminer, Faites attention à l'objectif -- puisque nous déplaçons les commits 2 fois, ils se retrouvent tous les deux avec une apostrophe. Une deuxième apostrophe est ajoutée sur le commit que nous modifions, ce qui nous donne la forme finale de l'arbre.","","Ceci étant dit, je peux comparer le résultat avec la structure et les différentes apostrophes. Tant que votre arbre `main` a la même structure et les différentes apostrophes le niveau sera considéré comme réussi."]}}]},es_AR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Haciendo malabares con los commits","","Esta es otra situación algo común. Tenés algunos cambios (`newImage`) y otro conjunto de cambios (`caption`) que están relacionados, entonces están apilados en tu repositorio uno encima del otro (es decir, uno después del otro).","","El tema es que a veces tenés que hacer una pequeña modificación a un commit previo. En este caso, la gente de diseño requiere que cambiemos ligeramente las dimensiones de `newImage`, ¡incluso aunque ese commit ya esté atrás en nuestra historia!"]}},{type:"ModalAlert",options:{markdowns:["Superaremos esta dificultad haciendo lo siguiente:","","* Vamos a reordenar los commits para que el que queremos cambiar quede arriba de todo con `git rebase -i`","* Vamos a hacer `git commit --amend` para aplicar la ligera modificación","* Después vamos a reordenar los commits a como estaban con `git rebase -i`","* Finalmente, vamos a mover main a esta parte actualizada de nuestro árbol de commits para terminar el nivel (usando el método que prefieras)","","Hay varias maneras de lograr este objetivo en general (ya te veo haciéndole ojitos al cherry-pick), y veremos algunos más después, pero por ahora concentrémonos en esta técnica.","","Por último, prestá atención al estado final acá -- como movemos los commits dos veces, ambos quedan con un apóstrofe. El commit que corregimos tiene un apóstrofe extra, y así nos queda nuestro árbol final","","Habiendo dicho eso, puedo comparar los niveles basándome ahora en la estructura y las diferencias relativas de apóstrofes. Mientras que tu rama `main` tenga la misma estructura y diferencias relativas de apóstrofes, te voy a dar el puntaje completo."]}}]},es_ES:{childViews:[{type:"ModalAlert",options:{markdowns:["## Haciendo malabares con los commits","","Esta es otra situación algo común. Tienes algunos cambios (`newImage`) y otro conjunto de cambios (`caption`) que están relacionados, entonces están apilados en tu repositorio uno encima del otro (es decir, uno después del otro).","","El tema es que a veces tienes que hacer una pequeña modificación a un commit previo. En este caso, la gente de diseño requiere que cambiemos ligeramente las dimensiones de `newImage`, ¡incluso aunque ese commit ya se encuentre atrás en nuestra historia!"]}},{type:"ModalAlert",options:{markdowns:["Superaremos esta dificultad haciendo lo siguiente:","","* Vamos a reordenar los commits para que el que queremos cambiar quede arriba de los demás con `git rebase -i`","* Vamos a hacer `git commit --amend` para aplicar la ligera modificación","* Después vamos a reordenar los commits a como estaban con `git rebase -i`","* Finalmente, vamos a mover main a esta parte actualizada de nuestro árbol de commits para terminar el nivel (usando el método que prefieras)","","Hay varias maneras de lograr este objetivo en general (ya te veo haciéndole ojitos al cherry-pick), y veremos algunos más después, pero por ahora concentrémonos en esta técnica.","","Por último, presta atención al estado final -- como movemos los commits dos veces, ambos quedan con un apóstrofe. El commit que corregimos tiene un apóstrofe extra, y así nos queda nuestro árbol final","","Habiendo dicho eso, puedo comparar los niveles basándome ahora en la estructura y las diferencias relativas de apóstrofes. Mientras que tu rama `main` tenga la misma estructura y diferencias relativas de apóstrofes, te voy a dar el puntaje completo."]}}]},es_MX:{childViews:[{type:"ModalAlert",options:{markdowns:["## Malabareando con las confirmaciones","","Esta es otra situación que sucede comúnmente. Tienes algunos cambios (`newImage`) y otro conjunto de cambios (`caption`) que están relacionados, entonces están apilados en tu repositorio uno encima del otro (es decir, uno después del otro).","","El tema es que a veces tienes que hacer una pequeña modificación a un commit previo. En este caso, la gente de diseño requiere que cambiemos ligeramente las dimensiones de `newImage`, ¡incluso aunque ese commit ya se encuentre atrás en nuestra historia!"]}},{type:"ModalAlert",options:{markdowns:["Superaremos esta dificultad haciendo lo siguiente:","","* Vamos a reordenar las confirmaciones para que la que queremos cambiar quede arriba de las demás con `git rebase -i`","* Vamos a hacer `git commit --amend` para aplicar la ligera modificación","* Después vamos a reordenar las confirmaciones a como estaban con `git rebase -i`","* Finalmente, vamos a mover main a esta parte actualizada de nuestro árbol de confirmaciones para terminar el nivel (usando el método que prefieras)","","Hay varias maneras de lograr este objetivo en general (ya te veo haciéndole ojitos al cherry-pick), y veremos algunos más después, pero por ahora concentrémonos en esta técnica.","","Por último, presta atención al estado final -- como movemos las confirmaciones dos veces, ambas quedan con un apóstrofe. El commit que corregimos tiene un apóstrofe extra, y así nos queda nuestro árbol final","","Habiendo dicho eso, puedo comparar los niveles basándome ahora en la estructura y las diferencias relativas de apóstrofes. Mientras que tu rama `main` tenga la misma estructura y diferencias relativas de apóstrofes te voy a dar el puntaje completo."]}}]},pt_BR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Malabarismo com commits","","Aqui está outra situação que acontece com bastante frequência. Você fez algumas mudanças (`newImage`), além de um outro conjunto de mudanças (`caption`) que são relacionadas, de forma que elas estão empilhadas uma após a outra no seu repositório.","","O complicado é que algumas vezes você precisa fazer uma pequena modificação em um commit mais antigo. Neste caso, o pessoal do design quer que modifiquemos um pouco as dimensões da imagem introduzida em `newImage`, apesar de esse commit estar mais para trás no nosso histórico!!"]}},{type:"ModalAlert",options:{markdowns:["Superaremos essa dificuldade fazendo o seguinte:","","* Reordenaremos os commits de forma que aquele que desejamos esteja no topo, com `git rebase -i`","* Usaremos o comando `git commit --amend` para fazer uma pequena modificação","* Vamos, então, reordenar os commits na mesma ordem que estavam anteriormente com `git rebase -i`","* Finalmente, moveremos o main para essa parte atualizada da árvore para finalizar o nível (usando o método de sua escolha)","","Há muitas formas de alcançar o objetivo final (eu vejo o cherry-pick passando pela sua mente), e veremos mais delas depois, mas por enquanto foquemos nesta técnica.","",'Por último, preste atenção no estado do "objetivo" aqui -- como nós movemos os commits duas vezes, ambos ficam com um apóstrofo. Um apóstrofo adicional é colocado no commit que sofreu o "amend", o que nos dá a forma final da árvore ',"","Tendo dito isto, posso avaliar a resposta baseado na estrutura e nas diferenças relativas de número de apóstrofos. Desde que o ramo `main` da sua árvore tenha a mesma estrutura, e o número de apóstrofos seja igual a menos de uma constante, darei a você todos os pontos para esta tarefa."]}}]},gl:{childViews:[{type:"ModalAlert",options:{markdowns:["## Argallando cos commits","","Aquí está outra situación que acontece con bastante frecuencia. Estás facendo algúns cambios (`newImage`), separado do resto de cambios (`caption`) que están relacionados, deste xeito están apilados un enriba do outro no teu repositorio.","","O complicado é que ás veces, poida que precises facer unha pequena nota nun commit máis antigo. Neste caso, a persoa de deseño quere mudar un pouco as dimensións da imaxe introducida en `newImage`, a pesar de que ese commit está máis abaixo no noso histórico!!"]}},{type:"ModalAlert",options:{markdowns:["Superamos este problema facendo o seguinte:","","* Reordenaremos os commits seleccionando aqueles que desexamos que estén no cambio, con `git rebase -i`","* Empregaremos o comando `git commit --amend` para facer unha pequena modificación","* Imos, entón, reordear os commits na mesma orde na que estaban anteriormente con `git rebase -i`","* Finalmente, moveremos o main para esa parte atualizada da árbore e así finalizar o nivel (usando o método que máis che pete)","","Hai moitas formas de obter o obxectivo final (eu vexo o cherry-pick pasando pola túa cachola), e verémolo máis adiante, pero agora ímonos centrar nesta técnica.","",'Por último, preste atención no estado do "objectivo" aquí -- como movemos os commits dúas veces, ambos teñen o apóstrofo sumado. O apóstrofo engádese polo commit que nos correximos (amend), o cal danos a forma final da árbore.',"","Contado todo esto, a resposta valídase baseándose na estructura e nos diferentes apóstrofes. Cando a rama `main` teña a mesma estructura, e o número de apóstrofos sexa igual, obterás todos os puntos da tarefa."]}}]},de_DE:{childViews:[{type:"ModalAlert",options:{markdowns:["## Jonglieren mit Commits","","Eine weitere häufig vorkommende Situation: Du hast einige Änderungen in `newImage` und weitere Änderungen in `caption`. Die Änderungen hängen voneinander ab, das heißt in diesem Fall `caption` ist ein Nachfolger von `newImage`.","","Nun kann es vorkommen, dass du einen früheren Commit verändern willst. In unserem Fall will die Design-Abteilung, dass die Abmessungen in `newImage` leicht verändert werden, obwohl das mitten in unserer History liegt!"]}},{type:"ModalAlert",options:{markdowns:["Um das zu schaffen gehen wir wie folgt vor:","","* Wir sortieren die Commits mit `git rebase -i` so um, dass der Commit, den wir ändern wollen, ganz oben liegt.","* Wir verändern den Commit mit `git commit --amend`.","* Dann sortieren wir die Commits mit einem erneuten `git rebase -i` wieder in die alte Reihenfolge.","* Schließlich aktualisieren wir den `main` auf das Ende unseres fertigen Baums, um diesen Level abzuschließen.","","Es gibt sehr viele Wege um das Endziel dieses Levels zu erreichen (ich sehe, du schielst auf `cherry-pick`) und wir werden uns später noch andere ansehen. Aber für's erste lass uns diese Methode ausprobieren.","","Beachte den geschilderten Zielzustand. Da wir die Commits zweimal umsortieren, bekommen sie jedes Mal ein Apostroph hinzugefügt (weil sie jedes Mal kopiert werden). Ein weiteres Apostroph entsteht durch den `git commit --amend`.","","Zu guter Letzt noch eine Bemerkung: Ich kann Level nur auf Struktur und Apostroph-Differenz prüfen. So lange wie dein `main` am Ende dieselbe Struktur und Apostroph-Differenz aufweist wie der Ziel-`main`, ist der Level bestanden."]}}]},ja:{childViews:[{type:"ModalAlert",options:{markdowns:["## コミットをやりくりする","","開発中に頻繁に起こるケースをもう1つ考えます。ある変更(`newImage`)とまた別の変更(`caption`)があって、それらに依存関係があるとします。この一連の変更が一列に積み重なっているとします。","","ここでトリッキーなのは、以前のコミットに対して微修正をかけなければならないケースがあるということです。今回の教材でも、過去のコミットであるにも関わらず`newImage`ブランチに僅かな修正を加えるような設計の修正が入ったとしましょう。"]}},{type:"ModalAlert",options:{markdowns:["この困難な状況を、以下の手順で克服することを考えます:","","* `git rebase -i`を使って順番を変更する。これで、変更をかけたいコミットを一番先頭に持ってくる。","* `git commit --amend`コマンドで僅かな変更を行う","* `git rebase -i`コマンドを再度使って、先頭に持ってきていたコミットを元に戻す","* 最後に、レベルクリアのためにmainブランチを先頭に持ってくる","","クリアのための方法はいくつもありますが(cherry-pickを使うこともできます)、別の回答はまた後程の章で見ることにして、今回は上記の方法でやってみることにしましょう。","","最後に、ゴール時点での状態に気を付けてください。今回2回ほどコミットを動かしますから、コミットへのポインタにはアポストロフィ(')が追加されます。commit --amendコマンドの実行でできたコミットには更にもう1つのアポストロフィが追加されます。 "]}}]},zh_CN:{childViews:[{type:"ModalAlert",options:{markdowns:["## 提交的技巧 #1","","接下来这种情况也是很常见的:你之前在 `newImage` 分支上进行了一次提交,然后又基于它创建了 `caption` 分支,然后又提交了一次。","","此时你想对某个以前的提交记录进行一些小小的调整。比如设计师想修改一下 `newImage` 中图片的分辨率,尽管那个提交记录并不是最新的了。"]}},{type:"ModalAlert",options:{markdowns:["我们可以通过下面的方法来克服困难:","","* 先用 `git rebase -i` 将提交重新排序,然后把我们想要修改的提交记录挪到最前","* 然后用 `git commit --amend` 来进行一些小修改","* 接着再用 `git rebase -i` 来将他们调回原来的顺序","* 最后我们把 main 移到修改的最前端(用你自己喜欢的方法),就大功告成啦!","","当然完成这个任务的方法不止上面提到的一种(我知道你在看 cherry-pick 啦),之后我们会多点关注这些技巧啦,但现在暂时只专注上面这种方法。","最后有必要说明一下目标状态中的那几个`'` —— 我们把这个提交移动了两次,每移动一次会产生一个 `'`;而 C2 上多出来的那个是我们在使用了 amend 参数提交时产生的,所以最终结果就是这样了。","","也就是说,我在对比结果的时候只会对比提交树的结构,对于 `'` 的数量上的不同,并不纳入对比范围内。只要你的 `main` 分支结构与目标结构相同,我就算你通过。"]}}]},zh_TW:{childViews:[{type:"ModalAlert",options:{markdowns:["## commit 的戲法","","下面這種情況也是經常出現的。例如你之前已經在 `newImage` branch 上做了一些 commit,然後又開了一個 branch 叫做 `caption` ,並且在上面做了一些相關的 commit ,因此它們看起來是一個接著一個的。","","有點棘手的就是有時候你又想在之前的 commit 裡面做一些修改。在這個例子裡面,我們要去稍微修改一下 `newImage` 所指向的 commit,儘管已經是之前的 commit 了 。"]}},{type:"ModalAlert",options:{markdowns:["為了克服這個困難,我們可以按照下面的方法來做:","","* 先用 `git rebase -i` 將 commit 重新排序,然後把我們想要修改的 commit 移到最前面","* 然後用 `git commit --amend` 來進行一些修改","* 接著再用 `git rebase -i` 來將他們按照最開始的順序重新排好","* 最後我們把 main 移到這個修改的最前端(用你自己喜歡的方法),就大功告成啦!","","當然還有許多方法可以完成這個任務(我知道你在想 cherry-pick 啦),之後我們會多點關注這些技巧啦,但現在暫時只注意上面這種方法。","","啊!最後還要提醒你一下最後所產生的 commit tree,因為我們把 commit 移動了兩次,所以會分別產生一個 apostrophe(單引號) commit。還有一個 apostrophe commit 是因為我們修改 commit 而加進來的。"]}}]},ko:{childViews:[{type:"ModalAlert",options:{markdowns:["## 커밋들 갖고 놀기","","이번에도 꽤 자주 발생하는 상황입니다. `newImage`와 `caption` 브랜치에 각각의 변경내역이 있고 서로 약간 관련이 있어서, 저장소에 차례로 쌓여있는 상황입니다.","","때로는 이전 커밋의 내용을 살짝 바꿔야하는 골치아픈 상황에 빠지게 됩니다. 이번에는 디자인 쪽에서 우리의 작업이력(history)에서는 이미 한참 전의 커밋 내용에 있는 `newImage`의 크기를 살짝 바꿔 달라는 요청이 들어왔습니다."]}},{type:"ModalAlert",options:{markdowns:["이 문제를 다음과 같이 풀어봅시다:","","* `git rebase -i` 명령으로 우리가 바꿀 커밋을 가장 최근 순서로 바꾸어 놓습니다","* `git commit --amend` 명령으로 커밋 내용을 정정합니다","* 다시 `git rebase -i` 명령으로 이 전의 커밋 순서대로 되돌려 놓습니다","* 마지막으로, main을 지금 트리가 변경된 부분으로 이동합니다. (편하신 방법으로 하세요)","","이 목표를 달성하기 위해서는 많은 방법이 있는데요(체리픽을 고민중이시죠?), 체리픽은 나중에 더 살펴보기로 하고, 우선은 위의 방법으로 해결해보세요.","","최종적으로, 목표 결과를 눈여겨 보세요 -- 우리가 커밋을 두 번 옮겼기 때문에, 두 커밋 모두 따옴표 표시가 붙어있습니다. 정정한(amend) 커밋은 따옴표가 추가로 하나 더 붙어있습니다."]}}]},ru_RU:{childViews:[{type:"ModalAlert",options:{markdowns:["## Жонглируем коммитами","","Вот ещё одна ситуация, которая часто случается. Есть некоторые изменения (`newImage`) и другие изменения (`caption`), которые связаны так, что находятся друг поверх друга в репозитории.","","Штука в том, что иногда нужно внести небольшие изменения в более ранний коммит. В таком случае надо немного поменять `newImage`, несмотря на то, что коммит уже в прошлом!"]}},{type:"ModalAlert",options:{markdowns:["Преодолеть эти трудности можно следующим образом:","","* Переставить коммит так, чтобы нужный находился наверху при помощи `git rebase -i`","* Внести изменения при помощи `git commit --amend`","* Переставить всё обратно при помощи `git rebase -i`","* И наконец, переместить main на изменённую часть дерева, чтобы закончить уровень.","","Это задание можно выполнить несколькими способами (и, гляжу, ты посматриваешь на cherry-picking), но сейчас сосредоточься на вышеописанном методе.","","Обрати внимание на итоговое состояние в этом уровне – так как мы дважды перемещаем коммиты, оба они получат по апострофу. Ещё один апостроф добавляется, когда мы делаем `git commit --amend`.","","Важно, чтобы совпадало не только дерево коммитов, но и количество апострофов."]}}]},uk:{childViews:[{type:"ModalAlert",options:{markdowns:["## Жонглюємо комітами","","Ось інша ситуація, що доволі часто трапляється. В тебе є якісь зміни (`newImage`) та ще якийсь набір комітів (`caption`), які зв’язані між собою, тому вони знаходяться один над одним в твоєму репозиторії (або один за одним).","","Штука в тому що іноді потрібно зробити невелику модифікацію до попереднього коміту. В цьому випадку, дизайнери хочуть щоб ми трохи змінили розміри `newImage`, не зважаючи на те, що цей коміт знаходиться досить глибоко в історії!!"]}},{type:"ModalAlert",options:{markdowns:["Ми поборимо цю складність наступним чином:","","* Ми відсортуємо коміти таким чином, щоб той, який ми хочемо змінити, був останнім за допомогою `git rebase -i`","* Ми виконаємо `git commit --amend` щоб внести невелику правку до останнього коміту","* Тоді ми відсортуємо коміти в попередньому порядку, за допомогою `git rebase -i`","* І на останок, ми пересунемо main на змінену частину дерева щоб закінчити цей рівень(ти можеш вибрати метод)","","Насправді є кілька способів як виконати поставлену задачу (Я бачу, ти поглядаєш на cherry-pick), і ми розберемося з ними всіма трохи пізніше, але зараз скористаймося саме цим методом.","Зверни увагу на фінальний стан в цьому рівні -- позаяк ми перемістили коміти двічі, кожен з них отримає по апострофу. Ще один апостроф додасться коли ми виконаємо commit --amend.","","Враховуючи сказане вище, я буду порівнювати дерево як за назвою коміта, так і за кількістю апострофів. Щойно дерево цілей та main співпадуть, ти пройдеш цей рівень."]}}]},vi:{childViews:[{type:"ModalAlert",options:{markdowns:["## Tung hứng Commit","","Có một tình huống xảy ra khá thường xuyên. Bạn có vài thay đổi trên (`newImage`) và một vài thay đổi khác trên (`caption`) và chúng lại liên quan đến nhau, nên chúng nằm chồng lên nhau trong kho của bạn (một lại nối một).","","Tréo ngoe là bạn lại phải điều chỉnh một chút ở commit trước. Giả sử như tay thiết kế muốn ta đổi chiều của `newImage` một chút, mặc dù commit ấy đã xưa lắm rồi!!"]}},{type:"ModalAlert",options:{markdowns:["Để khắc phục khó khăn này ta có thể làm như sau:","","* Ta sẽ dùng `git rebase -i` sắp xếp lại commit để cái ta cần sửa sẽ nằm trên cùng","* Ta sẽ dùng `git commit --amend` tạo ra một điều chỉnh nhỏ","* Sau đó ta sẽ lại sắp xếp lại commit như trước bằng cách dùng `git rebase -i`","* Cuối cùng, ta sẽ chuyển `main` tới phần đã cập nhật để hoàn thành cấp độ (dùng cách nào tùy bạn)","","Có nhiều cách để hoàn thành mục tiêu (Tôi thấy bạn hấp háy sang cherry-pick rồi đấy), rồi ta sẽ thấy chúng nhiều hơn, nhưng giờ hãy cứ tập trung vào kỹ thuật này đã.","Sau cùng thì, hãy để ý các dấu nháy đơn (') -- Vì ta đã chuyển commit 2 lần, nên chúng có thêm một dấu nháy đơn và một dấu nữa cho commit mà ta đã sửa đổi, thế là ta có trạng thái cuối cùng của cây lịch sử ","","Nói cách khác, khi tôi so sánh kết quả, tôi chỉ so sánh cấu trúc của cây lịch sử. Sự khác biệt về số lượng `'` không được bao gồm trong so sánh. Miễn là cấu trúc nhánh `main` của bạn giống với cấu trúc đích, tôi sẽ vẫn để bạn qua bài."]}}]},sl_SI:{childViews:[{type:"ModalAlert",options:{markdowns:["## Žongliranje s Commiti","","Tu je še ena situacija, ki se dogaja kar pogosto. Imaš nekaj sprememb (`newImage`) in še nekaj drugih sprememb (`caption`), ki so povezane in zložene druga na drugo v tvojem repozitoriju.","","Včasih se zgodi, da bi rad naredil manjšo spremembo na zgodnejšem commitu. V tem primeru si naš dizajner želi, da spremenimo dimenzije slike `newImage`, čeprav je commit daleč nazaj v naši zgodovini!!"]}},{type:"ModalAlert",options:{markdowns:["Ta izziv bomo rešili takole:","","* Preuredili bomo commite tako, da bo tisti, ki ga želimo spremeniti, na vrhu z `git rebase -i`","* Izvedli bomo `git commit --amend`, da naredimo naš popravek","* Nato bomo preuredili commite nazaj v začetno stanje z `git rebase -i`","* Za konec bomo premaknili main na ta posodobljen del drevesa, da zaključimo stopnjo (z metodo po tvoji izbiri)","","Obstaja več načinov, da dosežemo ta cilj (vidim te kako gledaš cherry-pick) s katerimi se bomo ukvarjali kasneje, ampak za zdaj se osredotočimo na to tehniko.","In nenazadnje, bodi pozoren na ciljno stanje -- ker premaknemo commit dvakrat, oba dobita pripet opuščaj zgoraj. Še eden je dodan za ammendan commit, torej skupno tri.","","Sedaj lahko primerjam stopnje po strukturi in relativni spremembi opuščajev. Dokler ima `main` branch na tvojem drevesu enako strukturo in število opuščajev, dobiš vse točke."]}}]},pl:{childViews:[{type:"ModalAlert",options:{markdowns:["## Żonglowanie commitami","","Oto inna sytuacja, która zdarza się dość często. Masz pewne zmiany (`newImage`) i inny zestaw zmian (`caption`), które są powiązane, więc są one ułożone jedne na drugim w twoim repozytorium (tzw. jeden po drugim).","","Problem polega na tym, że czasami trzeba dokonać małej modyfikacji wcześniejszego commitu. W tym przypadku projektant chce, abyśmy zmienili nieco wymiary `newImage`, mimo że ten commit jest daleko w tyle w naszej historii!!!"]}},{type:"ModalAlert",options:{markdowns:["Przezwyciężymy tę trudność, wykonując następujące czynności:","","* Zmienimy kolejność commitów tak, aby ten, który chcemy zmienić, był na górze, używając `git rebase -i`.","* Wykonamy `git commit --amend`, aby dokonać niewielkiej modyfikacji","* Następnie zmienimy kolejność commitów z powrotem na taką, jaka była poprzednio za pomocą `git rebase -i`.","* Na koniec przeniesiemy się do tej zaktualizowanej części drzewa, aby ukończyć ten poziom (w wybrany przez ciebie sposób)","","Istnieje wiele sposobów na osiągnięcie tego ogólnego celu (widzę, że masz na oku cherry-pick), i później zobaczymy ich więcej, ale na razie skupmy się na tej technice.","Na koniec zwróć uwagę na stan celu - ponieważ przenosimy commity dwukrotnie, oba otrzymują apostrof. Dodajemy jeszcze jeden apostrof dla commitu, który zmieniamy, co daje nam ostateczną postać drzewa.","","Uwzględniając to, mogę teraz porównać poziomy w oparciu o strukturę i względne różnice apostrofów. Tak długo, jak gałąź `main` twojego drzewa ma taką samą strukturę, rozwiązanie zostanie uznane."]}}]},it_IT:{childViews:[{type:"ModalAlert",options:{markdowns:["## Giocoliere di commit","","Ecco una situazione che capita spesso. Hai dei cambiamenti (`newImage`) e un altro insieme di modifiche (`caption`) che sono collegate tra loro, quindi sono posizionate una dopo l'altra nel repository.","","La cosa complicata è che a volte hai bisogno di fare una piccola modifica a un commit precedente. In questo caso, dobbiamo apporre una modifica a `newImage`, anche se questo commit non risulta essere l'ultimo!!"]}},{type:"ModalAlert",options:{markdowns:["Supereremo queste difficoltà facendo i seguenti passaggi:","","* Riordineremo i commit in modo che quello che vogliamo modificare risulti l'ultimo con `git rebase -i`","* Faremo `git commit --amend` per apporre la modifica","* Riordineremo i commit nello stesso ordine in cui erano, sempre con `git rebase -i`","* Alla fine, sposteremo main in questo ramo aggiornato dell'albero per finire il livello (utilizzate il metodo che volete)","","Ci sono vari modi per raggiungere l'obiettivo finale (vedo che strizzi l'occhio verso cherry-pick), e ne vedremo altri più tardi, ma per ora concentriamoci su questa tecnica.","In fine, presta attenzione all'obiettivo -- visto che spostiamo i commit due volte, a entrambi viene messo un apostrofo. Un ulteriore apostrofo è aggiunto per il commit --amend, che completa in fine l'albero.","","Detto questo, posso confrontare i livelli in base alla struttura e i relativi apostrofi. Finchè il tuo ramo `main` avrà la stessa struttura con i giusti apostrofi, ti darò pieni voti."]}}]},tr_TR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Commit Hokkabazlığı","","Şimdiki senaryomuz aslında sık karşılaşılan başka bir durumdur. İlgili olan iki değişiklik kümeniz (`newImage` ve `caption`) vardır, bu nedenle bu iki küme reponuzda üst üste yığılıdır (veya diğer adıyla birbiri ardına gelmişlerdir).","","Zor olan şey, bazen önceki bir commit üzerinde küçük bir değişiklik yapmanız gerektiğidir. Bu durumda, tasarım ekibi `newImage` 'in boyutlarını biraz değiştirmemizi istiyor, ancak bu commit geçmişimizde çok eski bir tarihte yer alıyor!!"]}},{type:"ModalAlert",options:{markdowns:["Bu zorluğun üstesinden şu şekilde gelebiliriz:","","* `git rebase -i` komutu ile değiştirmek istediğimiz commit'i en üste getireceğiz.","* Küçük değişikliği yapmak için `git commit --amend` komutunu kullanacağız.","* Ardından, `git rebase -i` komutu ile komitleri önceki sıralarına geri döndüreceğiz.","* Son olarak, main branch'ini ağacın bu güncellenmiş kısmına taşıyarak seviyeyi bitireceğiz (tabi sizin seçtiğiniz yöntemle).","","Bunu başarmak için birçok yol vardır (cherry-pick komutuna göz diktiğinizi görüyorum) ve ileride daha fazlasını göreceğiz, ancak şimdilik bu tekniğe odaklanalım.","Son olarak, buradaki hedef duruma dikkat edin - commit'leri iki kez taşıdığımızdan, her ikisi de bir tırnak işareti alıyor. Değiştirdiğimiz commit için bir tırnak işareti daha eklenir, bu da bize ağacın son halini verir. ","","Şunu da belirtmek isteriz ki, artık seviyeleri yapı ve göreceli tırnak işareti farklılıklarına göre karşılaştırabiliyoruz. Ağacınızın `main` branch'i aynı yapıya ve göreceli tırnak işareti farklılıklarına sahip olduğu sürece tam puan alacaksınız."]}}]}}}},{}],129:[function(e,t,o){o.level={goalTreeString:"%7B%22branches%22%3A%7B%22main%22%3A%7B%22target%22%3A%22C3%27%22%2C%22id%22%3A%22main%22%7D%2C%22newImage%22%3A%7B%22target%22%3A%22C2%22%2C%22id%22%3A%22newImage%22%7D%2C%22caption%22%3A%7B%22target%22%3A%22C3%22%2C%22id%22%3A%22caption%22%7D%7D%2C%22commits%22%3A%7B%22C0%22%3A%7B%22parents%22%3A%5B%5D%2C%22id%22%3A%22C0%22%2C%22rootCommit%22%3Atrue%7D%2C%22C1%22%3A%7B%22parents%22%3A%5B%22C0%22%5D%2C%22id%22%3A%22C1%22%7D%2C%22C2%22%3A%7B%22parents%22%3A%5B%22C1%22%5D%2C%22id%22%3A%22C2%22%7D%2C%22C3%22%3A%7B%22parents%22%3A%5B%22C2%22%5D%2C%22id%22%3A%22C3%22%7D%2C%22C2%27%22%3A%7B%22parents%22%3A%5B%22C1%22%5D%2C%22id%22%3A%22C2%27%22%7D%2C%22C2%27%27%22%3A%7B%22parents%22%3A%5B%22C1%22%5D%2C%22id%22%3A%22C2%27%27%22%7D%2C%22C3%27%22%3A%7B%22parents%22%3A%5B%22C2%27%27%22%5D%2C%22id%22%3A%22C3%27%22%7D%7D%2C%22HEAD%22%3A%7B%22target%22%3A%22main%22%2C%22id%22%3A%22HEAD%22%7D%7D",solutionCommand:"git checkout main;git cherry-pick C2;git commit --amend;git cherry-pick C3",disabledMap:{"git revert":!0},startTree:'{"branches":{"main":{"target":"C1","id":"main"},"newImage":{"target":"C2","id":"newImage"},"caption":{"target":"C3","id":"caption"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C2"],"id":"C3"}},"HEAD":{"target":"caption","id":"HEAD"}}',compareOnlyMainHashAgnosticWithAsserts:!0,goalAsserts:{main:[function(e){return e.C2>e.C3},function(e){return e.C2>e.C1}]},name:{ko:"커밋 갖고 놀기 #2",en_US:"Juggling Commits #2",fr_FR:"Jongler avec les commits #2",es_AR:"Haciendo malabares con los commits #2",es_ES:"Haciendo malabares con los commits #2",es_MX:"Malabareando con las confirmaciones #2",pt_BR:"Malabarismo com commits #2",gl:"Argallando cos commits #2",de_DE:"Jonglieren mit Commits Teil 2",ja:"コミットをやりくりする その2",zh_CN:"提交的技巧 #2",zh_TW:"commit 的戲法 #2",ru_RU:"Жонглируем коммитами №2",uk:"Жонглюємо комітами #2",vi:"Tung hứng commit #2",sl_SI:"Žongliranje s Commiti #2",it_IT:"Giocoliere di commit #2",pl:"Żonglowanie commitami #2",tr_TR:"Commit Hokkabazlığı #2"},hint:{en_US:"Don't forget to forward main to the updated changes!",fr_FR:"N'oubliez pas d'appliquer les changements depuis la branche main",es_AR:"¡No te olvides de avanzar main a los cambios actualizados!",es_ES:"¡No te olvides de avanzar main a los cambios actualizados!",es_MX:"¡No te olvides de avanzar main a los cambios actualizados!",pt_BR:"Não se esqueça de avançar a referência do main para as mudanças efetuadas!",gl:"¡Non te esquezas de avanzar main ós cambios actualizados!",de_DE:"Vergiss nicht den main auf die aktuelle Version vorzuspulen",ja:"mainのポインタを先に進めることを忘れずに!",ko:"main을 변경 완료한 커밋으로 이동(forward)시키는 것을 잊지 마세요!",zh_CN:"别忘记了将 main 快进到最新的更新上!",zh_TW:"別忘記了將 main 推到最新的 commit 上面!",ru_RU:"Не забудь переместить main на последние изменения.",uk:"Не забудь перемістити main на останні зміни!",vi:"Đừng quên đẩy nhánh main lên cập nhật mới nhất!",sl_SI:"Ne pozabi prestaviti main naprej na posodobljene spremembe.",it_IT:"Non dimenticare di avanzare il main verso le ultime modifiche aggiornate!",pl:"Nie zapomnij sforwardować maina do najnowszych zmian!",tr_TR:"Main'i yaptığınız değişikliklere ilerletmeyi unutmayın!"},startDialog:{en_US:{childViews:[{type:"ModalAlert",options:{markdowns:["## Juggling Commits #2","","*If you haven't completed Juggling Commits #1 (the previous level), please do so before continuing*","","As you saw in the last level, we used `rebase -i` to reorder the commits. Once the commit we wanted to change was on top, we could easily --amend it and re-order back to our preferred order.","","The only issue here is that there is a lot of reordering going on, which can introduce rebase conflicts. Let's look at another method with `git cherry-pick`."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Remember that git cherry-pick will plop down a commit from anywhere in the tree onto HEAD (as long as that commit isn't an ancestor of HEAD).","","Here's a small refresher demo:"],afterMarkdowns:["Nice! Let's move on."],command:"git cherry-pick C2",beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit"}},{type:"ModalAlert",options:{markdowns:["So in this level, let's accomplish the same objective of amending `C2` once but avoid using `rebase -i`. I'll leave it up to you to figure it out! :D","","Remember, the exact number of apostrophe's (') on the commit are not important, only the relative differences. For example, I will give credit to a tree that matches the goal tree but has one extra apostrophe everywhere."]}}]},fr_FR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Jongler avec les commits #2","","*Si vous n'avez pas fait le défi Jongler avec les commits #1 (le niveau précédent), vous devriez le faire avant de continuer*","","Comme vu dans le niveau précédent, nous utilisons `rebase -i` pour réordonner les commits. Une fois que le commit à modifier est celui à la tête, nous pouvons facilement faire un --amend et réordonner dans l'ordre voulu.","","La difficulté ici est qu'il y a beaucoup de changements, ce qui peut introduire des conflits de rebase. Essayons avec l'autre méthode `git cherry-pick`."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["N'oubliez pas que git cherry-pick va prendre un commit de n'importe où dans l'arbre de Git et le mettre devant HEAD (sauf s'il est un ancêtre de HEAD).","","Un petit rappel :"],afterMarkdowns:["Bien ! Continuons."],command:"git cherry-pick C2",beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit"}},{type:"ModalAlert",options:{markdowns:["Dans ce niveau, nous voulons modifier `C2` sans utiliser `rebase -i`. À vous maintenant de trouver comment ! :D","","Petit rappel, le nombre exact d'apostrophes (') sur le commit n'est pas important. Par exemple, nous donnerons les points à une structure qui colle au résultat mais qui a une apostrophe en trop partout."]}}]},es_AR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Haciendo malabares con los commits #2","","*Si no completaste Haciendo malabares con los commits #1 (el nivel anterior), hacelo antes de continuar*","","Como viste en el último nivel, usamos `rebase -i` para reordenar los commits. Una vez que el commit que queríamos cambiar estaba arriba de todo, pudimos `--amend`earlo fácilmente y reordenarlo a como queríamos.","","El único problema con esto es que hay mucho reordenamiento, que puede generar conflictos al rebasear. Veamos otro método usando `git cherry-pick`."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Acordate de que git cherry-pick va a traer un commit de cualquier parte del árbol sobre HEAD (siempre que ese otro commit no sea un ancestro de HEAD).","","Una pequeña demo para refrescar la idea:"],afterMarkdowns:["¡Bien! Sigamos..."],command:"git cherry-pick C2",beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit"}},{type:"ModalAlert",options:{markdowns:["Entonces, en este nivel vamos a lograr el mismo objetivo de corregir `C2`, pero sin usar `rebase -i`. Te dejo a vos el darte cuenta cómo :D","","Acordate, la cantidad exacta de apóstrofes (') en el commit no es importante, sólo la diferencia relativa. Por ejemplo, le voy a dar puntaje a un árbol que matchee el objetivo pero cuyos commits tengan todos un apóstrofe extra."]}}]},es_ES:{childViews:[{type:"ModalAlert",options:{markdowns:["## Haciendo malabares con los commits #2","","*Si no completaste Haciendo malabares con los commits #1 (el nivel anterior), hazlo antes de continuar*","","Como viste en el último nivel, usamos `rebase -i` para reordenar los commits. Una vez que el commit que queríamos cambiar se encontraba arriba de todo, pudimos `--amend`earlo fácilmente y reordenarlo a como queríamos.","","El único problema con esto es que hay mucho reordenamiento, que puede generar conflictos al rebasear. Veamos otro método usando `git cherry-pick`."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Recuerda que git cherry-pick va a traer un commit de cualquier parte del árbol sobre HEAD (siempre que ese otro commit no sea un ancestro de HEAD).","","Una pequeña demo para refrescar la idea:"],afterMarkdowns:["¡Bien! Sigamos..."],command:"git cherry-pick C2",beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit"}},{type:"ModalAlert",options:{markdowns:["Entonces, en este nivel vamos a lograr el mismo objetivo de corregir `C2`, pero sin usar `rebase -i`. Te dejo a ti el darte cuenta cómo :D","","Recuerda, la cantidad exacta de apóstrofes (') en el commit no es importante, sólo la diferencia relativa. Por ejemplo, le voy a dar una puntuación a un árbol que coincida con el objetivo pero cuyos commits tengan todos un apóstrofe extra."]}}]},es_MX:{childViews:[{type:"ModalAlert",options:{markdowns:["## Malabareando con las confirmaciones #2","","*Si no completaste Malabareando con las confirmaciones #1 (el nivel anterior), hazlo antes de continuar*","","Como viste en el último nivel, usamos `rebase -i` para reordenar las confirmaciones. Una vez que la confirmación que queríamos cambiar se encontraba arriba de todo, pudimos `--amend` (enmendarlo) fácilmente y reordenarlo a como queríamos.","","El único problema con esto es que hay mucho reordenamiento, que puede generar conflictos al rebasear. Veamos otro método usando `git cherry-pick`."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Recuerda que git cherry-pick va a traer un commit de cualquier parte del árbol sobre HEAD (siempre que ese otro commit no sea un ancestro de HEAD).","","Una pequeña demostración para refrescar la idea:"],afterMarkdowns:["¡Bien! Sigamos..."],command:"git cherry-pick C2",beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit"}},{type:"ModalAlert",options:{markdowns:["Entonces, en este nivel vamos a lograr el mismo objetivo de corregir `C2`, pero sin usar `rebase -i`. Te dejo a ti el darte cuenta cómo :D","","Recuerda, la cantidad exacta de apóstrofes (') en el commit no es importante, sólo la diferencia relativa. Por ejemplo, le voy a dar puntos a un árbol que coincida con el objetivo pero cuyos commits tengan todos un apóstrofe extra."]}}]},pt_BR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Malabarismo com commits #2","","*Caso você não tenha completado o nível anterior (Malabarismo com commits #1), por favor faça-o antes de continuar*","","Como você viu no nível anterior, usamos `rebase -i` para reordenar os commits. Uma vez que o commit que queríamos mudar estava no topo, pudemos facilmente usar o `--amend` e depois reordená-lo de volta para obter nossa ordem preferida.","","O único problema aqui é que há muita reordenação ocorrendo, o que pode introduzir conflitos de rebase. Vamos dar uma olhada em outro método, usando o `git cherry-pick`."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Lembre-se que o git cherry-pick copiará um commit de qualquer lugar na árvore sob o HEAD (desde que esse commit não seja um ancestral do HEAD).","","Aqui está uma demonstração para refrescar sua memória:"],afterMarkdowns:["Ótimo! Vamos em frente."],command:"git cherry-pick C2",beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit"}},{type:"ModalAlert",options:{markdowns:['Então, neste nível, vamos alcançar o mesmo objetivo de fazer "amend" no `C2`, mas evitaremos usar o `rebase -i`. Agora vou deixar com você a tarefa de descobrir como fazer! :D',"","Lembre-se, o número exato de apóstrofos (') nos commits não é importante, apenas as diferenças relativas. Por exemplo, darei todos os pontos nesta tarefa se você obtiver o mesmo resultado da árvore da visualização de objetivo com um apóstrofo extra em todos os commits."]}}]},gl:{childViews:[{type:"ModalAlert",options:{markdowns:["## Argallando cos commits #2","","*No caso de non ter rematado o tema anterior (Argallando cos commits #1), por favor faino antes de continuar*.","","Como puideches ver no anterior tema, usamos `rebase -i` para reordear os commits. Unha vez que atopamos o commit que queriamos modificar, puidemos empregar sinxelamente o `--amend`, e depois reordenalo de volta para obter a nosa orde preferida.","","O único problema aquí é que hai moita reordenación ocorrendo, o que pode introducir conflitos no rebase. Imos votar unha ollada a outro método, o uso de `git cherry-pick`."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Lembra que `git cherry-pick` copiará un commit de qualquera lugar na árbore enriba do HEAD (sempre e cando non sexa ancestro do HEAD).","","Aquí está unha demostración para que refresques a memoria:"],afterMarkdowns:["¡A tope! Seguimos."],command:"git cherry-pick C2",beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit"}},{type:"ModalAlert",options:{markdowns:['Entón, neste nivel, imos completar o mesmo obxectivo que facendo "amend" no `C2`, pero evitando facer o `rebase -i`. Agora deixámoste que lle des os miolos para sacar o exercicio! :D',"","Recorda, o número exacto de apóstrofos (') nos commits non é importante, só as diferencias relativas. Por exemplo, levarás todos os puntos desta tarefa se obtés o mesmo resultado da árbore que se mostra na visualización do exercicio con un apóstrofo extra en tódolos commits."]}}]},de_DE:{childViews:[{type:"ModalAlert",options:{markdowns:["## Jonglieren mit Commits Teil 2","",'Du solltest "Jonglieren mit Commits" (den vorherigen Level) bestanden haben, bevor du dich an diesem hier versuchst.',"","Wie du im letzten Level gesehen hast, haben wir `git rebase -i` genutzt, um die Commits neu anzuordnen. Sobald der Commit, den wir ändern wollten, ganz oben war, konnten wir ihn einfach mit `git commit --amend` anpassen. Danach haben wir die alte Reihenfolge wiederhergestellt.","","Das einzige Problem ist hier, dass da eine Menge Umsortieren stattfindet, was zu Rebase-Konflikten führen kann. Schauen wir uns also eine Methode mit `git cherry-pick` an."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Wie du dich erinnerst, macht `git cherry-pick` eine Kopie des angegebenen Commits und fügt sie an `HEAD` an (es sei denn der Commit ist ein Vorgänger von `HEAD`).","","Hier eine kleine Demo zur Erinnerung:"],afterMarkdowns:["Schick! Und weiter geht's."],command:"git cherry-pick C2",beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit"}},{type:"ModalAlert",options:{markdowns:["In diesem Level ist das Ziel wieder, den Commit `C2` zu modifizieren, diesmal aber ohne `git rebase -i` zu benutzen. Ich überlass es dir herauszufinden, wie das gehen soll. :D","","Nicht vergessen, die genaue Anzahl von Kopien (d.h. Apostrophen) ist nicht ausschlaggebend, nur die Differenz. Der Level ist zum Beispiel auch gelöst, wenn dein fertiger Baum dieselbe Struktur wie der Ziel-Baum hat, aber *überall* ein Apostroph mehr aufweist."]}}]},ja:{childViews:[{type:"ModalAlert",options:{markdowns:["## コミットをやりくりする その2","","*注:この一つ前のレベル「コミットをやりくりする」をクリアしていない人は、まずそちらの問題をクリアしてきてください!*","","前回見てきたように、コミット順序の変更のために、私たちは`rebase -i`コマンドを利用しました。ツリーの先頭に変更対象のコミットがあれば、--amendオプションを使うことで容易に変更を書きかえて、元の順序に戻すことができます。","","この場合に心配なことが一つだけあって、それは複数回の順序の変更が行われるので、rebaseのコンフリクト(衝突)が起こりうることです。こういうケースへの対策として、`git cherry-pick`を使った別の解決法について考えてみましょう。"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["git cherry-pickを使うと、ツリーの中から複数のコミットを選んで、HEADの下に新しく作ることができましたね。","","簡単なデモを見てみましょう:"],afterMarkdowns:["できました!次へ進みましょう"],command:"git cherry-pick C2",beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit"}},{type:"ModalAlert",options:{markdowns:["このレベルでは、`C2`をamendすることで前回と同じ目的を達成しましょう。但し`rebase -i`は使わずにクリアしてください。どんな方法で進めるかはあなたにおまかせします!:D"]}}]},zh_CN:{childViews:[{type:"ModalAlert",options:{markdowns:["## 提交的技巧 #2","","*如果你还没有完成“提交的技巧 #1”(前一关)的话,请先通过以后再来!*","","正如你在上一关所见到的,我们可以使用 `rebase -i` 对提交记录进行重新排序。只要把我们想要的提交记录挪到最前端,我们就可以很轻松的用 `--amend` 修改它,然后把它们重新排成我们想要的顺序。","","但这样做就唯一的问题就是要进行两次排序,而这有可能造成由 rebase 而导致的冲突。下面还是看看 `git cherry-pick` 是怎么做的吧。"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["要在心里牢记 cherry-pick 可以将提交树上任何地方的提交记录取过来追加到 HEAD 上(只要不是 HEAD 上游的提交就没问题)。","","来看看这个例子:"],command:"git cherry-pick C2",afterMarkdowns:["看到了吧?我们继续"],beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit"}},{type:"ModalAlert",options:{markdowns:["这一关的目标和上一关一样,通过 `--amend` 改变提交记录 `C2`,但你不能用 `rebase -i`。自己想想要怎么解决吧! :D","","对了,提交记录上面的`'`的数量并不重要,只是引用的不同而已。也就是说如果你的最终结果在某个提交记录上多了个`'`,我也会算你通过的。"]}}]},zh_TW:{childViews:[{type:"ModalAlert",options:{markdowns:["## commit 的戲法 #2","","*假如你還沒有完成 commit 的戲法 #1(前面那一個關卡),請先完成之後再來這一關!*","","如你在上一個關卡所看到的,我們使用 `rebase -i` 來重新排列那些 commit。只要把我們想要修改的 commit 移到最前面,我們就可以很容易地重新修改它,然後再把它們重新排成我們想要的順序。","","但唯一的問題就是這樣做就要排很多次,有可能造成 rebase conflict。下面就看看用另外一種方法 `git cherry-pick` 是怎麼做的吧!"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["要記住喔! cherry-pick 可以從 commit tree 的任何地方拿一個 commit 來放在 HEAD 上(只要那個 commit 不是 HEAD 的 parent)。","","下面是一個簡單清楚的 demo:"],command:"git cherry-pick C2",afterMarkdowns:["太棒了,我們繼續吧!"],beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit"}},{type:"ModalAlert",options:{markdowns:["在這一關和上一關一樣要去修改一個 commit 叫做`C2`,但你要避免使用 `rebase -i`。自己想想看要怎麼解決吧!"]}}]},ko:{childViews:[{type:"ModalAlert",options:{markdowns:["## 커밋 갖고 놀기 #2","","*만약 이전 레벨의 커밋 갖고 놀기 #1을 풀지 않으셨다면, 계속하기에 앞서서 꼭 풀어보세요*","","이전 레벨에서 보셨듯이 `rebase -i` 명령으로 커밋의 순서를 바꿀 수 있습니다. 정정할 커밋이 바로 직전(top)에 있으면 간단히 --amend로 수정할 수 있고, 그리고 나서 다시 원하는 순서로 되돌려 놓으면 됩니다.","","이번에 한가지 문제는 순서를 꽤 많이 바꿔야한다는 점인데요, 그러다가 리베이스중에 충돌이 날 수 있습니다. 이번에는 다른 방법인 `git cherry-pick`으로 해결해 봅시다."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["git cherry-pick으로 HEAD에다 어떤 커밋이든 떨어 뜨려 놓을 수 있다고 알려드린것 기억나세요? (단, 그 커밋이 현재 가리키고 있는 커밋이 아니어야합니다)","","간단한 데모로 다시 알려드리겠습니다:"],afterMarkdowns:["좋아요! 계속할게요"],command:"git cherry-pick C2",beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit"}},{type:"ModalAlert",options:{markdowns:["그럼 이번 레벨에서는 아까와 마찬가지로 `C2` 커밋의 내용을 정정하되, `rebase -i`를 쓰지 말고 해보세요. ^.~"]}}]},ru_RU:{childViews:[{type:"ModalAlert",options:{markdowns:["## Жонглируем коммитами №2","","*Перед прохождением этого уровня обязательно надо пройти предыдущий уровень – 'Жонглируем коммитами №1'*","","В прошлом уровне мы использовали `rebase -i`, чтобы переставлять коммиты. Как только нужный нам коммит оказывался в конце, мы могли спокойно изменить его при помощи `--amend` и переставить обратно.","","Единственная проблема тут - это множество перестановок, которые могут спровоцировать конфликты. Посмотрим, как с этой же задачей справится cherry-pick."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Важно помнить, что cherry-pick поместит любой коммит сразу после HEAD (только если этот коммит не является предком HEAD)","","Вот небольшое демо для напоминания:"],afterMarkdowns:["Ок! Едем дальше!"],command:"git cherry-pick C2",beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit"}},{type:"ModalAlert",options:{markdowns:["Итак, в этом уровне нужно достичь того же эффекта, но без использования `rebase -i`. Остальное – по усмотрению.","","Важно, чтобы совпадало не только дерево коммитов, но и количество апострофов."]}}]},uk:{childViews:[{type:"ModalAlert",options:{markdowns:["## Жонглюємо комітами #2","","*Якщо ти ще не пройшов Жонглюємо комітами #1 (попередній рівень), будь ласка, зроби це перед тим як продовжити*","","Як ти бачив в попередньому рівні, ми використали `rebase -i` щоб впорядкувати набір комітів. Як тільки потрібний коміт опиняється вгорі, його досить легко змінити за допомогою --amend й потім відсортувати коміти в попередньому порядку.","","Єдина проблема з таким підходом полягає в тому, що виконується досить багато перестановок комітів, що може призвести до конфліктів при виконанні rebase. Спробуймо інший підхід який використовує `git cherry-pick`."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Не забувай, що git cherry-pick вставить коміт з будь-якого місця в HEAD (якщо це не коміт-предок HEAD).","","Ось невелике демо, щоб пригадати:"],afterMarkdowns:["Добре! Продовжуємо"],command:"git cherry-pick C2",beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit"}},{type:"ModalAlert",options:{markdowns:["Отже, в цьому рівні досягнімо тієї ж мети -- модифікації `C2` -- але без використання `rebase -i`. Я думаю, ти розберешся як це зробити! :D","","Зверни увагу, що точне число апострофів (') в коміті не важливе, важлива тільки відносна різниця. Наприклад, якщо кожен коміт буде містити додатковий апостроф, я все одно зарахую такий розв’язок."]}}]},vi:{childViews:[{type:"ModalAlert",options:{markdowns:["## Tung hứng Commit #2","","*Nếu bạn vẫn chưa hoàn thành Tung hứng Commit #1 (cấp độ trước), hãy làm nó trước khi tiếp tục*","","Như bạn đã thấy ở cấp độ trước, ta dùng `rebase -i` để sắp xếp lại các commit. Một khi commit mà ta muốn sửa đã ở trên cùng, ta có thể dễ dàng --chỉnh sửa (amend) nó và sau đó sắp xếp lại trật tự lúc trước.","","Nhưng mà vẫn tồn tại vấn đề khi mà ta sắp xếp quá nhiều, điều này có thể dẫn đến xung đột khi rebase. Thử dùng cách khác với `git cherry-pick` nào."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Hãy nhớ rằng cherry-pick sẽ thả commit ở bất cứ đâu xuống dưới HEAD (miễn là nó không phải cha ông hay tổ tiên gì của HEAD).","","Hãy xem thử minh họa nhỏ sau:"],afterMarkdowns:["Hay! Tiếp tục nào"],command:"git cherry-pick C2",beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit"}},{type:"ModalAlert",options:{markdowns:["Vậy thì ở cấp độ này, hãy làm hoàn thành mục tiêu tương tự là chỉnh sửa `C2` một lần nhưng hãy tránh dùng `rebase -i`. Tự tìm cách đi nhé! :D","","Nhớ rằng, số lượng dấu nháy đơn (') trên commit không quan trọng, quan trọng là sự khác biệt tương đối. Nói cách khác, kể cả bất cứ commit nào của bạn có thêm một đấu(') tôi vẫn công nhận đáp án của bạn"]}}]},sl_SI:{childViews:[{type:"ModalAlert",options:{markdowns:["## Žongliranje s Commiti #2","","Če še nisi končal Žongliranje s Commiti #1 (prejšnjo stopnjo), jo končaj pred nadaljevanjem","","Kot si videl v prejšnji stopnji, smo uporabili `rebase -i` za preureditev commitov. Ko je bil commit, ki smo ga želeli spremeniti, na vrhu, smo preprosto uporabili --amend in preuredili nazaj v naše željeno stanje.","","Edini problem tu je, da je veliko prerazporejanja, kar lahko povzroči rebase konflikte. Poglejmo si še eno drugo tehniko imenovano `git cherry-pick`."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Git cherry-pick bo skopiral commit iz bilokaterega mesta na drevesu na HEAD (seveda dokler ni ta commit že prednik HEAD).","","Tu je mali osvežitveni primer:"],afterMarkdowns:["Odlično! Nadaljujmo ..."],command:"git cherry-pick C2",beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit"}},{type:"ModalAlert",options:{markdowns:["Torej v tej stopnji bi radi enako spremenili `C2`, ampak tokrat brez uporabe `rebase -i`. Kako to narediti, prepustim tebi! :D","","Točno število opuščajev (') na commitu ni pomembno, pomembna je samo relativna sprememba. Naprimer, vse točko bom dal tudi za drevo, ki ustreza ciljenmu drevesu, a ima povsod dodaten opuščaj."]}}]},pl:{childViews:[{type:"ModalAlert",options:{markdowns:["## Żonglowanie commitami #2","","*Ukończ poprzedni poziom Żonglowania commitami przed przejściem dalej*","","Na poprzednim poziomie użyliśmy `rebase -i`, aby zmienić kolejność commitów. Kiedy commit, który chcieliśmy zmienić, był już na górze, mogliśmy łatwo to zrobić (`--amend`), a następnie przywrócić do odpowiedniej kolejności.","","Jedynym problemem jest to, że dokonuje się wiele zmian w kolejności, co może powodować konflikty podczas rebase'u. Przyjrzyjmy się innej metodzie korzystającej z `git cherry-pick`."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Pamiętaj, że `git cherry-pick` zrzuci commit z dowolnego miejsca drzewa na HEAD (o ile ten commit nie jest przodkiem HEAD).","","Oto małe demo na odświeżenie pamięci:"],afterMarkdowns:["Ładnie! Ruszajmy dalej."],command:"git cherry-pick C2",beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit"}},{type:"ModalAlert",options:{markdowns:["Więc na tym poziomie osiągnijmy ten sam cel zmiany `C2`, ale unikając użycia `rebase -i`. Zostawię ci to do rozgryzienia! :D","","Pamiętaj, że dokładna liczba apostrofów (') nie jest ważna, tylko względne różnice. Na przykład, uznam drzewo, które pasuje do drzewa celu, ale ma wszędzie jeden dodatkowy apostrof."]}}]},it_IT:{childViews:[{type:"ModalAlert",options:{markdowns:["## Giocoliere di commit #2","","*Se non hai completato Giocoliere di commit #1 (il livello precedente), sei pregato di farlo prima di proseguire*","","Come hai visto nell'ultimo livello, abbiamo usato `rebase -i` per riordinare i commit. Una volta che il commit che volevamo modificare era in cima, abbiamo potuto facilmente fare --amend per poi ritornare nell'ordine di partenza.","","L'unico problema qui è che ci sono tanti riordini da fare, che può portare a conflitti nel rebase. Vediamo di farlo attraverso il metodo `git cherry-pick`."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Ricorda che git cherry-pick creerà un qualsiasi commit del repository su HEAD (a condizione che il commit non sia un antenato di HEAD).","","Qui un breve demo per rinfrescare la memoria:"],afterMarkdowns:["Grande! Andiamo avanti."],command:"git cherry-pick C2",beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit"}},{type:"ModalAlert",options:{markdowns:["In questo livello, dobbiamo fare amend di `C2` una volta, evitando di usare `rebase -i`. Lascerò a te il compito di scoprire come farlo! :D","","Ricorda, il numero esatto di apostrofi sul commit non sono importanti, solo le differenze tra essi. Per esempio, considererò l'albero che corrisponde a quello della soluzione ma che ha un apostrofo extra dappertutto."]}}]},tr_TR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Commit Hokkabazlığı #2","","*Eğer Commit Hokkabazlığı #1'i (bir önceki level) bitirmediyseniz, devam etmeden önce lütfen önce o bölümü bitirin*","","Bir önceki seviyeden hatırlayacağınız gibi, `rebase -i` kullanarak commit'leri yeniden sıralayabiliyorduk. Değiştirmek istediğimiz commit en üstte olduğunda, onu kolayca düzeltebilir `--amend` ve tercih ettiğimiz sıraya yeniden düzenleyebilirdik.","","Tek sorun şu ki, birçok yeniden sıralama yapıldığında, bu yeniden sıralama çatışmalarını ortaya çıkarabilir. Başka bir yöntemi, git cherry-pick ile inceleyelim."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Unutmayın ki git cherry-pick, HEAD'in herhangi bir yerinde (bu commit, HEAD'in atası değilse) bulunan bir commit'i HEAD üzerine bırakacaktır.","","İşte küçük bir hatırlatma demosu:"],afterMarkdowns:["Harika! Devam Edelim."],command:"git cherry-pick C2",beforeCommand:"git checkout -b bugFix; git commit; git checkout main; git commit"}},{type:"ModalAlert",options:{markdowns:["Bu seviyede, `C2` commit'ini düzeltmek için `rebase -i` kullanmadan aynı sonuca ulaşmaya çalışın. Nasıl ulaşabileceğimizi size bırakıyorum! :D","","Unutmayın, commit'lerdeki tırnakların (') tam olarak eşleşmesi önemli değil, yalnızca göreceli farklar önemlidir. Örneğin, hedef ağaçla eşleşen ancak her yerde ekstra bir tırnak bulunan bir ağaçtan da puan alınabilir."]}}]}}}},{}],130:[function(e,t,o){o.level={goalTreeString:'{"branches":{"main":{"target":"C5","id":"main","remoteTrackingBranchID":null},"side":{"target":"C3","id":"side","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C2"],"id":"C3"},"C4":{"parents":["C1"],"id":"C4"},"C5":{"parents":["C2","C4"],"id":"C5"}},"tags":{"v1":{"target":"C2","id":"v1","type":"tag"},"v0":{"target":"C1","id":"v0","type":"tag"}},"HEAD":{"target":"C2","id":"HEAD"}}',solutionCommand:"git tag v1 side~1;git tag v0 main~2;git checkout v1",startTree:'{"branches":{"main":{"target":"C5","id":"main","remoteTrackingBranchID":null},"side":{"target":"C3","id":"side","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C2"],"id":"C3"},"C4":{"parents":["C1"],"id":"C4"},"C5":{"parents":["C2","C4"],"id":"C5"}},"tags":{},"HEAD":{"target":"main","id":"HEAD"}}',name:{en_US:"Git Tags",de_DE:"Git Tags",ja:"Gitのタグ",es_AR:"Tags en git",es_ES:"Tags en git",es_MX:"Tags de Git",pt_BR:"Tags no Git",gl:"Etiquetas en git",fr_FR:"Git Tags",zh_CN:"Git Tag",zh_TW:"git tag",ru_RU:"git tag",ko:"Git 태그",uk:"Git Tags",vi:"Tag trong Git",sl_SI:"Git Tagi",it_IT:"Git Tag",pl:"Tagi Gita",tr_TR:"Git Tagleri"},hint:{en_US:"you can either check out the commit directly or simply checkout the tag!",fr_FR:"Vous pouvez faire le checkout sur le commit ou sur le tag !",de_DE:"Du kannst den Checkout entweder direkt auf den Commit oder das Tag machen.",ja:"コミットを直接チェックアウトできますが、簡単にタグでチェックアウトすることも可能!",es_AR:"Podés checkoutear directamente el commit, ¡o simplemente el tag!",es_ES:"Puedes hacer checkout directamente el commit, ¡o simplemente el tag!",es_MX:"Puedes cambiar (checkout) directamente a la confirmación, ¡o simplemente cambiar (checkout) al tag!",pt_BR:"Você pode fazer checkout diretamente no commit ou na tag correspondente!",gl:"Podes saltar directamente ó commit, ¡ou a etiqueta, que é máis doado!",zh_TW:"你可以直接 checkout 到 commit 上,或是簡單的 checkout 到 tag 上",zh_CN:"你可以直接 checkout 到 commit 上,或是简单地 checkout 到 tag 上",ru_RU:"Можно сделать checkout напрямую на коммит или же на тег",ko:"커밋을 직접 또는 태그를 이용해서 체크아웃할수 있습니다!",uk:"ти можеш або зробити checkout коміта напряму чи просто зачекаутити таг!",vi:"Bạn có thể chuyển trực tiếp sang commit hoặc đơn giản là chuyển sang tag!",sl_SI:"Checkoutaš lahko neposredno commit ali pa preprosto njegov tag!",it_IT:"Puoi fare direttamente checkout del commit o semplicemente del tag!",pl:"Możesz checkoutować commit bezpośrednio lub po prostu tag!",tr_TR:"İsterseniz direkt commit'e veya direkt tag'e checkout yapabilirsiniz!"},startDialog:{en_US:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Tags","","As you have learned from previous lessons, branches are easy to move around and often refer to different commits as work is completed on them. Branches are easily mutated, often temporary, and always changing.","","If that's the case, you may be wondering if there's a way to *permanently* mark historical points in your project's history. For things like major releases and big merges, is there any way to mark these commits with something more permanent than a branch?",""]}},{type:"ModalAlert",options:{markdowns:['You bet there is! Git tags support this exact use case -- they (somewhat) permanently mark certain commits as "milestones" that you can then reference like a branch.',"",'More importantly though, they never move as more commits are created. You can\'t "check out" a tag and then complete work on that tag -- tags exist as anchors in the commit tree that designate certain spots.',"","Let's see what tags look like in practice."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Let's try making a tag at `C1` which is our version 1 prototype."],afterMarkdowns:["There! Quite easy. We named the tag `v1` and referenced the commit `C1` explicitly. If you leave the commit off, git will just use whatever `HEAD` is at."],command:"git tag v1 C1",beforeCommand:"git commit"}},{type:"ModalAlert",options:{markdowns:["For this level just create the tags in the goal visualization and then check `v1` out. Notice how you go into detached `HEAD` state -- this is because you can't commit directly onto the `v1` tag.","","In the next level we'll examine a more interesting use case for tags."]}}]},fr_FR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Tags","","Comme appris dans les niveaux précédents, les branches sont faciles à manipuler et se réfèrent aux commits qui ont été faits pour compléter le travail fait sur celles-ci. Les branches sont donc constamment en mouvement.","","Dans ce cas, vous vous demandez peut-être s'il y a un moyen d'ajouter une marque *permanente* dans l'historique de votre projet. Pour des commits comme des livraisons majeures ou d'importantes fusions, existe-t-il une façon plus stable qu'une branche pour garder l'état d'une branche à un instant précis ?",""]}},{type:"ModalAlert",options:{markdowns:['Vous l\'avez deviné ! Les tags Git offrent cette fonctionnalité : les tags marquent à jamais certains commits comme "milestone" (étape clé) auxquels vous pouvez vous référer comme à des branches.',"","Encore plus important, ils sont définitifs. Vous ne pouvez donc pas rajouter de commit dans un tag : les tags sont un peu comme un pointeur définitif dans l'arbre des commits.","","Voyons les tags en pratique."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Essayons de faire un tag sur C1 (qui représente la version 1 de notre prototype)."],afterMarkdowns:["Voila, facile non ? Nous nommons le tag `v1` et il pointe vers le commit `C1`. Si vous ne spécifiez pas le commit, le tag pointera là où se trouve `HEAD`."],command:"git tag v1 C1",beforeCommand:"git commit"}},{type:"ModalAlert",options:{markdowns:["Pour ce niveau, créez simplement les tags visibles dans les objectifs puis faites un checkout sur le tag `v1`. Remarquez le passage à l'état `HEAD` détachée -- c'est parce que vous ne pouvez pas commiter sur le tag `v1`.","","Dans les niveaux suivants vous verrez un cas plus intéressant d'utilisation des tags."]}}]},zh_TW:{childViews:[{type:"ModalAlert",options:{markdowns:["## git tag","","就像你之前學到的一樣,branch 很容易被移動,而且當有新的 commit 時,又會再移動,branch 經常指向不同的 commit,branch 很容易改變。","","你可能會有疑問,有沒有什麼方法可以*永遠*有一個指向 commit 的記號,例如,表示重大的軟體釋出,或者是修正很大的 bug,有沒有其它比 branch 更好的方法,可以永遠地指向這些 commit?",""]}},{type:"ModalAlert",options:{markdowns:['你說對了!git tag 可以解決這個問題,它們可以永遠地指向某個特定的 commit,就像是表示一個"里程碑"一樣。',"",'更重要的是,當有新的 commit 時,它們也不會移動,你不可以 "checkout" 到 tag 上面 commit,tag 的存在就像是一個在 commit tree 上的表示特定訊息的一個錨。',"","讓我們來實際看一下 tag 長什麼樣子..."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["讓我們試著建立一個 tag,指向 commit `C1`,表示這是我們第一個版本。"],afterMarkdowns:["看吧!非常容易,我們命名這個 tag 叫做 `v1`,並且讓它指向 commit `C1`,如果你離開了該 commit,git 會根據 `HEAD` 所指向的位置才分辨。"],command:"git tag v1 C1",beforeCommand:"git commit"}},{type:"ModalAlert",options:{markdowns:["在這個關卡中,建立一個如視覺化目標裡面的 tag,然後 checkout 到 `v1` 上面,要注意你會進到分離 `HEAD` 的狀態,這是因為你不能夠直接在 `v1` 上面做 commit。","","在下個關卡中我們會介紹更多 tag 的應用..."]}}]},zh_CN:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Tags","","相信通过前面课程的学习你已经发现了:分支很容易被人为移动,并且当有新的提交时,它也会移动。分支很容易被改变,大部分分支还只是临时的,并且还一直在变。","","你可能会问了:有没有什么可以*永远*指向某个提交记录的标识呢,比如软件发布新的大版本,或者是修正一些重要的 Bug 或是增加了某些新特性,有没有比分支更好的可以永远指向这些提交的方法呢?",""]}},{type:"ModalAlert",options:{markdowns:["当然有了!Git 的 tag 就是干这个用的啊,它们可以(在某种程度上 —— 因为标签可以被删除后重新在另外一个位置创建同名的标签)永久地将某个特定的提交命名为里程碑,然后就可以像分支一样引用了。","","更难得的是,它们并不会随着新的提交而移动。你也不能切换到某个标签上面进行修改提交,它就像是提交树上的一个锚点,标识了某个特定的位置。","","咱们来看看标签到底是什么样。"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["咱们先建立一个标签,指向提交记录 `C1`,表示这是我们 1.0 版本。"],afterMarkdowns:["很容易吧!我们将这个标签命名为 `v1`,并且明确地让它指向提交记录 `C1`,如果你不指定提交记录,Git 会用 `HEAD` 所指向的位置。"],command:"git tag v1 C1",beforeCommand:"git commit"}},{type:"ModalAlert",options:{markdowns:["在这个关卡中,按照目标建立两个标签,然后切换到 `v1` 上面,要注意你会进到分离 `HEAD` 的状态 —— 这是因为不能直接在`v1` 上面做 commit。","","在下个关卡中我们会介绍更多关于标签的有趣的应用。"]}}]},es_AR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Tags en git","","Como aprendiste en lecciones anteriores, las ramas pueden moverse fácilmente, y en general van referenciando distintos commits a medida que el trabajo se va completando en ellas. Las ramas cambian fácilmente, suelen ser temporales, y siempre cambiantes.","","Si ese es el caso, te podrías estar preguntando si hay una manera de marcar *permanentemente* puntos en la historia de tu proyecto. Para cosas como releases mayores o grandes merges, ¿hay algún modo de marcar esos commits con algo más permanente que un branch?",""]}},{type:"ModalAlert",options:{markdowns:['¡Seguro que hay! Los tags de git soportan exactamente este caso de uso -- marcan (bastante) permanentemente determinados commits como "hitos" que podés referenciar como a un branch.',"",'Aún más importante, los tags no avanzan cuando se crean nuevos commits. No podés "checkoutear" un tag y completar el trabajo en ese tag - los tags son marcas fijas en el árbol de commits que designan ciertos puntos.',"","Veamos cómo se ven los tags en práctica..."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Creemos un tag en `C1`, que es nuestro prototipo de la versión 1"],afterMarkdowns:["¡Ahí está! Bastante simple. Nombramos al tag `v1` y referenciamos explícitamente al commit `C1`. Si no especificás el commit, git va a usar al apuntado por `HEAD`."],command:"git tag v1 C1",beforeCommand:"git commit"}},{type:"ModalAlert",options:{markdowns:["Para este nivel, simplemente creá los tags en la visualización final y después checkouteá `v1`. Notá cómo entrás en el estado detached -- esto es porque no podés commitear directamente sobre el tag `v1`.","","En el próximo nivel vamos a examinar un caso de uso más interesante para los tags."]}}]},es_ES:{childViews:[{type:"ModalAlert",options:{markdowns:["## Tags en git","","Como aprendiste en lecciones anteriores, las ramas pueden moverse fácilmente, y en general van referenciando distintos commits a medida que el trabajo se va completando en ellas. Las ramas cambian fácilmente, suelen ser temporales, y siempre cambiantes.","","Si ese es el caso, te podrías estar preguntando si hay una manera de marcar *permanentemente* puntos en la historia de tu proyecto. Para cosas como releases mayores o grandes merges, ¿hay algún modo de marcar esos commits con algo más permanente que un branch?",""]}},{type:"ModalAlert",options:{markdowns:['¡Seguro que hay! Los tags de git soportan exactamente este caso de uso -- marcan (bastante) permanentemente determinados commits como "hitos" que puedes referenciar como a un branch.',"","Aún más importante, los tags no avanzan cuando se crean nuevos commits. No puedes hacer checkout a un tag y completar el trabajo en ese tag - los tags son marcas fijas en el árbol de commits que designan ciertos puntos.","","Veamos cómo se ven los tags en práctica..."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Creemos un tag en `C1`, que es nuestro prototipo de la versión 1"],afterMarkdowns:["¡Ahí está! Bastante simple. Nombramos al tag `v1` y referenciamos explícitamente al commit `C1`. Si no especificas el commit, git va a usar al apuntado por `HEAD`."],command:"git tag v1 C1",beforeCommand:"git commit"}},{type:"ModalAlert",options:{markdowns:["Para este nivel, simplemente crea los tags en la visualización final y después haz checkout con `v1`. Observa cómo entras en el estado detached -- esto es porque no puedes hacer commit directamente sobre el tag `v1`.","","En el próximo nivel vamos a examinar un caso de uso más interesante para los tags."]}}]},es_MX:{childViews:[{type:"ModalAlert",options:{markdowns:["## Tags en git","","Como aprendiste en lecciones anteriores, las ramas pueden moverse fácilmente y en general van referenciando distintas confirmaciones a medida que el trabajo se va completando en ellas. Las ramas cambian fácilmente, suelen ser temporales y siempre cambiantes.","","Si ese es el caso, te podrías estar preguntando si hay una manera de marcar *permanentemente* puntos en la historia de tu proyecto. Para cosas como releases mayores o grandes mezclas (merges), ¿hay algún modo de marcar esas confirmaciones con algo más permanente que una rama?",""]}},{type:"ModalAlert",options:{markdowns:['¡Apuesto a que lo hay! Los tags de Git soportan exactamente este caso de uso -- marcan (bastante) permanentemente determinadas confirmaciones como "hitos" que puedes referenciar como a una rama.',"","Aún más importante, los tags no avanzan cuando se crean nuevas confirmaciones. No puedes hacer checkout a un tag y completar el trabajo en ese tag - los tags son marcas fijas en el árbol de confirmaciones que designan ciertos puntos.","","Veamos cómo se ven los tags en práctica..."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Intentemos crear un tag en `C1`, que es la versión 1 de nuestro prototipo"],afterMarkdowns:["¡Ahí está! Bastante simple. Nombramos al tag `v1` y referenciamos explícitamente a la confirmación `C1`. Si no especificas la confirmación Git va a usar al apuntado por `HEAD`."],command:"git tag v1 C1",beforeCommand:"git commit"}},{type:"ModalAlert",options:{markdowns:["Para este nivel, simplemente crea los tags en la visualización final y después haz checkout con `v1`. Observa cómo entras en el estado detached -- esto es porque no puedes confirmar (commit) directamente sobre el tag `v1`.","","En el próximo nivel vamos a examinar un caso de uso más interesante para los tags."]}}]},pt_BR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Tags no Git","","Como você aprendeu nas lições anteriores, ramos são fáceis de mover e geralmente vão se referindo a diferentes commits conforme você vai trabalhando no código. Ramos são facilmente mutáveis, frequentemente temporários, e estão sempre mudando.","","Se este é o caso, você pode estar se perguntando se não existe uma forma de marcar *permanentemente* pontos históricos do projeto. Para coisas como grandes releases ou grandes merges, existe alguma forma de marcar commits com algo mais permanente que um ramo?",""]}},{type:"ModalAlert",options:{markdowns:['Você acertou a aposta, existe sim! As tags do Git foram criadas exatamente para esse caso de uso -- elas marcam de forma (relativamente) permanente certos commits como se fossem "pedras de kilometragem" ("milestones") em uma estrada, e você pode referenciá-las exatamente como faz com ramos.',"",'O mais importante, no entanto, é que elas nunca se movem sozinhas quando novos commits são criados. Você pode fazer "checkout" em uma tag e então completar trabalho nessa tag -- tags existem como âncoras na árvore de commits que estão atreladas a certos pontos.',"","Vejamos como as tags se comportam na prática."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Criemos uma tag em `C1`, que é nosso protótipo da versão 1"],afterMarkdowns:["Aqui! Bem fácil. Nós chamamos a tag de `v1` e referenciamos o commit `C1` explicitamente. Se você chamar o comando sem especificar um commit, o git vai usar seja lá qual commit para o qual o `HEAD` estiver apontando."],command:"git tag v1 C1",beforeCommand:"git commit"}},{type:"ModalAlert",options:{markdowns:['Para completar esta tarefa, simplesmente crie as tags mostradas na visualização do objetivo, e então faça checkout em `v1`. Veja que você vai para o estado "Detached HEAD" -- isso é devido ao fato de que você não pode commitar diretamente na tag `v1`.',"","No próximo nível, examinaremos mais um caso de uso interessante para as tags."]}}]},gl:{childViews:[{type:"ModalAlert",options:{markdowns:["## Etiquetas en Git","","Como aprendiches nas leccións previas, as ramas pódense mover sinxelamente, e xeralmente refírense a distintos commits según vas completando o código. As ramas mutan con facilidade, soen ser temporais, e sempre cambiantes.","","Se estamos nese caso, podes preguntarte se existe unha forma de marcar *permanentemente* puntos históricos no proxecto. Para cousas como grandes entregas ou grandes merges, ¿existe algunha forma de marcar commits con algo máis permanente que unha rama?",""]}},{type:"ModalAlert",options:{markdowns:['Acertaches seguro, ¡si que existe! As etiquetas de git foron creadas para ese propósito -- elas marcan de forma (relativamente) permanente algún commits coma se fosen "marcos das fincas" ("milestones") nun campeiro, e podes facer referencias a elas mellor que o catastro.',"",'É moi importante saber que, as etiquetas non avanzan cando se crean novos commits. Non podes facer "checkout" nun tag e completar o traballo de esa etiqueta cun commit amend ou rebasándoo -- as etiquetas existen como áncoras na árbore de commits que están pegadas a certos puntos.',"","Vexamos como se comportan as etiquetas na práctica."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Creamos un tag na rama `C1`, que é o noso prototipo da versión 1"],afterMarkdowns:["¡Ahí o tes!. Sinxelo. Nomeamos a etiqueta de `v1` e referenciamos o commit `C1` explícitamente. Se non indicas o commit, git vai empregar o commit onde está situado o `HEAD`."],command:"git tag v1 C1",beforeCommand:"git commit"}},{type:"ModalAlert",options:{markdowns:['Para completar esta tarefa, crea as etiquetas amosadas na visualización do obxectivo, e entón fai checkout en `v1`. Mira que terminas no estado "Detached HEAD" -- eso é porque non podes facer commit directamente na etiqueta `v1`.',"","No próximo nivel, examinaremos un caso de uso máis interesante para as etiquetas."]}}]},de_DE:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Tags","","Wie du aus den vorhergehenden Levels weißt, sind Branches einfach durch die Gegend zu schieben und zeigen auf verschiedene Commits, während die Arbeit in ihnen fortschreitet. Ein Branch wird oft verändert, manchmal nur temporär, und ist ständig in Bewegung.","","Da das so ist fragst du dich vielleicht, ob es nicht eine Möglichkeit gibt, eine bestimmte Stelle in deiner Projekt-History *permanent* zu kennzeichnen. Kann man nicht zum Beispiel für große Releases und Meilensteine nicht einen Commit mit etwas festerem kennzeichnen, als mit einem Branch-Namen?",""]}},{type:"ModalAlert",options:{markdowns:["Aber klar! In Git gibt es genau zu diesem Zweck Tags -- sie kennzeichnen einen Commit (ziemlich) permanent als Meilenstein oder ähnliches und man kann sie ansprechen wie Branch-Namen.","","Noch viel wichtiger, Tags verändern nicht ihre Position, wenn man Commits hinzufügt. Du kannst ein Tag nicht in diesem Sinne auschecken und dann Modifikationen darauf committen. Tags sind Anker im Commit-Baum, die bestimmte Stellen anzeigen.","","Lass uns anschauen wie Tags in der Praxis funktionieren."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Lass uns ein Tag bei `C1` anlegen und damit die Version 1 unseres Prototyps markieren."],afterMarkdowns:["Peng! Ziemlich einfach. Wir haben das Tag `v1` genannt und lassen es auf `C1` zeigen. Wenn du den Commit weglässt, wird das Tag für den Commit erzeugt, auf den `HEAD` zeigt."],command:"git tag v1 C1",beforeCommand:"git commit"}},{type:"ModalAlert",options:{markdowns:['Um diesen Level zu schaffen, erstelle einfach die Tags wie sie in der Zielbeschreibung stehen und mach dann einen Checkout auf `v1`. Beachte wie du dabei in den "Detached HEAD" Zustand gehst -- das liegt daran, dass du keine Commits direkt auf das `v1` Tag machen kannst.',"","Im nächsten Level schauen wir uns dann einen interessanteren Anwendungsfall für Tags an."]}}]},ja:{childViews:[{type:"ModalAlert",options:{markdowns:["## Gitのタグ","","私たちは、前回、ブランチが簡単に移動でき、またしばしば異なる作業の完了しているコミットを参照できることを学びました。ブランチは、簡単に変化させることができ、しばしば一時的で、いつも移動しています。","","そのような場合に、もしプロジェクトの歴史的な点に*恒久的*にマークをつける方法があったならと思うかもしれません。例えば、メジャーリリースや大きなマージを行った時などに、そのコミットにブランチより恒久的な印をつける方法はないのでしょうか?",""]}},{type:"ModalAlert",options:{markdowns:["それは存在します!Gitのタグは当にそのような場面で最適です。 -- ブランチのように参照でき、「マイルストーン(標識)」のような確かで(多少)永久的な印をコミットにつけます。","","重要なことは、コミットを新たに作ってもタグは動かないということです。あなたは、タグにチェックアウトしてそのタグで作業を完了させるということはできません -- タグは、コミットツリーの特定の地点を指定する錨のようなものとして機能します。","","では、実際にタグがどのように動作するかを見てみましょう。"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["私たちのバージョン1の原本となる`C1`にタグを付けてみましょう"],afterMarkdowns:["見てください!とても簡単ですね。私たちは、`v1`という名前のタグを明示的に`C1`コミットに付与しました。もし、コミットを指定しなかった場合、`HEAD`にあるものにタグがつけられることになります。"],command:"git tag v1 C1",beforeCommand:"git commit"}},{type:"ModalAlert",options:{markdowns:["このレベルは、ゴールとして提示されている図のようにタグを作り、`v1`にチェックアウトすることで完了します。そうすると、あなたは`HEAD`分離状態になることに気づくでしょう -- これは、あなたが直接`v1`タグにコミットができないことを意味しています。","","次のレベルでは、タグのより興味深い使い方について学びます。"]}}]},ru_RU:{childViews:[{type:"ModalAlert",options:{markdowns:["## Теги","","В прошлых уроках мы усвоили, что ветки просто двигать туда-сюда и они часто ссылаются на разные коммиты как на изменения данных в ветке. Ветки просто изменить, они часто временны и постоянно меняют своё состояние.","","В таком случае, где взять *постоянную* ссылку на момент в истории изменений? Для таких вещей, как релиз и большие слияния, нужно нечто более постоянное, чем ветка.",""]}},{type:"ModalAlert",options:{markdowns:["Такое средство имеется. Git предоставляет нам теги, чья основная задача – ссылаться постоянно на конкретный коммит.","","Важно, что после создания они никогда не сменят своего положения, так что можно с лёгкостью сделать checkout конкретного момента в истории изменений","","Посмотрим на это на практике."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Создадим тег на `C1`, который будет нашей версией 1"],afterMarkdowns:["Готово! Всё просто. Мы назвали тег `v1` и заставили его ссылаться на `C1` явным образом. Если конкретный коммит не указан, гит пометит тегом `HEAD`."],command:"git tag v1 C1",beforeCommand:"git commit"}},{type:"ModalAlert",options:{markdowns:["Чтобы пройти этот уровень, просто создай теги так, как показано на визуализации, и потом перейди на тег `v1`. Обрати внимание, что ты перейдёшь в состояние `detached HEAD`, так как нельзя сделать коммит прямо в тег `v1`.","","В следующем уровне мы попробуем более интересные способы применения тегов."]}}]},ko:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git 태그","","이전 강의에서 배웠듯이, 브랜치는 이동하기 쉽습니다. 작업의 완료, 진행에 따라 이리저리 이동하면서 서로 다른 커밋을 참조하게 됩니다. 브랜치는 쉽게 변하며 임시적인 것입니다 항상 바뀌고 있죠.","","이런 상황에서, 여러분은 여러분의 프로젝트의 역사(작업 이력)에서 중요한 지점들에 *영구적으로* 표시를 할 방법이 없을까 궁금할것입니다. 주요 릴리즈나 큰 브랜치 병합(merge)이 있을때가 그런 상황이겠군요. 이런 상황에 커밋들을 표시할 브랜치보다 영구적인 방법이 있을까요?",""]}},{type:"ModalAlert",options:{markdowns:['당연히 있습니다! Git 태그는 딱 이런 상황을 위해 존재합니다 -- Git 태그는 특정 커밋들을 브랜치로 참조하듯이 영구적인 "milestone(이정표)"으로 표시합니다.',"",'중요한 점은, Git 태그는 커밋들이 추가적으로 생성되어도 절대 움직이지 않는다는 것입니다. 여러분은 태그를 "체크아웃"한 후에 그 태그에서 어떤 작업을 완료할 수 없습니다 -- 태그는 커밋 트리에서 특정 지점을 표시하기위한 닻같은 역할을 합니다.',"","자 태그가 무엇을 하는지 예제를 통해 알아봅시다"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:[" 프로토타입의 첫 버전인 `C1`에 태그를 만들어 봅시다."],afterMarkdowns:["자! 아주 쉽죠. 우리는 태그의 이름을 `v1`이라고 지었고 커밋 `C1`을 지정해서 참조했습니다. 만약 커밋을 지정해주지 않으면 git은 `HEAD`가 있는지점에 태그를 붙일 것입니다."],command:"git tag v1 C1",beforeCommand:"git commit"}},{type:"ModalAlert",options:{markdowns:["이번 레벨에서는 goal에 나타난것과 같이 태그를 만들고 `v1`을 체크아웃하면 됩니다. 분리된 `HEAD` 상태로 변하는것을 확인 해 보십시오 -- 이것은 `v1` 태그에 직접 커밋을 할 수 없기 때문입니다.","","다음 레벨에서는 태그의 더 흥미로운 활용 방법을 확인해 볼 것입니다."]}}]},uk:{childViews:[{type:"ModalAlert",options:{markdowns:["## Таги в Git","","Як ти вже знаєш з попередніх уроків, гілки досить просто переносити в інші місця, і вони постійно вказують на різні коміти в процесі того? як ті в них додаються. Гілки легко модифікувати, часто тимчасово, й вони постійно змінюються.","","В такому разі, де взяти *постійне* посилання на момент в історії твого проекту? Для таких речей як релізи чи великі мерджі потрібно щось більш стале ніж гілка.",""]}},{type:"ModalAlert",options:{markdowns:['Є один спосіб! Таги в гіт якраз для цього й були створені -- вони (більш-менш) постійно вказують на певні коміти, й відмічають певні "віхи" в житті проекту, на які ти можеш потім посилатись так само як на гілки.',"",'Але, що важливіше, вони ніколи не переміщуються під час створення нових комітів. Ти не зможеш "зачекаутити" таг а потім закомітити якісь зміни в цей таг -- таги просто відмічають корисні чи символічні місця в дереві комітів.',"","Розгляньмо це на практиці"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Спробуймо зробити новий таг на `C1`, що є прототипом нашої першої версії (вигаданого проекту)"],afterMarkdowns:["Ось і маєш! Все досить просто. Ми назвали наш таг `v1` і він явно посилається на `C1`. Якщо пропустити коміт, git просто відмітить те, на чому знаходиться `HEAD` в данний момент"],command:"git tag v1 C1",beforeCommand:"git commit"}},{type:"ModalAlert",options:{markdowns:["Для того щоб пройти цей рівень, достатньо створити кілька тагів, як показано на візуалізації цілей, і потім зачекаутити `v1`. Зауваж, що ти потрапиш в стан `detached HEAD` -- це тому що ти не можеш напряму комітити в таг `v1`.","","В наступному рівні ми розглянемо більш цікавий приклад роботи з тагами."]}}]},vi:{childViews:[{type:"ModalAlert",options:{markdowns:["## Tag trong Git","","Qua các bài học trước, bạn đã biết được rằng rất dễ dàng để di chuyển qua lại giữa các nhánh và chúng thường tham chiếu đến các commit khác nhau trong quá trình ta làm việc trên chúng. Nhánh dễ dàng chỉnh sửa, thường tạm thời và luôn thay đổi.","","Nếu như vậy thì bạn có thể sẽ thắc mắc liệu có cách nào để đánh dấu *vĩnh viễn* một thời điểm nào đó trong lịch sử làm việc không? Khi mà dự án càng ngày càng mở rộng và merge thì diễn ra liên tục, vậy thì có cách nào để đánh dấu những commit đó một cách cố định hơn nhánh không?",""]}},{type:"ModalAlert",options:{markdowns:['Tất nhiên là có chứ! Git có các tag (thẻ) để hỗ trợ vấn đề này -- chúng (một phần chứ không hoàn toàn) đánh dấu vĩnh viễn một số commit nhất định là "cột mốc" mà sau này bạn có thể tham chiếu đến như với nhánh.',"",'Quan trọng hơn là, khi ta commit thì chúng không hề bị di chuyển. Bạn không thể "check out" một tag rồi làm việc trên đó -- tag giống như là mỏ neo để chỉ định một điểm cụ thể nào đó trên cây lịch sử.',"","Cùng xem tag thực tế là như thế nào nào."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Hãy thử tạo một thẻ ở commit `C1` chỉ định rằng đây là phiên bản thứ nhất của ta."],afterMarkdowns:["Đó! Đơn giản như đan rổ. Ta tạo ra thẻ `v1` và tham chiếu đến commit `C1`. Nếu bạn không chỉ định commit, git sẽ gắn thẻ vào commit mà `HEAD` đang trỏ tới"],command:"git tag v1 C1",beforeCommand:"git commit"}},{type:"ModalAlert",options:{markdowns:["Trong cấp độ này hãy tạo ra một thẻ tại vị trí chỉ định và chuyển sang `v1`. Để ý rằng bạn sẽ chuyển sang trạng thái tách biệt `HEAD` -- bởi vì bạn không thể tham chiếu đến thẻ `v1`.","","Sang cấp độ tới ta sẽ xem xét một vài cách hay ho để dùng thẻ."]}}]},sl_SI:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Tagi","","Kot si se naučil v prejšnjih lekcijah, so branchi enostavni za premikat okoli in pogosto kažejo na različne commite in delo za njimi. Veliko se spreminjajo in združujejo, pogosto le začasno.","","Če je temu res tako, se morda sprašuješ, če obstaja kak način, ki bi *trajno* označil točke v zgodovini projekta. Za stvari kot so večji release-i ali pomembni merge-i, ali obstaja način, ki je trajnejši kot branch?",""]}},{type:"ModalAlert",options:{markdowns:['Itak da je! Git tagi podpirajo točno ta primer uporabe -- oni trajno (do neke mere) označijo določene commite kot "mejnike" na katere se lahko sklicujemo kot na branche.',"",'Toda še pomembneje, oni se ne premikajo, ko se ustvarjajo novi commiti. Ne moreš "checkoutat" tag in nato končati delo na tem tagu -- tagi obstajajo kot sidra na drevesu commitov, ki označujejo določene točke.',"","Poglejmo kako to izgleda v praksi."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Poizkusimo narediti tag na `C1`, ki je recimo naša prva različica prototipa."],afterMarkdowns:["Tako! Kar enostavno. Tag smo poimenovali `v1` in se sklicuje na commit `C1`. Če ne navedeš commita, bo git postavil tag tam, kjer je trenutno `HEAD`."],command:"git tag v1 C1",beforeCommand:"git commit"}},{type:"ModalAlert",options:{markdowns:["Za to stopnjo ustvari tage kot so določeni na ciljnem prikazu in nato checkoutaj `v1`. Opazil boš, kako prideš v stanje ločenega `HEAD-a` -- to je zato, ker ne moreš commitat direktno na `v1` tag.","","V naslednji stopnji si bomo pogledali zanimivejši primer za uporabo tagov."]}}]},pl:{childViews:[{type:"ModalAlert",options:{markdowns:["## Tagi Gita","","Jak wiesz z poprzednich lekcji, gałęzie łatwo przemieszczać, a w momencie ukończenia pracy nad nimi, często odnoszą się do różnych commitów. Gałęzie łatwo ulegają mutacjom, często są tymczasowe i zawsze się zmieniają.","","A skoro tak, to możesz się zastanawiać, czy istnieje sposób na *trwałe* zaznaczanie ważnych punktów w historii projektu. Czy istnieje jakiś sposób na oznaczenie tych commitów czymś bardziej trwałym niż gałąź, w przypadku takich rzeczy jak duże wydania i duże scalenia/ merge?",""]}},{type:"ModalAlert",options:{markdowns:['Pewnie, że tak! Znaczniki/tagi Gita obsługują dokładnie ten przypadek użycia -- (do pewnego stopnia) trwale oznaczają pewne commity jako "kamienie milowe", do których można się następnie odnieść (po nazwie) jak do gałęzi.',"",'Co ważniejsze jednak, nigdy się nie przesuwają, gdy tworzone są kolejne commity. Nie można "checkoutować" tagu, a następnie zakończyć pracy nad nim (jakby był gałęzią, na której można zapisać nowe zmiany) - tagi są jak kotwice w drzewie commitów, które wyznaczają pewne miejsca.',"","Zobaczmy, jak tagi wyglądają w praktyce."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Spróbujmy zrobić tag w `C1`, który jest prototypem naszej wersji 1."],afterMarkdowns:["Otóż to! Całkiem proste. Nazwaliśmy tag `v1` i odwołaliśmy się do commitu `C1` w sposób jawny. Jeśli nie wskażesz konkretnego commitu, Git użyje commitu, na który wskazuje `HEAD`."],command:"git tag v1 C1",beforeCommand:"git commit"}},{type:"ModalAlert",options:{markdowns:["Dla tego poziomu utwórz tagi takie jak w wizualizacji celu, a następnie checkoutuj `v1`. Zauważ, że przechodzisz do odłączonego stanu `HEAD` - to dlatego, że nie możesz commitować bezpośrednio na tagu `v1`.","","Na kolejnym poziomie przeanalizujemy bardziej interesujący przypadek użycia tagów."]}}]},it_IT:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Tag","","Come hai già imparato nelle lezioni precedenti, i rami sono facili da spostare e puntano a commit differenti man mano che il lavoro avanza. I rami subiscono modifiche, spesso temporaneamente, ma sono sempre in continua evoluzione.","","Ti starai chedendo se esiste un modo *definitivo* per segnare un particolare commit del repository. Nel caso di release importanti e grandi merge (fusioni), esiste un modo per segnare questi commit con qualcosa di più permanente dei rami?",""]}},{type:"ModalAlert",options:{markdowns:['Ci puoi scommettere! Git tag serve proprio a questo -- i tag contrassegnano in modo permanente dei commit "importanti" a cui puoi far riferimento come avviene con i rami.',"","Ancora più importante il fatto che non si spostano anche se vengono eseguiti nuovi commit. Non puoi selezionare un tag e aggiungere del lavoro su quel tag -- i tag esistono come ancore nell'albero dei commit, e si riferiscono a determinati punti.","","Vediamo in pratica a cosa servono i tag."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Creiamo un tag in `C1` che è la nostra versione 1 del prototipo."],afterMarkdowns:["Ecco! Abbastanza facile. Abbiamo creato il tag `v1` che si riferisce al solo commit `C1`. Se non specifichi il commit, git creera il tag sul commit puntato da `HEAD`."],command:"git tag v1 C1",beforeCommand:"git commit"}},{type:"ModalAlert",options:{markdowns:["In questo livello riproduci gli stessi tag mostrati nell'obiettivo, e alla fine seleziona il tag `v1`. Presta attenzione a come vai nello stato di detached `HEAD` -- questo perché non puoi creare commit direttamente dal tag `v1.","","Nel livello successivo vedremo un utilizzo più interessante dell'uso dei tag."]}}]},tr_TR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Tag'leri","","Önceki derslerden öğrendiğiniz gibi, branch'ler kolayca taşınabilir ve üzerlerinde çalışma tamamlandıkça farklı commitlere işaret ederler. Branch'ler kolayca değiştirilebilir, genellikle geçici ve her zaman değişkendirler.","","Eğer durum buysa, projenizin tarihindeki belirli noktaları *kalıcı* olarak işaretlemenin bir yolunun olup olmadığını merak ediyor olabilirsiniz. Büyük sürümler ve önemli birleştirmeler gibi durumlar için, bunları bir branch üzerine tag'lemek yerine daha kalıcı bir şekilde nasıl tag'leyeceğinizi düşünüyor olabilirsiniz.",""]}},{type:"ModalAlert",options:{markdowns:["Direkt olarak işaretlemek mümkün! Git tag'leri tam da bu kullanım durumunu destekler - belirli commit'leri \"milestone\" olarak (bir dereceye kadar) kalıcı olarak işaretler ve sonra bir branch gibi başvurabileceğiniz şekilde kullanabilirsiniz.","",'Daha da önemlisi, daha fazla commit oluşturulduğunda asla hareket etmezler. Bir etiketi "checkout" edemez ve sonra o etiket üzerinde çalışmayı tamamlayamazsınız - tagler, belirli noktaları belirleyen commit ağacındaki referans noktaları olarak varlıklarını sürdürürler.',"","Gelin, tag'ler pratikte nasıl görünüyor bakalım."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Hadi `C1` üzerinde bir tag oluşturmayı deneyelim, bu bizim 1. sürüm prototipimizdir."],afterMarkdowns:["İşte bu! Oldukça kolay. Etiketi `v1` olarak adlandırdık ve `C1` commit'ini açıkça refere ettik. Eğer commit'i belirtmezseniz, git sadece `HEAD` neredeyse onu kullanır."],command:"git tag v1 C1",beforeCommand:"git commit"}},{type:"ModalAlert",options:{markdowns:["Bu seviye için sadece hedef görselleştirmede tag'leri oluşturun ve ardından `v1`i kontrol edin. Dikkatinizi çekecektir ki bağımsız (detached) `HEAD` durumuna giriyorsunuz - bu, `v1` etiketi üzerine doğrudan commit yapamayacağınız içindir.","","Sonraki seviyede, etiketlerin daha ilginç bir kullanım durumunu inceleyeceğiz."]}}]}}}},{}],131:[function(e,t,o){o.level={goalTreeString:"%7B%22branches%22%3A%7B%22main%22%3A%7B%22target%22%3A%22C7%27%22%2C%22id%22%3A%22main%22%7D%2C%22bugFix%22%3A%7B%22target%22%3A%22C3%22%2C%22id%22%3A%22bugFix%22%7D%2C%22side%22%3A%7B%22target%22%3A%22C5%22%2C%22id%22%3A%22side%22%7D%2C%22another%22%3A%7B%22target%22%3A%22C7%22%2C%22id%22%3A%22another%22%7D%7D%2C%22commits%22%3A%7B%22C0%22%3A%7B%22parents%22%3A%5B%5D%2C%22id%22%3A%22C0%22%2C%22rootCommit%22%3Atrue%7D%2C%22C1%22%3A%7B%22parents%22%3A%5B%22C0%22%5D%2C%22id%22%3A%22C1%22%7D%2C%22C2%22%3A%7B%22parents%22%3A%5B%22C1%22%5D%2C%22id%22%3A%22C2%22%7D%2C%22C3%22%3A%7B%22parents%22%3A%5B%22C2%22%5D%2C%22id%22%3A%22C3%22%7D%2C%22C4%22%3A%7B%22parents%22%3A%5B%22C1%22%5D%2C%22id%22%3A%22C4%22%7D%2C%22C5%22%3A%7B%22parents%22%3A%5B%22C4%22%5D%2C%22id%22%3A%22C5%22%7D%2C%22C6%22%3A%7B%22parents%22%3A%5B%22C1%22%5D%2C%22id%22%3A%22C6%22%7D%2C%22C7%22%3A%7B%22parents%22%3A%5B%22C6%22%5D%2C%22id%22%3A%22C7%22%7D%2C%22C3%27%22%3A%7B%22parents%22%3A%5B%22C1%22%5D%2C%22id%22%3A%22C3%27%22%7D%2C%22C4%27%22%3A%7B%22parents%22%3A%5B%22C3%27%22%5D%2C%22id%22%3A%22C4%27%22%7D%2C%22C7%27%22%3A%7B%22parents%22%3A%5B%22C4%27%22%5D%2C%22id%22%3A%22C7%27%22%7D%7D%2C%22HEAD%22%3A%7B%22target%22%3A%22main%22%2C%22id%22%3A%22HEAD%22%7D%7D",solutionCommand:"git cherry-pick C3 C4 C7",compareOnlyMainHashAgnostic:!0,disabledMap:{"git rebase":!0},startTree:'{"branches":{"main":{"target":"C1","id":"main"},"bugFix":{"target":"C3","id":"bugFix"},"side":{"target":"C5","id":"side"},"another":{"target":"C7","id":"another"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C2"],"id":"C3"},"C4":{"parents":["C1"],"id":"C4"},"C5":{"parents":["C4"],"id":"C5"},"C6":{"parents":["C1"],"id":"C6"},"C7":{"parents":["C6"],"id":"C7"}},"HEAD":{"target":"main","id":"HEAD"}}',name:{fr_FR:"Introduction à cherry-pick",en_US:"Cherry-pick Intro",de_DE:"Einführung Cherry-Picking",ja:"cherry-pick入門",es_AR:"Introducción a cherry-pick",es_ES:"Introducción a cherry-pick",es_MX:"Introducción a cherry-pick",pt_BR:"Introdução ao cherry-pick",gl:"Introuducción a cherry-pick",zh_CN:"Git Cherry-pick",zh_TW:"介紹 cherry-pick",ru_RU:"Введение в Cherry-pick",ko:"Cherry-pick 소개",uk:"Знайомство з cherry-pick",vi:"Giới thiệu về cherry-pick",sl_SI:"Uvod v Cherry-pick",it_IT:"Introduzione al cherry-pick",pl:"Wprowadzenie do cherry-pick"},hint:{fr_FR:"git cherry-pick suivi par les noms de commits",en_US:"git cherry-pick followed by commit names!",de_DE:"git cherry-pick gefolgt von Commit-Namen.",ja:"git cherry-pickの後にコミット名を追加",es_AR:"git cherry-pick seguido de los nombres de los commits",es_ES:"git cherry-pick seguido de los nombres de los commits",pt_BR:"git cherry-pick seguido dos nomes dos commits",gl:"git cherry-pick seguido das referencias a commits",zh_CN:"git cherry-pick 后面要跟提交的名字",zh_TW:"git cherry-pick 後面要接著 commit 的名稱",ru_RU:"git cherry-pick основывается на именах коммитов!",ko:"커밋의 이름들로 git cherry-pick 하세요!",uk:"git cherry-pick базується на іменах комітів!",vi:"git cherry-pick sau đó là tên commit!",sl_SI:"git cherry-pick nato pa imena commitov.",it_IT:"git cherry-pick seguito dai nomi dei commit!",pl:"git cherry-pick a po nim nazwy commitów!"},startDialog:{en_US:{childViews:[{type:"ModalAlert",options:{markdowns:["## Moving Work Around","","So far we've covered the basics of git -- committing, branching, and moving around in the source tree. Just these concepts are enough to leverage 90% of the power of git repositories and cover the main needs of developers.","",'That remaining 10%, however, can be quite useful during complex workflows (or when you\'ve gotten yourself into a bind). The next concept we\'re going to cover is "moving work around" -- in other words, it\'s a way for developers to say "I want this work here and that work there" in precise, eloquent, flexible ways.',"","This may seem like a lot, but it's a simple concept."]}},{type:"ModalAlert",options:{markdowns:["## Git Cherry-pick","","The first command in this series is called `git cherry-pick`. It takes on the following form:","","* `git cherry-pick <...>`","","It's a very straightforward way of saying that you would like to copy a series of commits below your current location (`HEAD`). I personally love `cherry-pick` because there is very little magic involved and it's easy to understand.","","Let's see a demo!",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Here's a repository where we have some work in branch `side` that we want to copy to `main`. This could be accomplished through a rebase (which we have already learned), but let's see how cherry-pick performs."],afterMarkdowns:["That's it! We wanted commits `C2` and `C4` and git plopped them down right below us. Simple as that!"],command:"git cherry-pick C2 C4",beforeCommand:"git checkout -b side; git commit; git commit; git commit; git checkout main; git commit;"}},{type:"ModalAlert",options:{markdowns:["To complete this level, simply copy some work from the three branches shown into main. You can see which commits we want by looking at the goal visualization.",""]}}]},fr_FR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Déplacer votre travail","","Nous avons maintenant pratiqué les bases de Git -- commits, branches, et déplacements dans l'arbre des commits. Ces seuls concepts sont suffisants pour utiliser 90% du pouvoir des dépôts Git et satisfaire les principaux besoins des développeurs.","",'Les 10% restants, cependant, peuvent être assez utiles pour les systèmes assez complexes (ou quand vous vous êtes mis tout seul dans le pétrin). Le prochain concept que nous allons aborder est "déplacer son travail" (moving work around) -- en d\'autres termes, c\'est une façon pour les développeurs de dire "Je veux ce travail ici et cet autre là.".',"","Cela peut sembler compliqué, mais c'est un concept simple."]}},{type:"ModalAlert",options:{markdowns:["## Git Cherry-pick","","La première commande de cette série est `git cherry-pick`. Elle s'utilise ainsi :","","* `git cherry-pick <...>`","","C'est une manière simple de dire qu'on voudrait copier une série de commits en-dessous de notre emplacement actuel (`HEAD`). Personnellement, j'adore `cherry-pick` parce qu'il y a un petit peu de magie dedans, et parce que c'est facile à comprendre.","","Faisons une démonstration !",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Ici le dépôt que nous avons contient du travail dans la branche `side`, que nous voulons copier dans `main`. Cela pourrait être fait avec un rebase (que nous avons déjà appris), mais voyons comment cherry-pick fonctionne."],afterMarkdowns:["Voilà ! Nous voulions les commits `C2` et `C4` et Git les a fait apparaître juste sous nos pieds. Aussi simple que ça !"],command:"git cherry-pick C2 C4",beforeCommand:"git checkout -b side; git commit; git commit; git commit; git checkout main; git commit;"}},{type:"ModalAlert",options:{markdowns:["Pour finir ce niveau, copiez simplement le travail désigné dans la branche main. Vous pouvez voir les commits que nous souhaitons avoir en regardant dans la fenêtre d'objectif.",""]}}]},es_AR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Moviendo el trabajo por ahí","","Hasta ahora cubrimos lo básico de git -- commitear, branchear, y movernos por el árbol de commits. Estos conceptos alcanzan para aprovechar el 90% del poder de los repositorios de git y cubrir las necesidades principales de quienes programan.","",'El 10% restante, sin embargo, puede ser bastante útil en flujos de trabajo complejos (o cuando te metiste en algún problema complicado). El próximo concepto que vamos a cubrir es el de "mover el trabajo por ahí" -- en otras palabras, una forma que tienen quienes programan de decir "Quiero este trabajo allá y este otro allá" de una manera precisa, elocuente y flexible.',"","Puede parecer un montón, pero es un concepto bastante simple."]}},{type:"ModalAlert",options:{markdowns:["## Git Cherry-pick","","El primer comando en esta serie se llama `git cherry-pick`. Tiene la siguiente forma:",""," `git cherry-pick <...>`","","Es una manera bastante directa de decir que querés copiar una serie de commits sobre tu ubicación actual (`HEAD`). Personalmente amo `cherry-pick` porque hay muy poca magia involucrada y es bastante simple de entender.","","¡Veamos una demo!",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Acá tenemos un repositorio con algo de trabajo en la rama `side` que queremos copiar a `main`. Podríamos lograrlo con un rebase (y ya aprendimos cómo), pero veamos cómo se comporta cherry-pick."],afterMarkdowns:["¡Eso es todo! Queríamos los commits `C2` y `C4` y git los aplicó justo donde estábamos. ¡Tan simple como eso!"],command:"git cherry-pick C2 C4",beforeCommand:"git checkout -b side; git commit; git commit; git commit; git checkout main; git commit;"}},{type:"ModalAlert",options:{markdowns:["Para completar este nivel, simplemente copiá algo de trabajo desde otras tres ramas a main. Podés ver qué commits queremos en la visualización del objetivo.",""]}}]},es_ES:{childViews:[{type:"ModalAlert",options:{markdowns:["## Moviendo el trabajo por ahí","","Hasta ahora cubrimos lo básico de git -- hacer commits, crear ramas, y movernos por el árbol de commits. Estos conceptos alcanzan para aprovechar el 90% del poder de los repositorios de git y cubrir las necesidades principales de los desarrolladores.","",'El 10% restante, sin embargo, puede ser bastante útil en flujos de trabajo complejos (o cuando te metiste en algún problema complicado). El próximo concepto que vamos a cubrir es el de "mover el trabajo por ahí" -- en otras palabras, una forma que tienen los desarrolladores de decir "Quiero este trabajo aquí y este otro allí" de una manera precisa, elocuente y flexible.',"","Puede parecer un montón, pero es un concepto bastante simple."]}},{type:"ModalAlert",options:{markdowns:["## Git Cherry-pick","","El primer comando en esta serie se llama `git cherry-pick`. Tiene la siguiente forma:",""," `git cherry-pick <...>`","","Es una manera bastante directa de decir que quieres copiar una serie de commits sobre tu ubicación actual (`HEAD`). Personalmente amo `cherry-pick` porque hay muy poca magia involucrada y es bastante simple de entender.","","¡Veamos una demo!",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["A continuación tenemos un repositorio con algo de trabajo en la rama `side` que queremos copiar a `main`. Podríamos lograrlo con un rebase (y ya aprendimos cómo), pero veamos cómo se comporta cherry-pick."],afterMarkdowns:["¡Eso es todo! Queríamos los commits `C2` y `C4` y git los aplicó justo donde estábamos. ¡Tan simple como eso!"],command:"git cherry-pick C2 C4",beforeCommand:"git checkout -b side; git commit; git commit; git commit; git checkout main; git commit;"}},{type:"ModalAlert",options:{markdowns:["Para completar este nivel, simplemente copia algo de trabajo desde otras tres ramas a main. Puedes ver qué commits queremos en la visualización del objetivo.",""]}}]},es_MX:{childViews:[{type:"ModalAlert",options:{markdowns:["## Moviendo el trabajo por ahí","","Hasta ahora hemos cubierto lo básico de Git -- hacer confirmaciones, crear ramas y movernos por el árbol de confirmaciones. Estos conceptos alcanzan para aprovechar el 90% del poder de los repositorios de Git y cubrir las necesidades principales de los desarrolladores.","",'El 10% restante, sin embargo, puede ser bastante útil en flujos de trabajo complejos (o cuando te metiste en algún problema complicado). El próximo concepto que vamos a cubrir es el de "mover el trabajo por ahí" -- en otras palabras, una forma que tienen los desarrolladores de decir "Quiero este trabajo aquí y este otro allí" de una manera precisa, elocuente y flexible.',"","Puede parecer un montón, pero es un concepto bastante simple."]}},{type:"ModalAlert",options:{markdowns:["## Git Cherry-pick","","El primer comando en esta serie se llama `git cherry-pick`. Tiene la siguiente forma:",""," `git cherry-pick <...>`","","Es una manera bastante directa de decir que quieres copiar una serie de commits sobre tu ubicación actual (`HEAD`). Personalmente amo `cherry-pick` porque hay muy poca magia involucrada y es bastante simple de entender.","","¡Veamos una demostración!",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Aquí tenemos un repositorio donde tenemos algo de trabajo en la rama `side` que queremos copiar a `main`. Podríamos lograrlo con un rebase (y ya aprendimos cómo), pero veamos cómo se comporta cherry-pick."],afterMarkdowns:["¡Eso es todo! Queríamos los commits `C2` y `C4` y Git los aplicó justo donde estábamos. ¡Tan simple como eso!"],command:"git cherry-pick C2 C4",beforeCommand:"git checkout -b side; git commit; git commit; git commit; git checkout main; git commit;"}},{type:"ModalAlert",options:{markdowns:["Para completar este nivel, simplemente copia algo de trabajo desde otras tres ramas a main. Puedes ver qué commits queremos en la visualización del objetivo.",""]}}]},pt_BR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Movendo o trabalho por aí","","Por enquanto nós abordamos o básico do Git -- commitar, criar ramos, e mover-se pela árvore. Apenas esses conceitos já são suficientes para utilizar 90% do poder dos repositórios Git, e cobrem as principais necessidades dos desenvolvedores.","",'Os 10% restantes, entretanto, podem ser extremamente úteis em fluxos de trabalho complexos (ou quando você estiver em uma enrascada). O próximo conceito que vamos abordar é "movendo trabalho por aí" -- em outras palavras, veremos as formas como o desenvolvedor pode dizer "eu quero este trabalho aqui, e aquele ali" de formas precisas, eloquentes e flexíveis.',"","Isso pode parecer muito, mas os conceitos são simples."]}},{type:"ModalAlert",options:{markdowns:["## Git Cherry-pick","","O primeiro comando desta série é o `git cherry-pick`. Ele é chamado da seguinte forma:","","* `git cherry-pick <...>`","","Trata-se de uma forma bastante direta de dizer que você gostaria de copiar uma série de commits abaixo do seu local atual (`HEAD`). Eu pessoalmente amo o `cherry-pick` porque há muito pouca mágica envolvida e é fácil de entender o funcionamento.","","Vejamos uma demonstração!",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Aqui está um repositório onde temos algum trabalho no ramo `side` que desejamos copiar para o `main`. Isso poderia ser obtido por meio de um rebase (que já aprendemos), mas vamos ver como o cherry-pick se sai."],afterMarkdowns:["É isso! Queríamos os commits `C2` e `C4` e o git os inseriu logo abaixo de nós. Simples assim!"],command:"git cherry-pick C2 C4",beforeCommand:"git checkout -b side; git commit; git commit; git commit; git checkout main; git commit;"}},{type:"ModalAlert",options:{markdowns:["Para completar este nível, simplesmente copie algum trabalho dos outros três ramos para o main. Você pode ver quais commits queremos copiar na visualização do objetivo.",""]}}]},gl:{childViews:[{type:"ModalAlert",options:{markdowns:["## Movendo traballo por ahí","","Ata agora cubrimos o uso básico de git -- facer commit, crear ramas, e moverse pola árbore. Estes conceptos chegan para aproveitar o 90% do poder dos repositorios de git e cubrilas necesidades principais dos desenvolvedores.","",'O 10% restante, ademáis, poden ser extremadamente útiles nos fluxos de traballo complexos (ou cando te meteches nalgún problema complicado). O próximo concepto que imos abordar é "movendo o traballo por ahí" -- noutras verbas, unha forma que teñen os desenvolvedores de dicir "eu quero este traballo aquí, e aquel alí" de forma precisa, elocuente e flexible.',"","Eso pode ser moito, pero os conceptos son simples."]}},{type:"ModalAlert",options:{markdowns:["## Git Cherry-pick","","O primeiro comando desta serie é `git cherry-pick`. O comando emprégase da seguinte forma:","","* `git cherry-pick <...>`","","Trátase dunha forma bastante directa de dicir que queres copiar unha serie de commits sobre a túa ubicación actual (`HEAD`). Eu persoalmente adoro `cherry-pick` porque hai moita maxia envolta e é un funcionamento sinxelo de entender.","","Vexamos unha demostración!",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Aquí está un repositorio onde hai algún traballo na rama `side` que desexamos copiar para a rama `main`. Iso podería ser obtido por medio dun rebase (que xa aprendemos), pero imos ver como o resolve cherry-pick."],afterMarkdowns:["¡Eso é! Queríamos os commits `C2` e `C4` e git insertounos por baixo de nós. ¡Moi sinxelo!"],command:"git cherry-pick C2 C4",beforeCommand:"git checkout -b side; git commit; git commit; git commit; git checkout main; git commit;"}},{type:"ModalAlert",options:{markdowns:["Para completar este nivel, copia algo de traballo das outras ramas na main. Podes ver qué commits queremos copiar na visualización do obxectivo.",""]}}]},zh_TW:{childViews:[{type:"ModalAlert",options:{markdowns:["移動 commit","","目前為止我們已經講了 git 的基礎,這些基礎包括 commit、branch 以及在 commit tree 中移動,只要有這些概念你就能發揮 git 90% 的功力,而且對於程式設計師來說,這樣就很夠了。","",'而剩下的 10%,在很複雜的專案上面,是非常有用的(或者當你陷入困惑時),我們下一個要講的概念是 "移動 commit",換句話說,當你會這個非常有彈性的招數之後,你就可以說"我想要把這個 commit 放這裡,而那個 commit 放在那裡"。',"","這看起來很複雜,但其實它很簡單。"]}},{type:"ModalAlert",options:{markdowns:["## git cherry-pick","","我們要講的第一個指令叫作 `git cherry-pick`,它的用法如下:","","* `git cherry-pick <...>`","","當你想要複製幾個 commit 並且接在你目前的位置(`HEAD`)下面的時候,這會是一個非常直接的方式。我個人非常喜歡用 `cherry-pick`,因為它並不複雜,很容易就可以了解。","","讓我們來看一個例子!",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["這裡有一個 repo,在 `side` branch 中,我們有一些 commit 想要複製到 `main` branch 上,這可以透過一個 rebase 來完成(我們之前已經學到了),但是讓我們看看 `git cherry-pick` 怎麼做。"],afterMarkdowns:["就是那樣!我們複製了 `C2` 以及 `C4` 並且把它們放到我們的後面,很簡單吧!"],command:"git cherry-pick C2 C4",beforeCommand:"git checkout -b side; git commit; git commit; git commit; git checkout main; git commit;"}},{type:"ModalAlert",options:{markdowns:["要完成這個關卡,只需要從三個 branch 複製幾個 commit 到 `main` 下面,你可以從視覺化的目標看到我們需要哪些 commit。",""]}}]},zh_CN:{childViews:[{type:"ModalAlert",options:{markdowns:["## 整理提交记录","","到现在我们已经学习了 Git 的基础知识 —— 提交、分支以及在提交树上移动。 这些概念涵盖了 Git 90% 的功能,同样也足够满足开发者的日常需求 ","","然而, 剩余的 10% 在处理复杂的工作流时(或者当你陷入困惑时)可能就显得尤为重要了。接下来要讨论的这个话题是“整理提交记录” —— 开发人员有时会说“我想要把这个提交放到这里, 那个提交放到刚才那个提交的后面”, 而接下来就讲的就是它的实现方式,非常清晰、灵活,还很生动。","","看起来挺复杂, 其实是个很简单的概念。"]}},{type:"ModalAlert",options:{markdowns:["## Git Cherry-pick","","本系列的第一个命令是 `git cherry-pick`, 命令形式为: ","","* `git cherry-pick <提交号>...`","","如果你想将一些提交复制到当前所在的位置(`HEAD`)下面的话, Cherry-pick 是最直接的方式了。我个人非常喜欢 `cherry-pick`,因为它特别简单。","","咱们还是通过例子来看一下!"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["这里有一个仓库, 我们想将 `side` 分支上的工作复制到 `main` 分支,你立刻想到了之前学过的 `rebase` 了吧?但是咱们还是看看 `cherry-pick` 有什么本领吧。"],afterMarkdowns:["这就是了!我们只需要提交记录 `C2` 和 `C4`,所以 Git 就将被它们抓过来放到当前分支下了。 就是这么简单!"],command:"git cherry-pick C2 C4",beforeCommand:"git checkout -b side; git commit; git commit; git commit; git checkout main; git commit;"}},{type:"ModalAlert",options:{markdowns:["要通过此关, 只需要简单的将三个分支中的提交记录复制到 main 上就可以了。目标窗口展示了我们想要哪些提交记录,如果你不小心关掉了的话,通过 `show goal` 命令可以打开,左上角也有“显示目标按钮”",""]}}]},de_DE:{childViews:[{type:"ModalAlert",options:{markdowns:["## Inhalte verschieben","","Bis jetzt haben wir uns die Grundlagen von Git angeschaut -- comitten, verzweigen und sich im Commit-Baum bewegen. Nur damit lässt sich schon 90% der Macht von Git-Repositorys nutzen und die meisten Anforderungen von Entwicklern erfüllen.","",'Die übrigen 10% jedoch können in komplexeren Abläufen sehr hilfreich sein (oder wenn man sich in eine schwierige Lage manövriert hat). Das nächste was wir uns anschauen, ist, Inhalte durch den Commit-Baum zu schieben. Es gibt dem Entwickler die Möglichkeit in präziser, eloquenter Manier zu sagen "Ich will diese Inhalte hier und diese dort haben".',"","Das klingt vielleicht nach einer Menge, aber es ist sehr einfach."]}},{type:"ModalAlert",options:{markdowns:["## git cherry-pick","","Der erste Befehl in dieser Serie ist `git cherry-pick`. Er sieht so aus:","","* `git cherry-pick <...>`","","Er ist eine einfache Möglichkeit um auszudrücken, dass du eine Folge von Commits unter deinen aktuellen Checkout (also `HEAD`) hängen möchtest. Ich persönlich liebe `cherry-pick`, weil es wenig Magie enthält und einfach zu verstehen ist.","","Schauen wir's uns mal an.",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Hier haben wir ein Repository mit einigem Zeugs im Branch `side`, das wir in den Branch `main` kopieren wollen. Das könnten wir mit einem Rebase machen (wie bereits gesehen), aber schauen wir mal, wie das mit `cherry-pick` geht."],afterMarkdowns:["Das war's! Wir wollten die Commits `C2` und `C4` und Git hat die einfach unter unseren aktuellen Checkout kopiert. So einfach ist das."],command:"git cherry-pick C2 C4",beforeCommand:"git checkout -b side; git commit; git commit; git commit; git checkout main; git commit;"}},{type:"ModalAlert",options:{markdowns:["Um diesen Level zu schaffen, musst du einfach nur einige Commits aus den drei gezeigten Branches in den `main` kopieren. Der Zielbaum zeigt dir, welche.",""]}}]},ja:{childViews:[{type:"ModalAlert",options:{markdowns:["## コードの移動","","今まででは、gitの基本をひたすら見てきました -- コミットしたりブランチを派生したり、そしてソースツリーの中の色々な場所に移動することなどです。これらの概念だけで、gitリポジトリの力を90%使いこなすことができ、開発者としての主な需要を満たしています。","","しかし最後の10%はより複雑なワークフローやちょっとトラブった時にとても役にたちます。これから取り上げる次の課題は「作業内容の移動」 –- 詳しく言えば、「この作業はここに置き、その作業はそこに置きたい」と言う開発者のために、優しく具体的で正確にその方法をお教えしましょう。","","ちょっと複雑に聞こえるかもしれませんが、概念は簡単です。"]}},{type:"ModalAlert",options:{markdowns:["## Git Cherry-pick","","このシリーズの一つ目のコマンドは、`git cherry-pick`。このコマンドの使い方は、次の形になります:","","* `git cherry-pick <...>`","","現在の位置(`HEAD`)の下に一連のコミットをコピーしたいという意を単純に表す方法です。分かりにくいところが少ないので、個人的に私がとても好きなコマンドです。","","デモを見ていきましょう!",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["このリポジトリには、現在`side`ブランチから`main`にコピーしたいコードがあります。この前に学んだrebaseコマンドでも実現可能ですが、ここではcherry-pickの動作を見ていきましょう。"],afterMarkdowns:["これだけで終わりです!コミット`C2` と `C4`を取得したかったわけですが、gitが現在の位置の直下に落としてくれました。単純ですね!"],command:"git cherry-pick C2 C4",beforeCommand:"git checkout -b side; git commit; git commit; git commit; git checkout main; git commit;"}},{type:"ModalAlert",options:{markdowns:["このレベルをクリアするには、3つのブランチからmainにコードをコピーしてください。どのコミットを取得するかについてはゴールのツリーをみてください。",""]}}]},ru_RU:{childViews:[{type:"ModalAlert",options:{markdowns:["## Поперемещаем изменения","","Итак, мы уже освоили основы Git: коммиты, ветки, перемещение по дереву изменений. Уже этих знаний достаточно, чтобы овладеть 90% мощью Git-репозиториев и покрыть нужды разработчиков.","",'А оставшиеся 10% будут очень полезны при сложных workflow (или если ты попал в сложную ситуацию). Теперь речь пойдёт о перемещении изменений — возможности, позволяющей разработчику сказать "Хочу, чтобы эти изменения были вот тут, а вот эти — вон там" и получить точные, правильные результаты, не теряя при этом гибкости разработки.',"","На первый взгляд запутанно, но на самом деле всё просто."]}},{type:"ModalAlert",options:{markdowns:["## Git Cherry-pick","","Первая из таких команд - это `git cherry-pick`. Она выглядит вот так:","","* `git cherry-pick <...>`","","Это очень простой и прямолинейный способ сказать, что ты хочешь копировать несколько коммитов на место, где сейчас находишься (`HEAD`). Мы обожаем `cherry-pick` за то, что в нём очень мало магии и его очень просто понять и применять.","","Посмотрим на демонстрацию.",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Вот репозиторий, где есть некие изменения в ветке `side`, которые мы хотим применить и в ветку `main`. Мы можем сделать это при помощи команды rebase, которую мы уже прошли, но давай посмотрим, как cherry-pick справится с этой задачей."],afterMarkdowns:["Вуаля! Мы хотели перенести коммиты `C2` и `C4`, Git дал нам их там, где они нужны. Всё просто!"],command:"git cherry-pick C2 C4",beforeCommand:"git checkout -b side; git commit; git commit; git commit; git checkout main; git commit;"}},{type:"ModalAlert",options:{markdowns:["Чтобы пройти этот уровень, просто скопируй изменения из этих трёх веток в мастер. Чтобы понять, какие коммиты копировать, посмотри на визуализацию уровня.",""]}}]},ko:{childViews:[{type:"ModalAlert",options:{markdowns:["## 작업을 여기저기로 옮기기","","지금까지 우리는 git의 기초를 배웠습니다. -- 커밋을하고, 브랜치를 만들고, 소스 트리 여기저기를 돌아다녔습니다. 이런 개념들을 아는 것만으로도 git repository의 힘을 90%이상 사용하고 개발자들이 필요로하는 작업의 대부분을 할 수 있습니다.","",'그 나머지 10% 기능이, 복잡한 작업(또는 작업중 막혔을때) 중에 꽤 유용할 수 있습니다. 이제 배워 볼 다음 개념은 "작업을 여기저로 옮기기" 다시 말해, 개발자들의 언어로 "이 일은 여기에, 저 일은 저기에 두고 싶어" 정확하고 우아하고 유연하게.',"","다소 과해 보일 수 있지만, 간단한 개념입니다."]}},{type:"ModalAlert",options:{markdowns:["## Git 체리-픽 (Cherry-pick)","","이 시리즈의 첫 명령어는 `git cherry-pick` 입니다. 다음 과 같은 형태로 사용합니다:","","* `git cherry-pick <...>`","","현재 위치(`HEAD`) 아래에 있는 일련의 커밋들에대한 복사본을 만들겠다는 것을 간단히 줄인 말입니다. 개인적으로 저는 `cherry-pick`을 아주 좋아합니다 왜냐하면 조금의 마법이 첨가되있고 이해하기 쉽기 때문입니다.","","데모를 확인해봅시다",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["여기 repository가 있습니다. `main` 으로 복사하고 싶은 작업이 있는 브랜치 `side`가 있습니다. 이것은 rebase를 통해서 할 수 있습니다(이미 배운), 하지만 체리-픽이 이 작업을 어떻게 수행하는지 확인해 봅시다."],afterMarkdowns:["됐습니다! 우리는 `C2`와 `C4` 커밋을 원했고 git이 우리가 원하는 곳 바로 밑에 톡 떨어뜨려 줬습니다. 아주 간단하죠!"],command:"git cherry-pick C2 C4",beforeCommand:"git checkout -b side; git commit; git commit; git commit; git checkout main; git commit;"}},{type:"ModalAlert",options:{markdowns:["이 레벨을 통과하기 위해서는 몇개의 작업을 세개의 브랜치들에서 `main` 브랜치로 복사해와야합니다. 어떤 커밋들이 필요한지는 goal을 보고 확인하면 됩니다.",""]}}]},uk:{childViews:[{type:"ModalAlert",options:{markdowns:["## Переміщуємо зміни","","Поки що ми розглядали основи git -- як працювати з комітами та гілками й переміщення по дереву комітів. Цього вже достатньо щоб використовувати 90% фунцкій гіт та мати змогу ефективно працювати з гіт як розробник.","",'Решта 10%, тим не менш, можуть бути надзвичайно корисними при роботі зі складними робочими процесами (workflow), чи коли ти чи ще хтось щось зробили не так і ти хочеш це виправити. Наступна концепція з якою ми познайомимось це "перенесення змін" -- іншими словами, це можливість розробника переміщувати коміти між гілками в простий та зручний спосіб.',"","Це може видаватися складним, але насправді це дуже проста концепція."]}},{type:"ModalAlert",options:{markdowns:["## Git Cherry-pick","","Перша команда в цій серії називається `git cherry-pick`. Вона має наступну форму:","","* `git cherry-pick <Коміт1> <Коміт2> <...>`","","Це надзвичайно простий спосіб вказати гіту що потрібно скопіювати серію комітів до поточного розташування (`HEAD`). Персонально я обожнюю `cherry-pick` за його прямолінійнсть, це дуже зрозуміла концепція що не використовує прихованої магії","","Давайте подивимось на практиці!",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Ми бачимо репозиторій де є певні зміни в гілці `side` які ми хочемо скопіювати в `main`. Для цього можна використати rebase (який ми вже вивчили), але подивимось як з цим впорається cherry-pick."],afterMarkdowns:["Овва! Ми хотіли коміти `C2` та `C4` і git додав їх до поточного розташування. Просто й доступно!"],command:"git cherry-pick C2 C4",beforeCommand:"git checkout -b side; git commit; git commit; git commit; git checkout main; git commit;"}},{type:"ModalAlert",options:{markdowns:["Щоб пройти це рівень, просто скопіюй якісь зміни з трьох гілок показаних на діаграмі в main. В візуалізації видно які коміти потрібно скопіювати.",""]}}]},vi:{childViews:[{type:"ModalAlert",options:{markdowns:["## Di Chuyển Commit","","Cho đến giờ thì ta đã nắm được cơ bản về Git -- commit, rẽ nhánh, và dịch chuyển qua lại trên cây mã nguồn. Chừng ấy khái niệm là đã đủ để tận dụng đến 90% sức mạnh của Git và đáp ứng đủ nhu cầu chính cho nhà phát triển phần mềm.","",'Tuy nhiên 10% còn lại thì lại khá hữu ích trong các quy trình làm việc phức tạp (hoặc khi bạn vướng phải tình huống khó khăn). Khái niệm tiếp theo chúng ta sẽ đề cập đến là "di chuyển commit" -- đó là cách để nhà phát triển nói rằng "Tôi muốn lấy bản ghi ở đây và cả bản ghi ở đó" một cách chính xác, trôi chảy và linh hoạt.',"","Nghe thì có vẻ phức tạp, nhưng thực ra khái niệm này khá đơn giản."]}},{type:"ModalAlert",options:{markdowns:["## Git Cherry-pick","","Lệnh đầu tiên của loạt bài này là `git cherry-pick`, dạng lệnh là:","","* `git cherry-pick <...>`","","Đó là cách rất trực tiếp để copy một loạt commit xuống dưới vị trí hiện tại của bạn (`HEAD`). Cá nhân tôi thì rất thích `cherry-pick` bởi tính tiện dụng và dễ hiểu của nó.","","Hãy xem qua một ví dụ!",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Ở đây ta có một kho chứa mà ta muốn sao chép thành quả công việc từ nhánh `side` sang nhánh `main`. Có thể dùng rebase để làm việc này (kỹ thuật mà ta đã học), nhưng hãy xem thử cherry-pick làm điều này ra sao."],afterMarkdowns:["Thế thôi! Chúng ta chỉ cần các commit `C2` và `C4`, vì vậy Git sẽ lấy chúng và đặt chúng dưới nhánh hiện tại. Thật đơn giản!"],command:"git cherry-pick C2 C4",beforeCommand:"git checkout -b side; git commit; git commit; git commit; git checkout main; git commit;"}},{type:"ModalAlert",options:{markdowns:["Để hoàn thành cấp độ này, hãy copy thành quả công việc từ 3 nhánh khác vào main. Bạn có thể nhìn vào mô tả mục tiêu để biết chúng ta cần những commit nào.",""]}}]},sl_SI:{childViews:[{type:"ModalAlert",options:{markdowns:["## Premikanje dela naokoli","","Zaenkrat smo pokrili osnove gita -- commitanje, branchanje in pomikanje po drevesu. Samo te koncepti so dovolj za koriščenje 90% moči git repozitorijev in pokrijejo večino potreb razvijalcev.","",'Preostalih 10% pa je lahko kar uporabnih med reševanjem kompleksnejših situacij (ali ko ste zašli v zagato). Naslednji koncept, ki ga bomo pokrili je "premikanje dela naokoli" -- z drugimi besedami, tako razvijalci rečejo "Rad bi to delo tu in tisto delo tam" na natančen, zgovoren in prilagodljiv način.',"","Morda se zdi veliko, a gre za preprost koncept."]}},{type:"ModalAlert",options:{markdowns:["## Git Cherry-pick","","Prvi ukaz v zaporedju je `git cherry-pick`. Je sledeče oblike:","","* `git cherry-pick <...>`","","Gre za jasen način, da povemo, da bi radi skopirali zaporedje commitov pod trenutno lokacijo (`HEAD`). Sam imam rad `cherry-pick`, ker je vključeno le malo čarovnije in je preprost za razumet.","","Poglejmo predstavitev!",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Tu je repozitorij, kjer imamo nekaj dela na branchu `side`, ki bi ga radi skopirali na `main`. To bi lahko dosegli z rebase-om (kar smo se že naučili), ampak poglejmo kako se odreže cherry-pick."],afterMarkdowns:["To je to! Želeli smo commita `C2` in `C4` in git ju je prilimal točno pod nas. Preprosto!"],command:"git cherry-pick C2 C4",beforeCommand:"git checkout -b side; git commit; git commit; git commit; git checkout main; git commit;"}},{type:"ModalAlert",options:{markdowns:["Za končanje te stopnje enostavno skopiraj nekaj dela iz predstavljenih treh branchev v main. V priloženi vizualizaciji lahko vidiš katere commite.",""]}}]},pl:{childViews:[{type:"ModalAlert",options:{markdowns:["## Przenoszenie pracy","","Do tej pory zajmowaliśmy się podstawami Gita - commitami, gałęziami i poruszaniem się w drzewie źródłowym. Samo to wystarczy, aby wykorzystać 90% mocy repozytoriów Git i zaspokoić główne potrzeby programistów.","",'Pozostałe 10% może być jednak dość użyteczne podczas niecodziennych zadań (lub kiedy wpakujesz się w kłopoty). Kolejny temat, który zamierzamy omówić, to "przenoszenie pracy" - innymi słowy, jest to sposób, w jaki programiści mogą powiedzieć: "Chcę te zmiany tu, a tamte tam" w precyzyjny, elegancki i elastyczny sposób.',"","Może się to wydawać skomplikowane, ale tak nie jest."]}},{type:"ModalAlert",options:{markdowns:["## Git cherry-pick","","Pierwsze polecenie w tej serii nazywa się `git cherry-pick`. Przyjmuje ono następującą formę:","","* `git cherry-pick <...>`","","Jest to bardzo prosty sposób określenia, że chcesz przenieść zmiany poniżej swojej obecnej lokalizacji (`HEAD`). Osobiście uwielbiam `cherry-pick`, ponieważ działa prosto i skutecznie.","","Zobaczmy demo!",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["W tym repozytorium mamy trochę pracy na gałęzi `side`, którą chcemy skopiować do gałęzi `main`. Można by to osiągnąć przy użyciu rebase (którego już się nauczyliśmy), ale zobaczmy, jak działa cherry-pick."],afterMarkdowns:["No i fajnie! Chcieliśmy commity `C2` i `C4` i Git zrzucił je nam zaraz pod spód. Bułka z masłem!"],command:"git cherry-pick C2 C4",beforeCommand:"git checkout -b side; git commit; git commit; git commit; git checkout main; git commit;"}},{type:"ModalAlert",options:{markdowns:["Aby ukończyć ten poziom, po prostu skopiuj część pracy z trzech pokazanych gałęzi do `main`. Commity, które należy skopiować, znajdują się na wizualizacji celu.",""]}}]},it_IT:{childViews:[{type:"ModalAlert",options:{markdowns:["## Spostare il lavoro in giro","","Finora abbiamo intravisto le basi di git -- creazione di commit, rami, e come spostarsi sull'albero dei commit. Questi concetti sono sufficienti per sfruttare il 90% della potenza di git, e soddisfano gli utilizzi standard degli sviluppatori.","",'Il restante 10%, può rivelarsi utile in situazioni più complesse (o se ti sei messo nei guai). Il prossimo concetto che affronteremo è lo "spostare il lavoro in giro" -- in altre parole, è un modo per gli sviluppatori di dire "Voglio questo lavoro qua e quel lavoro là" in maniera chiara e precisa.',"","Sembra un grosso lavoro, ma è un concetto semplice."]}},{type:"ModalAlert",options:{markdowns:["## Git Cherry-pick","","Il primo comando si chiama `git cherry-pick`. Il comando ha il seguente aspetto:","","* `git cherry-pick <...>`","","È un modo chiaro e diretto di dire che vuoi la copia di una serie di commit da applicare sulla posizione in cui ti trovi attualmente (`HEAD`). Io personalmente adoro `cherry-pick` perché semplice e facile da capire.","","Vediamo una demo!",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["In questo repository abbiamo del lavoro nel ramo `side` che vogliamo copiare nel `main`. Questo può essere eseguito tramite rebase (che abbiamo già imparato), ma vediamo il cherry-pick all'opera."],afterMarkdowns:["Ecco qua! Volevamo i commit `C2` e `C4` e git li ha copiati sotto di noi. Semplicissimo!"],command:"git cherry-pick C2 C4",beforeCommand:"git checkout -b side; git commit; git commit; git commit; git checkout main; git commit;"}},{type:"ModalAlert",options:{markdowns:["Per completare questo livello, copia il lavoro dai tre rami sul main. Puoi vedere quali sono i commit richiesti guardando l'obiettivo.",""]}}]}}}},{}],132:[function(e,t,o){o.level={goalTreeString:'{"branches":{"main":{"target":"C2","id":"main"},"bugFix":{"target":"C4","id":"bugFix"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C1"],"id":"C3"},"C4":{"parents":["C3"],"id":"C4"}},"HEAD":{"target":"C4","id":"HEAD"}}',solutionCommand:"git checkout C4",startTree:'{"branches":{"main":{"target":"C2","id":"main"},"bugFix":{"target":"C4","id":"bugFix"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C1"],"id":"C3"},"C4":{"parents":["C3"],"id":"C4"}},"HEAD":{"target":"bugFix","id":"HEAD"}}',name:{en_US:"Detach yo' HEAD",es_MX:"Separa tu HEAD",es_AR:"Desatacheá tu HEAD",es_ES:"Desatachea tu HEAD",pt_BR:"Solte a sua cabeça",gl:"Abandona o teu HEAD",fr_FR:"Détacher votre HEAD",zh_CN:"分离 HEAD",zh_TW:"分離 HEAD",de_DE:"Den Kopf abtrennen",ja:"HEADの分離",ru_RU:"Теряем голову, или detached HEAD",ko:"HEAD 분리하기",uk:"Втрачаємо голову чи detached HEAD",vi:"Tháo đầu cái nào",sl_SI:"Ločevanje tvoje glave - HEAD-a",it_IT:"Perdere la testa (HEAD)",pl:"Odczep sobie HEAD"},hint:{en_US:"Use the label (hash) on the commit for help!",es_AR:"¡Usá la etiqueta (hash) sobre el commit para ayudarte!",es_ES:"¡Usa la etiqueta (hash) sobre el commit para ayudarte!",pt_BR:"Use o identificador (hash) sobre o commit para te ajudar!",gl:"¡Usa a etiqueta (hash) sobre o commit para axudarte!",de_DE:"Benutze den Bezeichner (den Hash) des Commits.",ja:"コミットのラベル(hash)を使用",fr_FR:"Utilisez le label (identifiant) du commit pour aider !",zh_TW:"使用 commit 上的標籤(hash)來幫助你!",zh_CN:"使用提交记录上的标签(哈希值)来指定提交记录!",ru_RU:"Ориентируйся по идентификаторам (hash) коммитов.",ko:"커밋에 있는 라벨(hash)을 활용하세요!",uk:"Орієнтуйся по індентифікаторам (hash) комітів.",vi:"Dùng mã băm (hash) của commit để hoàn thành!",sl_SI:"Uporabi oznako (hash) commita za pomoč!",it_IT:"Usa l'etichetta (hash) sul commit per aiutarti!",pl:"Użyj nazwy commita (hasza)!"},startDialog:{en_US:{childViews:[{type:"ModalAlert",options:{markdowns:["## Moving around in Git","","Before we get to some of the more advanced features of Git, it's important to understand different ways to move through the commit tree that represents your project.","","Once you're comfortable moving around, your powers with other git commands will be amplified!","","","","",""]}},{type:"ModalAlert",options:{markdowns:["## HEAD","","First we have to talk about \"HEAD\". HEAD is the symbolic name for the currently checked out commit -- it's essentially what commit you're working on top of.","","HEAD always points to the most recent commit which is reflected in the working tree. Most git commands which make changes to the working tree will start by changing HEAD.","","Normally HEAD points to a branch name (like bugFix). When you commit, the status of bugFix is altered and this change is visible through HEAD."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Let's see this in action. Here we will reveal HEAD before and after a commit."],afterMarkdowns:["See! HEAD was hiding underneath our `main` branch all along."],command:"git checkout C1; git checkout main; git commit; git checkout C2",beforeCommand:""}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["### Detaching HEAD","","Detaching HEAD just means attaching it to a commit instead of a branch. This is what it looks like beforehand:","","HEAD -> main -> C1",""],afterMarkdowns:["And now it's","","HEAD -> C1"],command:"git checkout C1",beforeCommand:""}},{type:"ModalAlert",options:{markdowns:["To complete this level, let's detach HEAD from `bugFix` and attach it to the commit instead.","","Specify this commit by its hash. The hash for each commit is displayed on the circle that represents the commit."]}}]},es_AR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Moviéndose por ahí con Git","","Antes de meternos en algunas de las funcionalidades más avanzadas de git, es importante entender las distintas maneras de moverse por el árbol de commits que representa tu proyecto.","","Una vez que estés cómodo moviendote por ahí, tus poderes con los otros comandos de git ¡van a amplificarse!","","","","",""]}},{type:"ModalAlert",options:{markdowns:["## HEAD","",'Primero tenemos que hablar de "HEAD". HEAD es el nombre simbólico del commit actualmente checkouteado -- es, básicamente, el commit sobre el que estás trabajando.',"","HEAD siempre apunta al commit más reciente, reflejado en el árbol de commits. La mayoría de los comandos de git que hacen cambios al árbol de commits empiezan modificando HEAD.","","Normalmente HEAD apunta al nombre de una rama (como bugFix). Cuando commiteás, el estado de bugFix se altera y este cambio es visible a través de HEAD."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Veámoslo en acción. Acá vamos a ver a HEAD antes y después de un commit."],afterMarkdowns:["¡Ves! HEAD estuvo oculta bajo nuestra rama `main` todo este tiempo."],command:"git checkout C1; git checkout main; git commit; git checkout C2",beforeCommand:""}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["### Detacheando HEAD","","Detachear (_des-adjuntar_) HEAD simplemente significa adjuntarla a un commit en lugar de a un branch. Así es como se ve de antemano:","","HEAD -> main -> C1",""],afterMarkdowns:["Y así queda ahora:","","HEAD -> C1"],command:"git checkout C1",beforeCommand:""}},{type:"ModalAlert",options:{markdowns:["Para completar este nivel, detacheemos HEAD de `bugFix` y atacheemosla al commit, en cambio.","","Especificá este commit por su hash. El hash de cada commit se muestra en el círculo que lo representa."]}}]},es_ES:{childViews:[{type:"ModalAlert",options:{markdowns:["## Moviéndote por ahí con Git","","Antes de meternos en algunas de las funcionalidades más avanzadas de git, es importante entender las distintas maneras de moverse por el árbol de commits que representa tu proyecto.","","Una vez que estés cómodo moviendote por ahí, tus poderes con los otros comandos de git ¡van a amplificarse!","","","","",""]}},{type:"ModalAlert",options:{markdowns:["## HEAD","",'Primero tenemos que hablar de "HEAD". HEAD es el nombre simbólico del commit sobre el que hemos hecho checkout -- es, básicamente, el commit sobre el que estás trabajando.',"","HEAD siempre apunta al commit más reciente, reflejado en el árbol de commits. La mayoría de los comandos de git que hacen cambios al árbol de commits empiezan modificando HEAD.","","Normalmente HEAD apunta al nombre de una rama (como bugFix). Cuando creas un commit, el estado de bugFix se altera y este cambio es visible a través de HEAD."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Veámoslo en acción. A continuación vamos a ver a HEAD antes y después de un commit."],afterMarkdowns:["¡Ves! HEAD estuvo oculta bajo nuestra rama `main` todo este tiempo."],command:"git checkout C1; git checkout main; git commit; git checkout C2",beforeCommand:""}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["### Detacheando HEAD","","Detachear (_des-adjuntar_) HEAD simplemente significa adjuntarla a un commit en lugar de a un branch. Así es como se ve de antemano:","","HEAD -> main -> C1",""],afterMarkdowns:["Y así queda ahora:","","HEAD -> C1"],command:"git checkout C1",beforeCommand:""}},{type:"ModalAlert",options:{markdowns:["Para completar este nivel, detaheemos HEAD de `bugFix` y atacheemosla al commit, en cambio.","","Especifica este commit por su hash. El hash de cada commit se muestra en el círculo que lo representa."]}}]},es_MX:{childViews:[{type:"ModalAlert",options:{markdowns:["## Moviéndonos por ahí en Git","","Antes de meternos en algunas de las funcionalidades más avanzadas de Git, es importante entender las distintas maneras de moverse por el árbol de confirmaciones que representa tu proyecto.","","Una vez que estés cómodo moviendote por ahí, tus poderes con los otros comandos de git ¡van a amplificarse!","","","","",""]}},{type:"ModalAlert",options:{markdowns:["## HEAD","",'Primero tenemos que hablar de "HEAD". HEAD es el nombre simbólico del commit sobre el que hemos hecho checkout -- es, básicamente, el commit sobre el que estás trabajando.',"","HEAD siempre apunta al commit más reciente, reflejado en el árbol de commits. La mayoría de los comandos de git que hacen cambios al árbol de commits empiezan modificando HEAD.","","Normalmente HEAD apunta al nombre de una rama (como bugFix). Cuando creas un commit, el estado de bugFix se altera y este cambio es visible a través de HEAD."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Veámoslo en acción. A continuación vamos a ver a HEAD antes y después de un commit."],afterMarkdowns:["¡Ves! HEAD estuvo oculta bajo nuestra rama `main` todo este tiempo."],command:"git checkout C1; git checkout main; git commit; git checkout C2",beforeCommand:""}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["### Separando HEAD","","Separar HEAD simplemente significa adjuntarla a un commit en lugar de a un branch. Así es como se ve de antemano:","","HEAD -> main -> C1",""],afterMarkdowns:["Y así queda ahora:","","HEAD -> C1"],command:"git checkout C1",beforeCommand:""}},{type:"ModalAlert",options:{markdowns:["Para completar este nivel, separemos HEAD de `bugFix` y juntémoslo en su lugar al commit.","","Especifica este commit por su hash. El hash de cada commit se muestra en el círculo que lo representa."]}}]},pt_BR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Movendo-se no Git","","Antes de seguirmos para algumas funcionalidades mais avançadas do Git, é importante entender as diferentes formas de se mover através da árvore de commits que representa o seu projeto.","","Uma vez que você estiver confortável em se mover ao redor, seus poderes utilizando outros comandos do Git serão amplificados!","","","","",""]}},{type:"ModalAlert",options:{markdowns:["## HEAD","",'Primeiro temos que conversar sobre a "cabeça" ("HEAD"). HEAD é um nome simbólico para o commit atualmente ativo (que sofreu checkout por último) -- é essencialmente o commit sobre o qual você está trabalhando no momento.',"","O HEAD sempre aponta para o commit mais recentemente copiado sobre a árvore de trabalho (arquivos do projeto). A maioria dos comandos do git que realizam mudanças sobre a árvore de trabalho começarão mudando o HEAD.","","Normalmente o HEAD aponta para o nome de um ramo (por exemplo, bugFix). Quando você commita, o status do bugFix é alterado e essa mudança ocorre também sobre o HEAD."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Vejamos isto em ação. Aqui vamos mostrar o HEAD antes e depois de um commit."],afterMarkdowns:["Veja! O HEAD estava se escondendo ao lado do nosso `main` esse tempo todo."],command:"git checkout C1; git checkout main; git commit; git checkout C2",beforeCommand:""}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["### Soltando a cabeça","",'Soltar o HEAD significa anexá-lo a um commit em vez de anexá-lo a um ramo. Antes do estado solto ("detached"), é assim como se parece:',"","HEAD -> main -> C1",""],afterMarkdowns:["E agora é","","HEAD -> C1"],command:"git checkout C1",beforeCommand:""}},{type:"ModalAlert",options:{markdowns:["Para completar este nível, vamos soltar o HEAD do `bugFix` e em vez disso anexá-lo ao commit.","","Especifique o commit por meio do hash correspondente. O hash de cada commit é mostrado dentro do círculo que representa o commit (a letra C seguida de um número)."]}}]},gl:{childViews:[{type:"ModalAlert",options:{markdowns:["## Movéndose en Git","","Antes de seguir con algunhas das funcionalidades máis avanzadas de Git, é importante entender as diferentes formas de se mover a través da árbore de commits que representa o teu proxecto.","","¡Unha vez que te sintas ben ó teu redor, os teus poderes empregando outros comandos de git serán amplificados!","","","","",""]}},{type:"ModalAlert",options:{markdowns:["## HEAD","",'Primeiro temos que falar sobre o "commit actual" ("HEAD"). HEAD é un nome simbólico para o commit atualmente ativo (o último checkout que se fixo) -- é esencialmente o commit sobre o cal estás traballando nese momento.',"","O HEAD sempre apunta para o commit máis recentemente copiado sobre a árbore de traballo (arquivos do proxecto). A maioría dos comandos de git que fan algún cambio sobre a árbore de traballo empezarán movendo o HEAD.","","Normalmente o HEAD apunta para o nome dunha rama (por exemplo, bugFix). Quando fagas commit, o status do bugFix é alterado e ese cambio ocorre tamén sobre o HEAD."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Vexamos isto en acción. Aquí imos mostrar o HEAD antes e depois dun commit."],afterMarkdowns:["Ves! O HEAD estivo ó lado do noso `main` todo este tempo."],command:"git checkout C1; git checkout main; git commit; git checkout C2",beforeCommand:""}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["### Soltando a cabeza","",'Soltar o HEAD significa apuntar a un commit en vez de apuntar a unha rama. Antes do estado solo ("detached"), é así como aparece:',"","HEAD -> main -> C1",""],afterMarkdowns:["E agora é","","HEAD -> C1"],command:"git checkout C1",beforeCommand:""}},{type:"ModalAlert",options:{markdowns:["Para completar este nivel, imos soltar o HEAD de `bugFix` e en vez diso apuntamos ó commit.","","Especifica o commit por medio do hash correspondente. O hash de cada commit está dentro do círculo que representa ó commit (a letra C seguida dun número)."]}}]},fr_FR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Se déplacer dans Git","","Avant que nous ne découvrions quelques-unes des fonctionnalités les plus avancées de Git, il est important de comprendre les différents manières de se déplacer dans l'arbre des commits qui représente votre projet.","","Une fois à l'aise avec ces déplacements, votre puissance avec les autres commandes de Git en sera amplifiée !","","","","",""]}},{type:"ModalAlert",options:{markdowns:["## HEAD","",'Premièrement nous avons parlé de "HEAD". HEAD est le nom symbolique pour le commit sur lequel nous nous situons actuellement -- plus simplement c\'est le commit sur lequel nous travaillons.',"","HEAD pointe toujours sur le commit le plus récent dans l'arbre des commits. La plupart des commandes Git qui modifient l'arbre des commits vont commencer par modifier HEAD.","","Normalement HEAD pointe sur le nom d'une branche (comme bugFix). Quand vous effectuez un commit, le statut de bugFix est modifié et ce changement est visible par le biais de HEAD."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Voyons cela en action. Ici nous allons indiquer où se situe HEAD avant et après un commit."],afterMarkdowns:["Vous voyez ! HEAD était caché en-dessous de la branche `main` tout le long."],command:"git checkout C1; git checkout main; git commit; git checkout C2",beforeCommand:""}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["### Détacher HEAD","","Détacher HEAD signifie simplement que l'on attache HEAD à un commit au lieu d'une branche. Voilà à quoi cela ressemble actuellement :","","HEAD -> main -> C1",""],afterMarkdowns:["Et maintenant c'est","","HEAD -> C1"],command:"git checkout C1",beforeCommand:""}},{type:"ModalAlert",options:{markdowns:["Pour terminer ce niveau, détacher HEAD de `bugFix` et attachez-le plutôt au commit.","","Spécifiez le commit par son identifiant (hash). Le hash de chaque commit est affiché dans le rond qui représente le commit."]}}]},de_DE:{childViews:[{type:"ModalAlert",options:{markdowns:["## Navigation durch Git","","Bevor wir uns einige fortgeschrittene Konzepte in Git ansehen, ist es wichtig, verschiedene Wege zum Navigieren durch den Commit-Baum, der das Projekt enthält, zu kennen.","","Sobald du das drauf hast, vergrößern sich deine Möglichkeiten in allen anderen Git-Befehlen.","","","","",""]}},{type:"ModalAlert",options:{markdowns:["## HEAD","","Erst mal müssen wir über `HEAD` reden. `HEAD` ist ein Alias für den Commit, der gerade ausgecheckt ist -- es ist im Prinzip der Commit, an den du deinen nächsten Commit hängst.","","`HEAD` zeigt immer auf den neuesten Commit. Die meisten Git-Befehle, die den Baum verändern, fangen damit an, dass sie `HEAD` verschieben.","","Normalerweise zeigt `HEAD` auf einen Branch-Namen (z.B. `bugFix`). Wenn du einen Commit machst, wird `bugFix` auf diesen Commit geschoben, und `HEAD` (da es auf `bugFix` zeigt) automatisch auch."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Schauen wir uns das mal in Aktion an. Wir werden hier `HEAD` vor und nach dem Commit anzeigen."],afterMarkdowns:["Siehst du? `HEAD` war die ganze Zeit unter `main` versteckt."],command:"git checkout C1; git checkout main; git commit; git checkout C2",beforeCommand:""}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["### HEAD abkoppeln","",'`HEAD` abzukoppeln bedeutet, es direkt an einen bestimmten Commit zu hängen, anstatt an einen Branch. Wir gelangen dadurch in den "detached HEAD state". So sieht\'s vorher aus:',"","`HEAD` -> `main` -> `C1`",""],afterMarkdowns:["Und jetzt:","","`HEAD` -> `C1`"],command:"git checkout C1",beforeCommand:""}},{type:"ModalAlert",options:{markdowns:["Um diesen Level abzuschließen, lass uns mal `HEAD` von `bugFix` abkoppeln und an den Commit hängen.","","Gib den Commit mit seinem Hash an. Der Hash jedes Commits steht in dem Kreis, der den Commit darstellt."]}}]},zh_CN:{childViews:[{type:"ModalAlert",options:{markdowns:["## 在提交树上移动","","在接触 Git 更高级功能之前,我们有必要先学习在你项目的提交树上前后移动的几种方法。","","一旦熟悉了如何在 Git 提交树上移动,你驾驭其它命令的能力也将水涨船高!",""]}},{type:"ModalAlert",options:{markdowns:["## HEAD","","我们首先看一下 “HEAD”。 HEAD 是一个对当前所在分支的符号引用 —— 也就是指向你正在其基础上进行工作的提交记录。","","HEAD 总是指向当前分支上最近一次提交记录。大多数修改提交树的 Git 命令都是从改变 HEAD 的指向开始的。","","HEAD 通常情况下是指向分支名的(如 bugFix)。在你提交时,改变了 bugFix 的状态,这一变化通过 HEAD 变得可见。"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["下面咱们通过实际操作看一下。我们将会观察提交前后 HEAD 的位置。"],afterMarkdowns:["看到了吗? HEAD 指向了 `main`,随着提交向前移动。","","(译者注:实际这些命令并不是真的在查看 HEAD 指向,看下一屏就了解了。如果想看 HEAD 指向,可以通过 `cat .git/HEAD` 查看,","如果 HEAD 指向的是一个引用,还可以用 `git symbolic-ref HEAD` 查看它的指向。但是该程序不支持这两个命令)"],command:"git checkout C1; git checkout main; git commit; git checkout C2",beforeCommand:""}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["### 分离的 HEAD","","分离的 HEAD 就是让其指向了某个具体的提交记录而不是分支名。在命令执行之前的状态如下所示: ","","HEAD -> main -> C1","","HEAD 指向 main, main 指向 C1"],afterMarkdowns:["现在变成了","","HEAD -> C1"],command:"git checkout C1",beforeCommand:""}},{type:"ModalAlert",options:{markdowns:["想完成此关,从 `bugFix` 分支中分离出 HEAD 并让其指向一个提交记录。","","通过哈希值指定提交记录。每个提交记录的哈希值显示在代表提交记录的圆圈中。"]}}]},zh_TW:{childViews:[{type:"ModalAlert",options:{markdowns:["## 在 git 中前後移動","","在接觸 git 的更多進階的主題之前,我們先學習用不同的方法在你的 project 中的 commit tree 上面移動。","","一旦能夠熟練地在 commit tree 中隨意地移動,你使用其它的 git 指令也會更厲害!",""]}},{type:"ModalAlert",options:{markdowns:["## HEAD","",'我們首先看一下 "HEAD",HEAD 是一個 reference,它是指向目前所 checkout 的 commit,基本上,其實就是你目前所在的 commit。',"","在 commit tree 中,HEAD 總是指向最近的一次commit。大部份 git 的指令如果要修改 commit tree 的狀態的話,都會先改變 HEAD 所指向的 commit。","","HEAD 通常指向一個 branch 的名稱(比如 bugFix)。當你 commit 的時候,改變了 bugFix 的狀態,這一個變化可以從 HEAD 的改變中看到。"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["在實際的例子中。我們將會觀察 commit 前後 HEAD 的位置。"],afterMarkdowns:["看吧!HEAD 一直藏在 `main` 分支的後面。"],command:"git checkout C1; git checkout main; git commit; git checkout C2",beforeCommand:""}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["### 分離 HEAD","","分離 HEAD 就是讓其指向一個 commit 而不是 branch 的名稱。這是指令執行之前的樣子:","","HEAD -> main -> C1",""],afterMarkdowns:["現在變成了","","HEAD -> C1"],command:"git checkout C1",beforeCommand:""}},{type:"ModalAlert",options:{markdowns:["想要完成這一個關卡,從 `bugFix` 分離出 HEAD 並且讓它指向一個 commit。","","通過 hash 值可以指定 commit。每個 commit 的 hash 值顯示在各自的圓圈中。"]}}]},ja:{childViews:[{type:"ModalAlert",options:{markdowns:["## 任意の位置への移動","","Gitの上級機能に進む前に、自分のプロジェクトを表すコミットツリーの中で任意の位置へ移動する様々な方法を知っておく必要があります。","","移動方法が身につけば、他のgitコマンドをよりうまく扱えるようになるでしょう!","","","","",""]}},{type:"ModalAlert",options:{markdowns:["## HEAD","",'まずは"HEAD"から始めましょう。HEADとは現在チェックアウトされているコミットを指す単語です -- ようするに今作業中のコミットを表します。',"","HEADはいつも、作業中のツリーに反映されている最新のコミットを指します。作業ツリーへ変更を加える多くのgitコマンドはまずHEADから処理を始めます。","","HEADは普段、ブランチ名(例えば、bugFixなど)を指します。コミットすれば、bugFixの状態が変更され、その変更がHEADから確認できるようになります。"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["実際の動作を見てみましょう。ここでは、コミットの前と後のHEADの状態を確認します。"],afterMarkdowns:["ほら、HEADが元から`main`ブランチの下に隠れていたんですね!"],command:"git checkout C1; git checkout main; git commit; git checkout C2",beforeCommand:""}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["### HEADの分離","","HEADの分離(detached HEAD)とは単に、ブランチではなく特定のコミットにHEADを紐づけることです。実行前の状態は次のようです:","","HEAD -> main -> C1",""],afterMarkdowns:["そして実行後はこう:","","HEAD -> C1"],command:"git checkout C1",beforeCommand:""}},{type:"ModalAlert",options:{markdowns:["このレベルをクリアするには、HEADを`bugFix`から分離し、その代わりに特定のコミットに紐づけましょう。","","このコミットをハッシュで指定します。コミットのハッシュはそのコミットを表す丸に刻まれています。"]}}]},ru_RU:{childViews:[{type:"ModalAlert",options:{markdowns:["## Прогулка по Git","","Прежде чем перейти к более продвинутым фичам Git, важно понять различные способы перемещения по дереву коммитов вашего проекта.","","Как только вы научитесь свободно передвигаться по дереву коммитов, ваши возможности в Git приумножатся.","","","","",""]}},{type:"ModalAlert",options:{markdowns:["## HEAD","",'В первую очередь, поговорим о "HEAD". HEAD - это символическое имя текущего выбранного коммита — это, по сути, тот коммит, над которым мы в данный момент работаем.',"","HEAD всегда указывает на последний коммит из вашего локального дерева. Большинство команд Git, изменяющих рабочее дерево, начнут с изменения HEAD.","","Обычно HEAD указывает на имя ветки (например, `bugFix`). Когда вы делаете коммит, статус ветки `bugFix` меняется и это изменение видно через HEAD."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Посмотрим, как это работает. Обратите внимание на то, где находится HEAD до и после коммита."],afterMarkdowns:["Вот! HEAD всё это время скрывался за веткой `main`."],command:"git checkout C1; git checkout main; git commit; git checkout C2",beforeCommand:""}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["### Detaching HEAD","","Отделение (detaching) HEAD означает лишь присвоение его не ветке, а конкретному коммиту. Посмотрим, что было до отделения:","","HEAD -> main -> C1",""],afterMarkdowns:["А вот что получилось теперь","","HEAD -> C1"],command:"git checkout C1",beforeCommand:""}},{type:"ModalAlert",options:{markdowns:["Чтобы пройти уровень, давай отделим HEAD от ветки `bugFix` и присвоим его последнему коммиту в этой же ветке.","","Укажи коммит при помощи его идентификатора (hash). Hash для каждого коммита указан в кружке на схеме."]}}]},ko:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git에서 여기저기로 옮겨다니기","","Git의 고급기능들에 대해 더 알아보기 전에, 여러분의 프로젝트를 표현하는 커밋 트리(commit tree)에서 이동 할 수 있는 여러가지 방법들을 아는것이 중요합니다.","","여기저기 이동하는 것에 익숙해지면, 여러분이 다른 git 명령어들을 사용하는 능력도 아주 좋아질 것입니다!","","","","",""]}},{type:"ModalAlert",options:{markdowns:["## HEAD","",'먼저"HEAD"에 대해 이야기해 봅시다. HEAD는 현재 체크아웃된 커밋을 가리킵니다. -- 다시 말하자면 현재 작업중인 커밋입니다.',"","HEAD는 항상 작업트리의 가장 최근 커밋을 가리킵니다. 작업트리에 변화를 주는 git 명령어들은 대부분 HEAD를 변경하는것으로 시작합니다.","","일반적으로 HEAD는 브랜치의 이름을 가리키고있습니다(bugFix와 같이). 커밋을 하게 되면, bugFix의 상태가 바뀌고 이 변경은 HEAD를 통해서 확인이 가능합니다."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["직접 확인해 봅시다. 여기서 우리는 보이지 않던 HEAD를 커밋전, 후에 드러낼 것입니다."],afterMarkdowns:["보세요! HEAD가 `main`브랜치 아래에 숨어 있던 거군요."],command:"git checkout C1; git checkout main; git commit; git checkout C2",beforeCommand:""}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["### HEAD 분리하기","","HEAD를 분리한다는 것은 HEAD를 브랜치 대신 커밋에 붙이는 것을 의미합니다. 명령을 사용하기 전의 모습은 다음과 같습니다:","","HEAD -> main -> C1",""],afterMarkdowns:["이제는 이렇게 되는군요","","HEAD -> C1"],command:"git checkout C1",beforeCommand:""}},{type:"ModalAlert",options:{markdowns:["다음 레벨로 넘어가기 위해서는, HEAD를 `bugfix`에서 분리하고 그 커밋에 붙이세요.","","각 커밋은 그것의 해시값으로 특정지을수 있습니다. 각 커밋의 해시값은 각 커밋을 나타내는 원안에 나타나있습니다."]}}]},uk:{childViews:[{type:"ModalAlert",options:{markdowns:["## Прогулянка по Git","","Перед тим як ми перейдемо до складніших можливостей гіта, важливо розуміти різні способи переміщення по дереву комітів твого проекту.","","Дуже важливо щоб тобі було комфортно переміщатись по репозиторію, так як цей навик тобі знадобиться для використання в більшості команд git!","","","","",""]}},{type:"ModalAlert",options:{markdowns:["## HEAD (голова)","",'Спочатку розберемось з "HEAD". HEAD це символьне ім’я поточного вибраного коміта -- по суті це той коміт з яким ти зараз працюєш.',"","HEAD завжди вказує на найновіший коміт з робочого дерева. Більшість команд що змінюють локальне дерево комітів, також модифікують HEAD.","","Зазвичай HEAD вказує на ім’я бранча (наприклад bugFix). Коли ти комітиш, змінюється статус гілки bugFix й це можна побачити подивившись на HEAD."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Розберемось з цим на практиці. Зараз ми перевіримо HEAD до та після коміту."],afterMarkdowns:["Ти диви! HEAD весь цей час ховався за гілкою `main`."],command:"git checkout C1; git checkout main; git commit; git checkout C2",beforeCommand:""}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["### Відокремлюємо голову","","Detached HEAD (відокремлена голова) просто означає що HEAD посилається на коміт, а не на якусь гілку. Ось як це виглядає спочатку:","","HEAD -> main -> C1",""],afterMarkdowns:["А в стані detached head:","","HEAD -> C1"],command:"git checkout C1",beforeCommand:""}},{type:"ModalAlert",options:{markdowns:["Щоб пройти цей рівень, давайте відокремимо голову від гілки `bugFix` й натомість спрямуємо її на якийсь коміт.","","Вкажи цей коміт за його hash (хеш, ідентифікатором). Хеш кожного коміту відображений в кружечку що символізує коміт."]}}]},vi:{childViews:[{type:"ModalAlert",options:{markdowns:["## Dịch chuyển trong Git","","Trước khi học thêm vài chức năng nâng cao trong Git, ta cần phải biết cách dịch chuyển qua lại các commit có trong kho chứa.","","Một khi bạn đã thành thạo với chuyển dịch, khả năng sử dụng các lệnh Git của bạn đã được nâng cao!","","","","",""]}},{type:"ModalAlert",options:{markdowns:["## HEAD","","Đầu tiên hãy bàn về 'HEAD'. HEAD là cái tên biểu tượng cho commit hiện tại đang được trỏ đến -- về căn bản nó là commit mà bạn đang làm việc.","","HEAD luôn luôn trỏ đến commit gần nhất được phản ánh trong cây làm việc. Hầu hết các lệnh Git mà làm thay đổi nội dung cây làm việc thường bắt đầu với HEAD.","","Bình thường HEAD trỏ tới tên nhánh (ví dụ bugFix). Khi bạn commit, trạng thái của bugFix được thay đổi và thay đổi này được trông thấy thông qua HEAD."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Xem thử thực tế nào. Ở đây ta sẽ làm rõ HEAD trước và sau khi commit."],afterMarkdowns:["Thấy chứ? HEAD đã ẩn dưới nhánh `main` suốt."],command:"git checkout C1; git checkout main; git commit; git checkout C2",beforeCommand:""}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["### Tháo HEAD","","Tháo HEAD đơn giản nghĩa là dán nó vào một commit thay vì một nhánh. Lúc trước thì nó trông như thế này:","","HEAD -> main -> C1",""],afterMarkdowns:["Và bây giờ thì nó thế này","","HEAD -> C1"],command:"git checkout C1",beforeCommand:""}},{type:"ModalAlert",options:{markdowns:["Để hoàn thành cấp độ này, hãy tháo HEAD khỏi `bugFix` và dán nó vào commit.","","Chỉ rõ commit bằng mã băm (hash) của nó. Mã băm của mỗi commit nằm trong trong vòng tròn biểu thị commit đó."]}}]},sl_SI:{childViews:[{type:"ModalAlert",options:{markdowns:["## Premikanje po Gitu","","Preden se lotimo nekaj naprednejših funkcij Gita je pomembno, da razumemo različne načine premikanja po drevesu commitov, ki predstavljajo tvoj projekt.","","Ko ti je enkrat premikanje po drevesu domače, bodo tvoje sposobnosti z ostalimi git ukazi še močnejše!","","","","",""]}},{type:"ModalAlert",options:{markdowns:["## HEAD","",'Najprej moramo spozanti "HEAD". HEAD (glava) je simbolično ime za trenutno checkoutan commit -- v bistvu povemo na katerem commitom bomo nadaljevali.',"","HEAD vedno kaže na zadnji commit na trenutnem drevesu. Večina git ukazov, ki spreminjajo to delovno drevo, bo začelo s spremembo HEAD-a.","","Ponavadi HEAD kaže na ime brancha (npr. bugFix). Ko commitaš, je stanje bugFix spremenjeno in ta sprememba je opazna tudi skozi HEAD."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Poglejmo to v akciji. Sedaj bomo razkrili HEAD pred in po commitu."],afterMarkdowns:["Evo! HEAD se je vseskozi skrival pod našim `main` branchom."],command:"git checkout C1; git checkout main; git commit; git checkout C2",beforeCommand:""}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["### Ločevanje HEAD-a","","Ločevanje HEAD-a pomeni samo, da ga namestno na branch sedaj pripnemo na commit. Tako je izgledalo prej:","","HEAD -> main -> C1",""],afterMarkdowns:["Sedaj pa je takole:","","HEAD -> C1"],command:"git checkout C1",beforeCommand:""}},{type:"ModalAlert",options:{markdowns:["Za dokončanje te stopnje odstranimo HEAD iz `bugFix` in ga pritrdimo raje na commit.","","Določi ta commit z njegovim hash-om. Hash za vsak commit je predstavljen v krogu, ki predstavlja commit."]}}]},pl:{childViews:[{type:"ModalAlert",options:{markdowns:["## Poruszanie się w Git","","Zanim przejdziemy do niektórych z bardziej zaawansowanych funkcji Gita, ważne jest, aby zrozumieć różne sposoby poruszania się po drzewie commitów, które reprezentują twój projekt.","","Kiedy już poczujesz się z tym wygodnie, to i inne komendy Gita nabiorą więcej mocy!","","","","",""]}},{type:"ModalAlert",options:{markdowns:["## HEAD","",'Najpierw musimy porozmawiać o "HEAD". HEAD to symboliczna nazwa dla aktualnie checkoutowanego (wyciągniętego) commita - jest to zasadniczo commit z najnowszymi zmianami.',"","HEAD zawsze wskazuje na najnowszy commit, który jest odzwierciedlony w drzewie zmian. Większość poleceń git, które wprowadzają zmiany w drzewie, zaczyna się od zmiany HEADa.","","Normalnie HEAD wskazuje na nazwę gałęzi (jak np. `bugFix`). Kiedy commitujesz zmiany, status gałęzi `bugFix` się zmienia i zmiana ta jest widoczna właśnie poprzez przemieszczenie się HEADa."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Zobaczmy, jak to działa. Pokażemy HEAD przed i po commicie."],afterMarkdowns:["Zobacz! HEAD przez cały czas ukrywał się pod naszą gałęzią `main`."],command:"git checkout C1; git checkout main; git commit; git checkout C2",beforeCommand:""}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["### Odłączanie HEADa","","Odłączenie HEADa oznacza po prostu dołączenie go do commita, a nie gałęzi. Tak to wyglądało przed:","","HEAD -> main -> C1",""],afterMarkdowns:["A tak po:","","HEAD -> C1"],command:"git checkout C1",beforeCommand:""}},{type:"ModalAlert",options:{markdowns:["Aby ukończyć ten poziom, odłącz HEADa od gałęzi `bugFix` i dołącz go do commita.","","Możesz wybrać konkretnego commita, posługując się jego haszem. Hasz każdego commita jest wyświetlany na okręgu, który go reprezentuje."]}}]},it_IT:{childViews:[{type:"ModalAlert",options:{markdowns:["## Spostarsi in Git","","Prima di imparare comandi avanzati in Git, è fondamentale conoscere i diversi modi per spostarsi nell'albero dei commit che costituiscono il tuo progetto.","","Una volta che ti sentirai a tuo agio, il tuo potere con gli altri comandi git sarà amplificato!","","","","",""]}},{type:"ModalAlert",options:{markdowns:["## HEAD","",'Prima di tutto dobbiamo parlare di "HEAD". HEAD (testa) è il nome simbolico dato al commit selezionato -- in pratica è il commit su cui stai lavorando.',"","HEAD punta sempre al commit più recente. La maggior parte dei comandi git che apportano modifiche all'albero dei commit, vanno a cambiare per primo HEAD.","","Di norma HEAD punta al nome di un ramo (per esempio bugFix). Quando esegui un commit, lo stato di bugFix viene modificato, e questo cambiamento è visibile attraverso HEAD."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Vediamolo in azione. Qui mostreremo HEAD prima e dopo un commit."],afterMarkdowns:["Visto! HEAD era nascosto sotto il ramo `main`."],command:"git checkout C1; git checkout main; git commit; git checkout C2",beforeCommand:""}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["### Detaching HEAD (testa distaccata)","","Detaching HEAD significa attaccare la testa a un commit invece che a un ramo. All'inizio la situazione è questa:","","HEAD -> main -> C1",""],afterMarkdowns:["E ora è","","HEAD -> C1"],command:"git checkout C1",beforeCommand:""}},{type:"ModalAlert",options:{markdowns:["Per completare questo livello, stacchiamo HEAD da `bugFix` e attacchiamolo a un commit.","","Per specificare un commit si usa l'hash. L'hash per ogni commit è presente sul cerchio che rappresenta il commit."]}}]}}}},{}],133:[function(e,t,o){o.level={goalTreeString:"%7B%22branches%22%3A%7B%22main%22%3A%7B%22target%22%3A%22C4%27%22%2C%22id%22%3A%22main%22%7D%2C%22overHere%22%3A%7B%22target%22%3A%22C1%22%2C%22id%22%3A%22overHere%22%7D%7D%2C%22commits%22%3A%7B%22C0%22%3A%7B%22parents%22%3A%5B%5D%2C%22id%22%3A%22C0%22%2C%22rootCommit%22%3Atrue%7D%2C%22C1%22%3A%7B%22parents%22%3A%5B%22C0%22%5D%2C%22id%22%3A%22C1%22%7D%2C%22C2%22%3A%7B%22parents%22%3A%5B%22C1%22%5D%2C%22id%22%3A%22C2%22%7D%2C%22C3%22%3A%7B%22parents%22%3A%5B%22C2%22%5D%2C%22id%22%3A%22C3%22%7D%2C%22C4%22%3A%7B%22parents%22%3A%5B%22C3%22%5D%2C%22id%22%3A%22C4%22%7D%2C%22C5%22%3A%7B%22parents%22%3A%5B%22C4%22%5D%2C%22id%22%3A%22C5%22%7D%2C%22C3%27%22%3A%7B%22parents%22%3A%5B%22C1%22%5D%2C%22id%22%3A%22C3%27%22%7D%2C%22C5%27%22%3A%7B%22parents%22%3A%5B%22C3%27%22%5D%2C%22id%22%3A%22C5%27%22%7D%2C%22C4%27%22%3A%7B%22parents%22%3A%5B%22C5%27%22%5D%2C%22id%22%3A%22C4%27%22%7D%7D%2C%22HEAD%22%3A%7B%22target%22%3A%22main%22%2C%22id%22%3A%22HEAD%22%7D%7D",solutionCommand:"git rebase -i overHere --solution-ordering C3,C5,C4",compareOnlyMainHashAgnostic:!0,disabledMap:{"git cherry-pick":!0},startTree:'{"branches":{"main":{"target":"C5","id":"main"},"overHere":{"target":"C1","id":"overHere"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C2"],"id":"C3"},"C4":{"parents":["C3"],"id":"C4"},"C5":{"parents":["C4"],"id":"C5"}},"HEAD":{"target":"main","id":"HEAD"}}',hint:{en_US:"you can use either branches or relative refs (HEAD~) to specify the rebase target",es_AR:"podés usar tanto ramas como referencias relativas (HEAD~) para especificar el objetivo del rebase",es_ES:"puedes usar tanto ramas como referencias relativas (HEAD~) para especificar el objetivo del rebase",es_MX:"puedes usar tanto ramas como referencias relativas (HEAD~) para especificar el objetivo del rebase",pt_BR:"Você pode usar ou ramos ou referências relativas (HEAD~) para especificar o alvo do rebase",gl:"Podes usar ramas ou referencias relativas (HEAD~) para especificar o obxectivo do rebase",de_DE:"Du kannst entweder Branches oder relative Ref-Angaben (z.B. HEAD~) benutzen, um das Ziel des Rebase anzugeben.",fr_FR:"Vous pouvez utiliser soit les branches, soit les références relatives (HEAD~) pour spécifier la cible à rebaser",zh_CN:"branch 或者是相对位置(HEAD~)都可以用來指定 rebase 的目标",zh_TW:"你可以指定 branch 或者是相對位置(HEAD~)來表示 rebase 的目標",ru_RU:"Можно использовать либо ветки, либо относительные ссылки (HEAD~), чтобы указать цель для Rebase",ja:"リベースする対象の指定には、ブランチ名や相対リファレンス(HEAD~)が使えます",ko:"리베이스할 타겟으로 브랜치나 상대 참조(HEAD~)를 사용할 수 있습니다",uk:"ти можеш використовувати гілки чи відносні посилання (HEAD~) щоб вказувати ціль для rebase",vi:"bạn có thể sử dụng tham chiếu tương đối (HEAD~) hoặc nhánh để chỉ định mục tiêu rebase",sl_SI:"Uporabiš lahko bilokateri branch ali relativno referenco (HEAD~), da določiš cilj za rebase.",it_IT:"Puoi usare sia i rami che i riferimenti relativi (HEAD~) per specificare l'obiettivo del rebase",pl:"Możesz użyć gałęzi lub referencji względnych (HEAD~), aby określić cel rebase'a"},name:{en_US:"Interactive Rebase Intro",es_AR:"Introducción al rebase interactivo",es_ES:"Introducción al rebase interactivo",es_MX:"Introducción al rebase interactivo",pt_BR:"Introdução ao rebase interativo",gl:"Introducción ó rebase interativo",de_DE:"Einführung Interaktives Rebase",ja:"インタラクティブrebase入門",fr_FR:"Introduction au rebase interactif",zh_CN:"交互式 rebase",zh_TW:"介紹互動式的 rebase",ru_RU:"Введение в интерактивный Rebase",ko:"인터랙티브 리베이스 소개",uk:"Знайомство з інтерактивним rebase",vi:"Giới thiệu về rebase tương tác",sl_SI:"Interaktivni uvod v Rebase",it_IT:"Introduzione al rebase interattivo",pl:"Wprowadzenie do interaktywnego rebase'a"},startDialog:{en_US:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Interactive Rebase","","Git cherry-pick is great when you know which commits you want (_and_ you know their corresponding hashes) -- it's hard to beat the simplicity it provides.","","But what about the situation where you don't know what commits you want? Thankfully git has you covered there as well! We can use interactive rebasing for this -- it's the best way to review a series of commits you're about to rebase.","","Let's dive into the details..."]}},{type:"ModalAlert",options:{markdowns:["All interactive rebase means Git is using the `rebase` command with the `-i` option.","","If you include this option, git will open up a UI to show you which commits are about to be copied below the target of the rebase. It also shows their commit hashes and messages, which is great for getting a bearing on what's what.","",'For "real" git, the UI window means opening up a file in a text editor like `vim`. For our purposes, I\'ve built a small dialog window that behaves the same way.']}},{type:"ModalAlert",options:{markdowns:["When the interactive rebase dialog opens, you have the ability to do two things in our educational application:","","* You can reorder commits simply by changing their order in the UI (via dragging and dropping with the mouse).","* You can choose to keep all commits or drop specific ones. When the dialog opens, each commit is set to be included by the `pick` button next to it being active. To drop a commit, toggle off its `pick` button.","","*It is worth mentioning that in the real git interactive rebase you can do many more things like squashing (combining) commits, amending commit messages, and even editing the commits themselves. For our purposes though we will focus on these two operations above.*","","Great! Let's see an example."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["When you hit the button, an interactive rebase window will appear. Reorder some commits around (or feel free to unpick some) and see the result!"],afterMarkdowns:["Boom! Git copied down commits in the exact same way you specified through the UI."],command:"git rebase -i HEAD~4 --aboveAll",beforeCommand:"git commit; git commit; git commit; git commit"}},{type:"ModalAlert",options:{markdowns:["To finish this level, do an interactive rebase and achieve the order shown in the goal visualization. Remember you can always `undo` or `reset` to fix mistakes :D"]}}]},fr_FR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Interactive Rebase","","Git cherry-pick est pratique quand vous savez exactement quels commits vous voulez (_et_ que vous connaissez leurs identifiants) -- il est difficile de battre sa simplicité.","","Mais que faire quand vous ne connaissez pas les identifiants des commits ? Heureusement Git a pensé à vous pour ce cas-là ! Nous pouvons utiliser un rebase interactif pour cela -- c'est la meilleure façon de réexaminer une série de commits que vous vous apprêtez à rebaser.","","Entrons un peu plus dans les détails..."]}},{type:"ModalAlert",options:{markdowns:["Tout rebase interactif signifie utiliser la commande `rebase` avec l'option `-i`.","","Si vous mettez cette option, Git va ouvrir une interface graphique pour vous montrer quels commits vont être copiés en-dessous de la cible sur laquelle vous rebasez. Elle vous montre aussi les identifiants et commentaires des commits, ce qui est pratique pour s'orienter parmi les commits.","","Pour le \"vrai\" Git, l'interface graphique correspond en fait à ouvrir un fichier dans un éditeur de texte comme `vim`. Pour notre exemple, j'ai construit une petite fenêtre de dialogue qui se comporte de la même façon."]}},{type:"ModalAlert",options:{markdowns:["Quand le rebase interactif s'ouvre, vous avez trois possibilités :","","* Vous pouvez réarranger les commits simplement en changeant leur ordre dans l'interface graphique (dans notre fenêtre de dialogue, cela signifie déplacer les objets avec la souris -- drag and drop).","* Vous pouvez omettre certains commits. Cela est désigné par `pick` : cliquer sur `pick` désélectionne/resélectionne le commit.","* Enfin, vous pouvez écraser des commits. Malheureusement notre niveau ne supporte pas cette option, nous allons donc sauter les détails concernant cette possibilité. Pour faire court, cela vous permet de mélanger des commits.","","Super ! Voyons un exemple."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Quand vous activez le bouton, une fenêtre de rebase interactif va s'ouvrir. Reordonnez quelques commits (ou supprimez-en certains) et regardez le résultat !"],afterMarkdowns:["Boum ! Git a copié les commits de la même manière que vous l'aviez spécifié."],command:"git rebase -i HEAD~4 --aboveAll",beforeCommand:"git commit; git commit; git commit; git commit"}},{type:"ModalAlert",options:{markdowns:["Pour finir ce niveau, faites un rebase interactif et atteignez l'ordre indiqué dans la fenêtre d'objectif. Souvenez-vous que vous pouvez toujours exécuter les commandes `undo` ou `reset` pour réparer vos erreurs :D"]}}]},zh_TW:{childViews:[{type:"ModalAlert",options:{markdowns:["## git interactive rebase","","當你知道你要複製哪些 commit(而且你也知道他們所對應的 hash 值),那麼 `git cherry-pick` 很適合你。","","但是如果你不知道你要的是哪些 commit 呢? 很幸運的是,git 也有考慮到這個問題喔!我們可以用互動式的 rebase 來做到,當你想要檢查你想要的 commit 的時候,這會是最好的方法。","","讓我們來看一下這些細節..."]}},{type:"ModalAlert",options:{markdowns:["互動式的 rebase 相當於使用 rebase 這個指令的時候,後面加上一個 `-i` 的選項。","","如果你有包含了這個選項,git 就會打開一個 UI,讓你知道說有哪些 commit 會被複製下來,它也會告訴你它們的 hash 值以及可以讓你知道它們是什麼的訊息。","",'在"實務上",UI 會利用一個編輯器(例如 vim)打開一個檔案,對於我們來說,我已經設計了一個有同樣功能的對話視窗。']}},{type:"ModalAlert",options:{markdowns:["當互動式的 rebase 的對話視窗打開之後,你就可以做到三件事情:","","* 你可以藉由改變這些 commit 在 UI 的位置(在我們的視窗中,可以透過滑鼠去拖拉),來重新排序它們的順序。","* 你可以選擇完全忽略掉某些 commit,可以用滑鼠按一下,使它變暗,就表示你要忽略掉該 commit。","* 最後, 你可以把 commit 合併在一起,但基於某些理由,在我們的關卡裡面並沒有這個功能。","","太棒了!讓我們來看一個例子!"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["當你按下按鈕的時候,一個互動式的 rebase 的視窗就會跳出來,重新排序一些 commit(大膽忽略掉某些 commit),然後看一下結果吧!"],afterMarkdowns:["看吧! git 根據你所選擇的 commit,把它們複製了下來。"],command:"git rebase -i HEAD~4 --aboveAll",beforeCommand:"git commit; git commit; git commit; git commit"}},{type:"ModalAlert",options:{markdowns:["要完成這個關卡,使用互動式的 rebase,並且完成視覺化目標所表示 commit 的順序,記住!你可以經常使用 `undo` 或者 `reset` 來修正你的一些錯誤:D"]}}]},zh_CN:{childViews:[{type:"ModalAlert",options:{markdowns:["## 交互式的 rebase","","当你知道你所需要的提交记录(**并且**还知道这些提交记录的哈希值)时, 用 cherry-pick 再好不过了 —— 没有比这更简单的方式了。","","但是如果你不清楚你想要的提交记录的哈希值呢? 幸好 Git 帮你想到了这一点, 我们可以利用交互式的 rebase —— 如果你想从一系列的提交记录中找到想要的记录, 这就是最好的方法了","","咱们具体来看一下……"]}},{type:"ModalAlert",options:{markdowns:["交互式 rebase 指的是使用带参数 `--interactive` 的 rebase 命令, 简写为 `-i`","","如果你在命令后增加了这个选项, Git 会打开一个 UI 界面并列出将要被复制到目标分支的备选提交记录,它还会显示每个提交记录的哈希值和提交说明,提交说明有助于你理解这个提交进行了哪些更改。","","在实际使用时,所谓的 UI 窗口一般会在文本编辑器 —— 如 Vim —— 中打开一个文件。 考虑到课程的初衷,我弄了一个对话框来模拟这些操作。"]}},{type:"ModalAlert",options:{markdowns:["当 rebase UI界面打开时, 你能做3件事:","","* 调整提交记录的顺序(通过鼠标拖放来完成)","* 删除你不想要的提交(通过切换 `pick` 的状态来完成,关闭就意味着你不想要这个提交记录)","* 合并提交。 遗憾的是由于某种逻辑的原因,我们的课程不支持此功能,因此我不会详细介绍这个操作。简而言之,它允许你把多个提交记录合并成一个。","","接下来咱们看个实例"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["当你点击下面的按钮时,会出现一个交互对话框。对提交记录做个排序(当然你也可以删除某些提交),点击确定看结果"],afterMarkdowns:["Git 严格按照你在对话框中指定的方式进行了复制。"],command:"git rebase -i HEAD~4",beforeCommand:"git commit; git commit; git commit; git commit"}},{type:"ModalAlert",options:{markdowns:["要通过本关, 做一次交互式的 rebase,整理成目标窗口中的提交顺序。 记住,你随时都可以用 `undo`、`reset` 修正错误,这是不会记入步数的 :D"]}}]},es_AR:{childViews:[{type:"ModalAlert",options:{markdowns:["## git rebase interactivo","","git cherry-pick es genial cuando sabés cuáles commits querés (_y_ sabés sus hashes) -- es dificil superar la simpleza que provee.","","Pero ¿qué pasa cuando no sabés qué commits querés? Por suerte ¡git te cubre en esta situación, también! Podemos usar el rebase interactivo para esto -- es la mejor manera de revisar una serie de commits que estás por rebasear.","","Entremos en los detalles..."]}},{type:"ModalAlert",options:{markdowns:["Todo rebase interactivo significa usar el comando `rebase` con la opción `-i`.","","Si incluís esta opción, git abrirá una UI para mostrarte qué commits están a punto de ser copiados sobre el objetivo del rebase. También muestra sus hashes y mensajes, que ayuda mucho para saber qué es cada commit.","",'Para el git "de verdad", la UI significa abrir un archivo en un editor de textos como `vim`. Para nuestro propósito, hice una pequeña interfaz que se comporta de ese mismo modo.']}},{type:"ModalAlert",options:{markdowns:["Cuando el diálogo de rebase interactivo se abre, tenés la capacidad de hacer 3 cosas:","","* Podés reordenar los commits con solamente cambiar su orden en la UI (en nuestra ventana, eso significa hacer drag & drop con el mouse).","* Podés elegir ignorar completamente algunos commits. Esto se designa con `pick` -- no hacerle `pick` a algún commit significa que querés ignorarlo.","* Finalmente, podés _squashear_ commits. Desafortunadamente, nuestros niveles no soportan esto por cuestiones logísticas, por lo que voy a ahorrarte los detalles. Haciéndola corta, te permite combinar varios commits en uno solo.","","¡Genial! Veamos un ejemplo."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Cuando apretes el botón, va a aparecer una ventana de rebase interactivo. Reordená los commits (sentite libre de ignorar alguno, también) ¡y mirá el resultado!"],afterMarkdowns:["¡Boom! Git copió los commits exactamente de la misma manera que lo especificaste en la UI."],command:"git rebase -i HEAD~4 --aboveAll",beforeCommand:"git commit; git commit; git commit; git commit"}},{type:"ModalAlert",options:{markdowns:["Para completar el nivel, hacé un rebase interactivo y alcanzá el orden que se muestra en la visualización objetivo. Acordate que siempre podés hacer `undo` y `reset` para arreglar errores :D"]}}]},es_ES:{childViews:[{type:"ModalAlert",options:{markdowns:["## git rebase interactivo","","git cherry-pick es genial cuando sabes qué commits quieres (_y_ sabes sus hashes) -- es dificil superar la simpleza que provee.","","Pero ¿qué pasa cuando no sabes qué commits quieres? Por suerte ¡git te cubre en esta situación, también! Podemos usar el rebase interactivo para esto -- es la mejor manera de revisar una serie de commits que estás a punto de rebasear.","","Entremos en los detalles..."]}},{type:"ModalAlert",options:{markdowns:["Todo rebase interactivo significa usar el comando `rebase` con la opción `-i`.","","Si incluyes esta opción, git abrirá una UI para mostrarte qué commits están a punto de ser copiados sobre el objetivo del rebase. También muestra sus hashes y mensajes, que ayuda mucho para saber qué es cada commit.","",'Para el git "de verdad", la UI signfica abrir un archivo en un editor de textos como `vim`. Para nuestro propósito, hice una pequeña interfaz que se comporta de ese mismo modo.']}},{type:"ModalAlert",options:{markdowns:["Cuando el diálogo de rebase interactivo se abre, tienes la capacidad de hacer 3 cosas:","","* Puedes reordenar los commits con solamente cambiar su orden en la UI (en nuestra ventana, eso significa hacer drag & drop con el mouse).","* Puedes elegir ignorar completamente algunos commits. Esto se designa con `pick` -- no hacerle `pick` a algún commit significa que quieres ignorarlo.","* Finalmente, puedes _squashear_ commits. Desafortunadamente, nuestros niveles no soportan esto por cuestiones logísticas, por lo que voy a ahorrarte los detalles. Resumiendo, te permite combinar varios commits en uno solo.","","¡Genial! Veamos un ejemplo."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Cuando aprietes el botón, va a aparecer una ventana de rebase interactivo. Reordena los commits (siéntete libre de ignorar alguno, también) ¡y observa el resultado!"],afterMarkdowns:["¡Zas! Git copió los commits exactamente de la misma manera que lo especificaste en la UI."],command:"git rebase -i HEAD~4 --aboveAll",beforeCommand:"git commit; git commit; git commit; git commit"}},{type:"ModalAlert",options:{markdowns:["Para completar el nivel, haz un rebase interactivo y alcanza el orden que se muestra en la visualización objetivo. Recuerda que siempre puedes hacer `undo` y `reset` para arreglar errores :D"]}}]},es_MX:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git rebase interactivo","","git cherry-pick es genial cuando sabes qué commits quieres (_y_ sabes sus hashes) -- es dificil superar la simpleza que provee.","","Pero ¿qué pasa cuando no sabes qué commits quieres? Por suerte ¡Git te cubre en esta situación también! Podemos usar el rebase interactivo para esto -- es la mejor manera de revisar una serie de commits que estás a punto de rebasear.","","Entremos en los detalles..."]}},{type:"ModalAlert",options:{markdowns:["Todo rebase interactivo significa usar el comando `rebase` con la opción `-i`.","","Si incluyes esta opción, git abrirá una UI para mostrarte qué commits están a punto de ser copiados sobre el objetivo del rebase. También muestra sus hashes y mensajes, que ayuda mucho para saber qué es cada commit.","",'Para el git "de verdad", la UI signfica abrir un archivo en un editor de textos como `vim`. Para nuestro propósito, hice una pequeña interfaz que se comporta de ese mismo modo.']}},{type:"ModalAlert",options:{markdowns:["Cuando el diálogo de rebase interactivo se abre, tienes la capacidad de hacer 2 cosas:","","* Puedes reordenar las confirmaciones con solamente cambiar su orden en la UI (en nuestra ventana, eso significa arrastrar y soltar con el mouse).","* Puedes elegir mantener todas las confirmciones o ignorar algunas específicas. Cuando la ventana se abre, cada confirmación se asigna como incluido por medio del botón `pick` que está activo al lado. Para ignorar una confirmación, desactiva el botón `pick`.","","Vale la pena mencionar que en el rebase interactivo puedes hacer muchas más cosas como combinar confirmaciones, modificar los mensajes d elas confirmaciones e incluso editar las confirmaciones. Para nuestros propósitos nos centraremos en las dos operaciones anteriores.","","¡Genial! Veamos un ejemplo."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Cuando presiones el botón, va a aparecer una ventana de rebase interactivo. Reordena los commits (siéntete libre de ignorar alguno, también) ¡y observa el resultado!"],afterMarkdowns:["¡Vientos! Git copió las cofirmaciones exactamente de la misma manera que lo especificaste en la UI."],command:"git rebase -i HEAD~4 --aboveAll",beforeCommand:"git commit; git commit; git commit; git commit"}},{type:"ModalAlert",options:{markdowns:["Para completar el nivel, haz un rebase interactivo y alcanza el orden que se muestra en la visualización objetivo. Recuerda que siempre puedes hacer `undo` y `reset` para arreglar errores :D"]}}]},pt_BR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Rebase Interativo do Git","","O cherry-pick é ótimo quando você sabe de antemão quais commits você quer (_e_ você sabe os hashes correspondentes) -- é difícil bater a simplicidade que ele oferece.","","Mas e quando você não sabe quais commits você quer? Felizmente o git pode te ajudar nesta situação também! Podemos usar o rebase interativo para isso -- trata-se da melhor forma de rever uma série de commits sobre os quais você está prestes a fazer um rebase.","","Mergulhemos nos detalhes..."]}},{type:"ModalAlert",options:{markdowns:["O rebase interativo é simplesmente o comando `rebase` com a opção `-i`.","","Se você incluir essa opção, o git abrirá uma interface para mostrar quais commits estão prestes a serem copiados abaixo do alvo do rebase. Ele também mostra os hashes e as mensagens dos commits, o que é ótimo para ter noção do que é o que.","",'No git "de verdade", a interface nada mais é que um arquivo aberto em um editor de texto (por exemplo o `vim`). Para os nossos propósitos, eu montei uma pequena janela que se comporta da mesma forma.']}},{type:"ModalAlert",options:{markdowns:["Quando a janela de rebase interativo abrir, você pode fazer 3 coisas diferentes:","","* Você pode reordenar os commits simplesmente mudando sua ordem na interface (na nossa janela isso significa arrastar e soltar com o mouse).","* Você pode escolher simplesmente omitir alguns commits. Para isso, clique no botão `pick` -- deixar o `pick` desligado significa que você quer descartar o commit.",'* Por fim, você pode "esmagar" (fazer squash) nos commits. Infelizmente, nosso tutorial não será capaz de cobrir essa funcionalidade por alguns motivos logísticos, então vamos pular os detalhes disto. Em resumo, no entanto, o squash permite que você combine commits.',"","Ótimo! Vejamos um exemplo."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Quando você clicar o botão, uma janela de rebase interativo se abrirá. Reordene alguns commits da forma como você preferir (ou sinta-se livre para desmarcar o `pick` de alguns) e veja o resultado!"],afterMarkdowns:["Boom! O Git copiou alguns commits exatamente da mesma forma que você os especificou na janela."],command:"git rebase -i HEAD~4 --aboveAll",beforeCommand:"git commit; git commit; git commit; git commit"}},{type:"ModalAlert",options:{markdowns:["Para finalizar este nível, faça um rebase interativo e obtenha a ordem mostrada na visualização do objetivo. Lembre-se que você pode usar os comandos `undo` ou `reset` para corrigir erros :D"]}}]},gl:{childViews:[{type:"ModalAlert",options:{markdowns:["## Rebase Interativo en Git","","Empregar cherry-pick é xenial cando coñeces qué commits queres (_e_ coñeces os seus códigos hash) -- é difícil mellorar a súa simplicidade.","","Pero ¿qué pasa cando non sabes qué commits son os que queres? Por sorte, ¡git cúbrete nesta situación tamén! Podemos empregar o rebase interactivo para esto -- é a mellor forma de revisar unha serie de commits que estás a rebasar.","","Mergullémonos nos detalles..."]}},{type:"ModalAlert",options:{markdowns:["O rebase interativo é o comando `rebase` coa opción `-i`.","","Se ti inclúes esta opción, o git abrirá unha interfaz para mostrar qué commits están hábiles para ser copiados sobre o obxectivo do rebase. Tamén amosa os seus códigos hash e mensaxes dos commits, o cal axuda moito para saber qué é cada commit.","",'En git "de verdade", a interfaz significa abrir un arquivo de texto nun editor (por exemplo `vim`). Para os nosos propósitos, aquí aparecerá unha pequena ventá que se comporta do mesmo xeito.']}},{type:"ModalAlert",options:{markdowns:["Cando a xanela de rebase interativo abra, poderás facer 3 cousas distintas:","","* Podes reordenar os commits simplemente cambiando a súa orde na interface (na nosa ventá significa arrastrar e soltar os commits).","* Podes escoller a opción de omitir algúns commits. Para iso, pincha no botón `pick` -- deixar o `pick` desligado significa que queres descartar o commit.",'* Ademáis, ti podes "esmagar" (fazer squash) nos commits. Tristemente, este tutorial non será capaz de cubrir esa funcionalidade por algúns motivos loxísticos, entón imos pulir algúns detalles ó respecto. Resumindo, o squash permite combinar commits.',"","¡Xenial! Vexamos un exemplo."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Cando pinches o botón, unha ventá de rebase interativo abrirase. Reordena algúns commits da forma que ti prefieras (ou se o prefires desmarca o `pick` de algúns) e mira o seu resultado!"],afterMarkdowns:["¡Veña! Git copiou algúns commits exatamente da mesma forma que o indicaches na ventá."],command:"git rebase -i HEAD~4 --aboveAll",beforeCommand:"git commit; git commit; git commit; git commit"}},{type:"ModalAlert",options:{markdowns:["Para finalizar este nivel, fai un rebase interativo e obteñaa a orde amosada na visualización do obxectivo. Lembra que podes usar os comandos `undo` ou `reset` para correxir erros :D"]}}]},de_DE:{childViews:[{type:"ModalAlert",options:{markdowns:["## Interaktiver Rebase","","Cherry-pick ist großartig, wenn du genau weißt, welche Commits du willst (_und_ ihre jeweiligen Hashes kennst) -- es ist dann schwer an Einfachheit zu überbieten.","","Aber wie sieht es aus, wenn du die benötigten Commits nicht genau kennst? Zum Glück bietet Git auch dafür eine Lösung an. Das können wir mit interaktivem Rebase machen -- die beste Art sich eine Serie von Commits in einem Rebase genau anzusehen.","","Schauen wir uns die Details an ..."]}},{type:"ModalAlert",options:{markdowns:["Interaktives Rebase bedeutet einfach nur, dass man dem `rebase` Befehl die Option `-i` hinzufügt.","","Wenn du das machst, zeigt Git dir jeden einzelnen Commit, der durch den Rebase kopiert werden würde. Es zeigt dir die Hashes und Kommentare, was gut ist um einen Überblick zu bekommen.","",'Im "echten" Git werden die Commits in einem Text-Editor angezeigt (z.B. in `vim`). Für unsere Zwecke habe ich ein kleines Dialog-Fenster gebaut, das sich ähnlich verhält.']}},{type:"ModalAlert",options:{markdowns:["Wenn sich der Dialog für den interaktiven Rebase öffnet, kannst du drei Dinge tun:","","* Du kannst die Reihenfolge der Commits durch Ziehen und Ablegen ändern.","* Du kannst einen Commit beim Rebase ignorieren, indem du im Dialog auf die Schaltfläche `omit` klickst. Du kannst einen Commit wieder aufnehmen, indem du auf `pick` klickst.","* Außerdem kannst du Commits zusammenfassen (squash). Leider wird das hier nicht unterstützt, aber im echten Git fasst es Commits zu einem zusammen.","","Super! Schauen wir uns ein Beispiel an."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Wenn du die Schaltfläche anklickst, wird sich der Rebase-Dialog öffnen. Verändere die Reihenfolge der Commits oder klicke bei einigen auf `pick` bzw. `omit` und schaue dir das Ergebnis an."],afterMarkdowns:["Bämm! Git hat die Commits genau so kopiert, wie du es ausgewählt hast."],command:"git rebase -i HEAD~4 --aboveAll",beforeCommand:"git commit; git commit; git commit; git commit"}},{type:"ModalAlert",options:{markdowns:["Um dieses Level zu schaffen mach einen interaktiven Rebase, um genau die Reihenfolge zu erzeugen, die im Ziel-Baum angezeigt wird. Denk daran, dass du jederzeit mit `undo` oder `reset` Fehler rückgängig machen kannst. :D"]}}]},ja:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git インタラクティブrebase","","どのコミットを操りたいか(そしてそれを指定するハッシュ)がわかる時に`git cherry-pick`はとても便利で、その簡単さはとてもありがたいです。 ","","しかし、どのコミットを操りたいかがわからない時はどうでしょう?ありがたいことに、そんな時にぴったりのコマンドがgitに備わっています。このためにgitのインタラクティブrebaseを使えます。rebaseしたい一連のコミットを一括で見るベストな方法です。","","具体的に見てみましょう..."]}},{type:"ModalAlert",options:{markdowns:["インタラクティブrebaseとは単に、`rebase`コマンドに`-i`オプションを合わせて使うことです。","","このオプションをつければ、gitがインタフェースを開き、どのコミットがrebase対象の下にコピーされるかを確認できます。それらのコミットのハッシュやメッセージも表示され、rebaseの概要を一眼で見るのに便利です。","",'"ホンモノ"のgitでは、その「インターフェース」とは`vim`などのテキストエディタの中でファイルが開くだけです。ここでコンセプトを見せるために同じような動作をする小さなダイアログウィンドウを作りました。']}},{type:"ModalAlert",options:{markdowns:["インタラクティブrebaseダイアログが開くと、3つの操作から選べます:","","* UIウィンドウのなかで順番を調整するだけでコミットの順番を変えられます(こちらのダイアログでは、マウスでドラッグアンドドロップで操作します)。","* 特定のコミットを丸ごと除くこともできます。除きたいコミットを指定するには`pick`をオフにします。","* 最後に、コミットを組み合わせられます。技術的に制限があり再現できないのでその詳細な説明を省きますが、短く言いますと、複数のコミットを一つにまとめることができる機能です。","","さて、例を見てみましょう。"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["ボタンを押せば、インタラクティブrebaseウィンドウが現れます。コミットの順番を変更したり、`pick`を外したりしてみて、その結果を見てみましょう!"],afterMarkdowns:["よっしゃー。gitがUIで指定されたようにコミットをコピーしました!"],command:"git rebase -i HEAD~4 --aboveAll",beforeCommand:"git commit; git commit; git commit; git commit"}},{type:"ModalAlert",options:{markdowns:["このレベルをクリアするにはインタラクティブrebaseを実行し、ゴールのビジュアライズに表示されている順番を実現しましょう。ミスがあれば`undo`や`reset`で修正できるのをお忘れなく。"]}}]},ru_RU:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Interactive Rebase","","Git cherry-pick прекрасен, когда точно известно, какие коммиты нужны (и известны их точные хеши)","","Но как быть в случае, когда точно не известно какие коммиты нужны? К счастью, Git позаботился о таких ситуациях! Можно использовать интерактивный rebase для этого - лучший способ отобрать набор коммитов для rebase.","","Углубимся в детали."]}},{type:"ModalAlert",options:{markdowns:["Всё, что нужно для интерактивного rebase - это опция `-i`","","Если добавить эту опцию, Git откроет интерфейс просмотра того, какие коммиты готовы к копированию на цель rebase (target). Также показываются хеши коммитов и комментарии к ним, так что можно легко понять что к чему.","",'Для "реального" Git, этот интерфейс означает просто открытие файла в редакторе типа vim. Для этой обучалки, я сделал небольшое диалоговое окно, которое по сути делает то же, что и редактор.']}},{type:"ModalAlert",options:{markdowns:["После открытия окна интерактивного rebase есть три варианта для каждого коммита:","","* Можно сменить положение коммита по порядку, переставив строчку с ним в редакторе (у нас в окошке строку с коммитом можно перенести просто мышкой).",'* Можно "выкинуть" коммит из ребейза. Для этого есть `pick` - переключение его означает, что нужно выкинуть коммит.',"* Наконец, можно соединить коммиты. В этом уровне игры у нас не реализована эта возможность, но, вкратце, при помощи этой функции можно объединять изменения двух коммитов.","","Ну что ж, посмотрим на примеры!"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["После нажатия на эту кнопку появится окно интерактивного rebase. Переставь несколько коммитов (или удали кое-какие) и посмотри, что получится в итоге!"],afterMarkdowns:["Бах! Git скопировал коммиты в точности так, как было указано через интерфейс!"],command:"git rebase -i HEAD~4 --aboveAll",beforeCommand:"git commit; git commit; git commit; git commit"}},{type:"ModalAlert",options:{markdowns:["Чтобы пройти этот уровень, переставь коммиты при помощи интерактивного rebase в таком порядке, как указано на визуализации. На всякий случай, помни, что всегда можно исправить ошибку, вызвав команду undo или reset."]}}]},ko:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git 인터렉티브 리베이스(Interactive Rebase)","","Git 체리-픽은 여러분이 원하는 커밋이 무엇인지 알때(각각의 해시값도) 아주 유용합니다 -- 체리-픽이 제공하는 간단함은 아주 매력적입니다.","","하지만 원하는 커밋을 모르는 상황에는 어쩌죠? 고맙게도 git은 이런상황에 대한 대안이 있습니다. 우리는 이럴 때 인터렉티브 리베이스를 사용하면됩니다 -- 리베이스할 일련의 커밋들을 검토할 수 있는 가장 좋은 방법입니다.","","자세히 알아보죠..."]}},{type:"ModalAlert",options:{markdowns:["인터렉티브 리베이스가 의미하는 뜻은 `rebase` 명령어를 사용할 때 `-i` 옵션을 같이 사용한다는 것입니다.","","이 옵션을 추가하면, git은 리베이스의 목적지가 되는 곳 아래에 복사될 커밋들을 보여주는 UI를 띄울것 입니다. 각 커밋을 구분할 수 있는 각각의 해시들과 메시지도 보여줍니다.","",'"실제" git 에서는 UI창을 띄우는것 대신에 `vim`과 같은 텍스트 편집기에서 파일을 엽니다. 저희는 배우는 것이 목적이기에 같은 역할을 하는 작은 대화창을 만들어서 대신했습니다.']}},{type:"ModalAlert",options:{markdowns:["인터렉티브 리베이스 대화창이 열리면, 3가지를 할 수 있습니다:","","* 적용할 커밋들의 순서를 UI를 통해 바꿀수 있습니다(여기서는 마우스 드래그앤 드롭으로 가능합니다)","* 원하지 않는 커밋들을 뺄 수 있습니다. 이것은 `pick`을 이용해 지정할 수 있습니다(여기서는 `pick`토글 버튼을 끄는것으로 가능합니다)","* 마지막으로, 커밋을 스쿼시(squash)할 수 있습니다. 불행히도 저희 레벨은 몇개의 논리적 문제들 때문에 지원을 하지 않습니다. 이거에 대해서는 넘어가겠습니다. 요약하자면 커밋을 합칠 수 있습니다","","자! 예시를 확인해 봅시다."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["버튼을 누르면 인터렉티브 리베이스 대화창이 뜰 것 입니다. 커밋들의 순서를 바꿔보고(커밋을 빼 봐도 됩니다) 결과를 확인해봅시다!"],afterMarkdowns:["Boom! Git이 UI를 통해 명시한 그대로 커밋들을 복사했습니다."],command:"git rebase -i HEAD~4 --aboveAll",beforeCommand:"git commit; git commit; git commit; git commit"}},{type:"ModalAlert",options:{markdowns:["이번 레벨을 통과하기 위해서 goal에 나타난 순서대로 만들기 위해 인터렉티브 리베이스를 사용해봅시다. `undo`와 `reset`을 통해 했던 실수들은 되돌릴 수 있습니다 :D"]}}]},uk:{childViews:[{type:"ModalAlert",options:{markdowns:["## Інтерактивний Rebase","","Git cherry-pick зручно користуватись, коли ти знаєш які коміти тобі потрібні (_і_ ти знаєш їхні хеші) -- важко вигадати щось простіше.","","Але що робити в ситуації, коли ти не знаєш які коміти потрібні? На щастя git може впоратись і з цим! Для цього випадку використовують інтерактивний rebase -- це найкращий спосіб перевірити серію комітів які потрібно заребейсити.","","Розглянемо це детальніше..."]}},{type:"ModalAlert",options:{markdowns:["Інтерактивний rebase це насправді команда `rebase` з опцією `-i`.","","Якщо додати цю опцію, git відкриє діалог в якому покаже які коміти будуть скопійовані до кінцевого призначення. Він також покаже хеші комітів та їхні повідомлення, що допоможе розібратися що й до чого.","",'В "справжньому" git, замість UI вікна відкриється файл в сконфігурованому текстовому редакторі, можливо `vim`. Для цього туторіалу я створив невеличке діалогове вікно що поводиться приблизно так само.']}},{type:"ModalAlert",options:{markdowns:["Коли відкриється вікно інтерактивного rebase ти можеш зробити три речі:","","* Ти можеш переставити коміти між собою просто змінивши їх порядок в діалозі (в нашому вікні ти зможеш перетягнути їх мишкою).","* Ти можеш повністю пропустити якісь коміти. В туторіалі потрібно вимкнути опцію `pick`, але в справжньому гіт потрібно просто видалити відповідний рядок.","* Також можна розчавити (squash) якісь коміти. На жаль наш туторіал не підтримує цю фічу (так як ми не підтримуємо роботу з файлами), але це дуже зручна опція в справжньому гіт. За її допомогою можна декілька різніх комітів об’єднати в один.","","Чудово! Розгляньмо це на прикладі"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Коли ти натиснеш кнопку, відкриється вікно інтерактивного rebase. Перестав якісь коміти (можеш пропустити якісь якщо хочеш), і подивись що вийде!"],afterMarkdowns:["Ка-бум! Git cкопіював коміти відповідно до того що було вказано в UI."],command:"git rebase -i HEAD~4 --aboveAll",beforeCommand:"git commit; git commit; git commit; git commit"}},{type:"ModalAlert",options:{markdowns:["Щоб пройти цей рівень за допомогою інтерактивного rebase впорядкуй коміти як показано на візуалізації. Пам’ятай що ти завжди можеш використати `undo` чи `reset` щоб виправити помилку :D"]}}]},vi:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Rebase Tương tác","","Khi bạn biết rõ mình muốn những commit nào (và mã băm tương ứng của chúng) thì Git cherry-pick là công cụ tuyệt vời -- nó đơn giản đến bất ngờ.","","Nhưng mà lỡ như bạn không biết mình cần commit nào thì sao? May mà Git cũng có công cụ cho việc này! Ta có thể dùng rebase tương tác cho việc này -- đó là cách tốt nhất để cân nhắc lựa chọn các commit mà bạn muốn rebase.","","Hãy đi sâu vào chi tiết nào..."]}},{type:"ModalAlert",options:{markdowns:["Rebase tương tác nghĩa là dùng lệnh `rebase` với tùy chọn `-i`.","","Nếu lệnh của bạn có bao hàm tùy chọn này, Git sẽ mở một giao diện người dùng để cho bạn biết những commit nào sẽ được sao chép xuống dưới mục tiêu rebase. Nó cũng đồng thời thể hiện mã băm và thông điệp của commit, điều này thật tuyệt bởi nhờ đó ta có thể phân biệt được chúng.","",'Với Git "thật", cửa sổ UI (giao diện người dùng) sẽ được mở thông qua một tệp nhờ công cụ chỉnh sửa văn bản như là `vim`. Vì mục đích học tập, tôi đã xây dựng một hộp thoại nhỏ mà nó hành xử cũng tương tự như vậy.']}},{type:"ModalAlert",options:{markdowns:["Khi hộp thoại rebase tương tác bật lên, trong ứng dụng giáo dục của chúng tôi, bạn có khả năng làm hai điều sau:","","* Bạn có thể sắp xếp lại commit một cách đơn giản thông qua UI (bằng cách kéo thả trên công cụ của chúng tôi).","* Bạn có thể chọn hoặc loại bỏ một vài commit cụ thể. Điều này được thể hiện qua nút `pick` -- tắt nút `pick` nghĩa là bạn loại bỏ commit đó.","","*Chú ý rằng, đối với rebase tương tác trong thực tế, bạn có thể làm nhiều thứ hơn như squash (kết hợp) commit, sửa đổi commit message, thậm chí là chỉnh sửa commit. Tuy nhiên, chúng ta chỉ cần tập trung vào hai thao tác trên.*","","Tuyệt! Cùng xem qua một ví dụ nào."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Khi bấm nút, một cửa sổ rebase tương tác sẽ xuất hiện. Bạn có thể sắp xếp lại một số commit (hoặc có thể xóa bớt) và xem thử kết quả!"],afterMarkdowns:["BÙÙM! Git sao chép chính xác các commit mà bạn chọn thông qua UI."],command:"git rebase -i HEAD~4 --aboveAll",beforeCommand:"git commit; git commit; git commit; git commit"}},{type:"ModalAlert",options:{markdowns:["Để hoàn thành cấp độ này, thực hiện rebase tương tác sao cho thứ tự commit giống với mục tiêu. Hãy nhớ rằng nếu gặp lỗi bạn luôn có thể hoàn tác hoặc đặt lại :D"]}}]},sl_SI:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Interaktivni Rebase","","Git cherry-pick je odličen način, ko veš katere commite bi rad (in poznaš njihove hashe) -- težko je premagati njegovo enostavnost.","","Ampak kaj pa situacija, ko ne veš katere commite želiš? K sreči ima git pokrito tudi to! Uporabimo lahko interaktivni rebase -- gre za najboljši način za pregled commitov, ki jih želiš rebaseati.","","Spustimo se v podrobnosti ..."]}},{type:"ModalAlert",options:{markdowns:["Vse kar interaktvini rebase pomeni je, da uporabimo `rebase` ukaz z opcijo `-i`.","","Če vključiš to opcijo, bo git odprl okno, da ti pokaže, kateri commiti bodo skopirani pod naš ciljni commit rebaseanja. Prav tako pokaže tudi njihove hashe in sporočila, kar je super za razumevanje kaj je kaj.","",'Za "pravi" git, odpiranje okna pomeni odpiranje datoteke v urejevalniku kot je `vim`. Za naš namen sem zgradil majhno okno, ki se obnaša enako.']}},{type:"ModalAlert",options:{markdowns:["Ko se odpre okno za interaktivno rebaseanje, imaš možnost narediti 3 stvari:","","* Enostavno lahko preurediš commite v vrstni red, ki ga želiš (v našem oknu to dosežeš kar s klikom in vlečenjem miške).","* Odločiš se lahko, da čisto izpustiš nekatere commite. To je omogočeno s `pick` -- izklop `pick` opcije pomeni, da bi rad commit izpustil.","* Nenazadnje, commite lahko tudi stisnemo. Nažalost naše stopnje tega ne podpirajo zaradi logističnih razlogov, zato bom preskočil podrobnosti tega. Toda če povzamem -- omogoča združevanje commitov.","","Super! Poglejmo primer."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Ko pritisneš gumb, se bo pojavilo interaktivno okno. Prerazporedi nekaj commitov okoli (ali pa jih odstrani z omit) in poglej rezultat!"],afterMarkdowns:["Boom! Git je na dno skopiral commite v točno takšnem vrstnem redu, kot si ga določil v oknu."],command:"git rebase -i HEAD~4 --aboveAll",beforeCommand:"git commit; git commit; git commit; git commit"}},{type:"ModalAlert",options:{markdowns:["Za dokončanje te stopnje naredi interaktvini rebase in doseži vrstni red, kot je predstavljen v ciljni vizualizaciji. Vedno lahko razveljavjiš z `undo` ali ponastaviš z `reset` ukazom, da popraviš napake :D"]}}]},pl:{childViews:[{type:"ModalAlert",options:{markdowns:["## Interaktywny rebase w Gicie","","Cherry-pick jest świetny, gdy wiesz, które commity chcesz przenieść (_oraz_ znasz ich hasze) - trudno jest dyskutować z prostotą, którą zapewnia.","","Ale co w sytuacji, gdy nie wiesz, które commity chcesz przenieść? Na szczęście Git jest przygotowany również na tę sytuację! Możemy wykorzystać do tego interaktywny rebase - to najlepszy sposób, aby przejrzeć serię commitów, które zamierzasz rebase'ować (czyli: przebazować).","","Przejdźmy do szczegółów..."]}},{type:"ModalAlert",options:{markdowns:["Wszystkie interaktywne znaczniki rebase używają polecenia `rebase` z opcją `-i`.","","Jeśli włączysz tę opcję, Git otworzy okno, aby pokazać ci, które commity mają być skopiowane poniżej wskazanego celu przebazowania (np. HEADa). W oknie pokażą się również wiadomości i hasze commitów, żeby ułatwić ci zrozumienie, co jest czym.","",'Dla "prawdziwego" Gita otwarte okno oznacza otwarcie pliku w edytorze tekstu, takim jak np. `vim`. Dla naszych potrzeb zbudowałem małe okno dialogowe, które zachowuje się tak samo.']}},{type:"ModalAlert",options:{markdowns:["Kiedy otworzy się okno dialogowe do interaktywnego przebazowania, masz możliwość zrobienia dwóch rzeczy w naszej aplikacji edukacyjnej:","","* Możesz zmienić kolejność commitów, po prostu przeciągając i upuszczając je myszką w oknie.","* Możesz zdecydować się zachować wszystkie commity lub pominąć niektóre z nich. Jest to oznaczone przez aktywny przycisk `pick`. Wyłączenie przycisku spowoduje pominięciu commitu.","","* Warto wspomnieć, że w prawdziwym interaktywnym rebase'ie możesz zrobić wiele innych rzeczy, takich jak squash (łączenie) commitów, poprawianie wiadomości commitów, a nawet edycja samych commitów. Dla naszych potrzeb jednak wystarczy, że skupimy się na dwóch omówionych operacjach.","","Świetnie! Spójrzmy na przykład."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Po naciśnięciu przycisku pojawi się interaktywne okno przebazowania. Zmień kolejność niektórych commitów (lub usuń niektóre z nich, a co!) i zobacz wynik!"],afterMarkdowns:["Tadam! Git skopiował commity w sposób podany w oknie."],command:"git rebase -i HEAD~4 --aboveAll",beforeCommand:"git commit; git commit; git commit; git commit"}},{type:"ModalAlert",options:{markdowns:["Aby ukończyć ten poziom, zrób interaktywny rebase i ustaw kolejność pokazaną w wizualizacji celu. Pamiętaj, że zawsze możesz użyć `undo` lub `reset`, aby naprawić błędy :D"]}}]},it_IT:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git rebase interattivo","","Git cherry-pick è fantastico quando sai quale commit vuoi (_e_ conosci l'hash corrispondente) -- è difficile avere di meglio.","","Ma cosa accade se non sai quale commit ti serve? Per fortuna git ci viene in contro anche in questo caso! Possiamo usare il rebase interattivo -- è il miglior modo per rivedere la sequenza di commit di cui stai per fare il rebase.","","Vediamolo nel dettaglio..."]}},{type:"ModalAlert",options:{markdowns:["Fare rebase interattivo significa usare il comando `rebase` con l'opzione `-i`.","","Se aggiungi quest'opzione, git aprirà un'interfaccia per mostrarti quali commit stanno per essere copiati sotto il commit su cui vuoi fare il rebase. Verrà anche mostrato l'hash e il messaggio del commit, il che è grandioso per darci l'idea di cosa è cosa","",'Nel git "vero", l\'interfaccia che si apre in realtà è un editor di testo come `vim`. Nel nostro caso, ho creato una piccola finestra che si comporta allo stesso modo.']}},{type:"ModalAlert",options:{markdowns:["Quando la finestra si apre, hai la possibilità di fare due cose:","","* Puoi riordinare i commit modificandone l'ordine (drag & drop con il mouse).","* Puoi decidere se conservare tutti i commit o rimuoverne qualcuno. Quando la finestra si apre, ogni commit è considerato preso dal pulsante `pick` attivo affianco a esso. Per scartare un commit, disattiva il suo pulsante `pick`.","","*Vale la pena ricordare che nel vero rebase interattivo puoi fare molte più cose come lo squashing (combinazione) di commit, la modifica del messaggio di commit (amending), e perfino la modifica dello stesso commit. Noi ci concentreremo sulle due funzioni descritte sopra.*","","Bene! Vediamo un esempio."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Quando premi il pulsante, apparirà la finestra del rebase interattivo. Riordina qualche commit (o sentiti libero di scartarne qualcuno) e vediamo il risultato!"],afterMarkdowns:["Boom! Git ha fatto la copia nell'ordine esatto che hai specificato nell'interfaccia grafica."],command:"git rebase -i HEAD~4 --aboveAll",beforeCommand:"git commit; git commit; git commit; git commit"}},{type:"ModalAlert",options:{markdowns:["Per concludere questo livello, esegui un rebase interattivo e raggiungi l'obiettivo mostrato. Ricordati che puoi sempre fare `undo` o `reset` per correggere gli errori :D"]}}]}}}},{}],134:[function(e,t,o){o.level={goalTreeString:'{"branches":{"main":{"target":"C2","id":"main"},"bugFix":{"target":"C4","id":"bugFix"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C1"],"id":"C3"},"C4":{"parents":["C3"],"id":"C4"}},"HEAD":{"target":"C3","id":"HEAD"}}',solutionCommand:"git checkout bugFix^",startTree:'{"branches":{"main":{"target":"C2","id":"main"},"bugFix":{"target":"C4","id":"bugFix"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C1"],"id":"C3"},"C4":{"parents":["C3"],"id":"C4"}},"HEAD":{"target":"main","id":"HEAD"}}',name:{en_US:"Relative Refs (^)",fr_FR:"Références relatives (^)",ja:"相対リファレンス (^)",zh_CN:"相对引用(^)",zh_TW:"相對引用(^)",es_AR:"Referencias relativas (^)",es_MX:"Referencias relativas (^)",es_ES:"Referencias relativas (^)",pt_BR:"Referências relativas (^)",gl:"Referencias relativas (^)",de_DE:"Relative Referenzen (^)",ru_RU:"Относительные ссылки (^)",ko:"상대 참조 (^) (Relative Refs)",uk:"Відносні посилання",vi:"Tham chiếu tương đối (^)",sl_SI:"Relativne Reference (^)",it_IT:"Riferimenti relativi (^)",pl:"Referencje względne (^)"},hint:{en_US:"Remember the Caret (^) operator!",fr_FR:"Rappelez-vous de l'opérateur circonflexe (^)",ja:"相対リファレンス(^)を思い出して!",de_DE:"Denk an den Dach-Operator (^)!",es_AR:"¡No te olvides del operador ^!",es_ES:"¡No te olvides del operador ^!",pt_BR:"Não se esqueça do operador circunflexo (^)",gl:"Non se esqueza do operador circunflexo (^)",zh_CN:"记住操作符(^)!",zh_TW:"不要忘記插入(^)符號!",ru_RU:"Не забудь оператор `^`",ko:"(^)연산자를 기억하세요!",uk:"Не забудь оператор `^`",vi:"Đừng quên dấu mũ (^)!",sl_SI:"Spomni se na (^) operator!",it_IT:"Ricorda l'operatore Caret(^)... l'accento circonflesso!",pl:"Pamiętaj o operatorze wstawienia (^)!"},startDialog:{en_US:{childViews:[{type:"ModalAlert",options:{markdowns:["## Relative Refs","","Moving around in Git by specifying commit hashes can get a bit tedious. In the real world you won't have a nice commit tree visualization next to your terminal, so you'll have to use `git log` to see hashes.","","Furthermore, hashes are usually a lot longer in the real Git world as well. For instance, the hash of the commit that introduced the previous level is `fed2da64c0efc5293610bdd892f82a58e8cbc5d8`. Doesn't exactly roll off the tongue...","","The upside is that Git is smart about hashes. It only requires you to specify enough characters of the hash until it uniquely identifies the commit. So I can type `fed2` instead of the long string above."]}},{type:"ModalAlert",options:{markdowns:["Like I said, specifying commits by their hash isn't the most convenient thing ever, which is why Git has relative refs. They are awesome!","","With relative refs, you can start somewhere memorable (like the branch `bugFix` or `HEAD`) and work from there.","","Relative commits are powerful, but we will introduce two simple ones here:","","* Moving upwards one commit at a time with `^`","* Moving upwards a number of times with `~`"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Let's look at the Caret (^) operator first. Each time you append that to a ref name, you are telling Git to find the parent of the specified commit.","",'So saying `main^` is equivalent to "the first parent of `main`".',"","`main^^` is the grandparent (second-generation ancestor) of `main`","","Let's check out the commit above main here."],afterMarkdowns:["Boom! Done. Way easier than typing the commit hash."],command:"git checkout main^",beforeCommand:"git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["You can also reference `HEAD` as a relative ref. Let's use that a couple of times to move upwards in the commit tree."],afterMarkdowns:["Easy! We can travel backwards in time with `HEAD^`"],command:"git checkout C3; git checkout HEAD^; git checkout HEAD^; git checkout HEAD^",beforeCommand:"git commit; git commit"}},{type:"ModalAlert",options:{markdowns:["To complete this level, check out the parent commit of `bugFix`. This will detach `HEAD`.","","You can specify the hash if you want, but try using relative refs instead!"]}}]},fr_FR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Références relatives","","Se déplacer dans Git en spécifiant des identifiants de commits (hashes) peut être un peu agaçant. Dans le monde réel vous n'aurez pas une vue sur un joli arbre des commits à côté de votre terminal, et vous devrez donc utiliser `git log` pour connaître les identifiants.","","De plus, les identifiants sont plus longs dans le vrai monde de Git qu'ici. Par exemple, l'identifiant du commit introduit au précédent niveau était `fed2da64c0efc5293610bdd892f82a58e8cbc5d8`. Difficilement mémorisable...","","Le côté positif est que Git est intelligent avec les identifiants. Vous avez seulement à spécifier les premiers caractères de l'identifiant jusqu'à ce qu'il reconnaisse exactement le commit. Ainsi je peux taper `fed2` au lieu de la longue chaîne ci-dessus."]}},{type:"ModalAlert",options:{markdowns:["Comme je l'ai dit, spécifier un commit par son identifiant n'est pas très pratique, c'est pourquoi Git a des références relatives. Elles sont géniales !","","Avec les références relatives vous pouvez commencer par vous placer à un endroit mémorisable (comme la branche `bugFix` ou `HEAD`) et travailler depuis cet endroit.","","Les commits relatifs sont puissants, et on va en présenter deux simples ici :","","* Revenir d'un commit en arrière avec `^`","* Revenir de plusieurs en arrière avec `~`"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Regardons l'opérateur circonflexe (^) d'abord. Chaque fois que vous le faites suivre un nom de référence, vous êtes en train de demander à Git de trouver le parent du commit spécifié.","",'Ainsi, `main^` est équivalent à "le premier parent de `main`".',"","`main^^` est le grand-parent (ancêtre de seconde génération) de `main`","","Faisons un checkout du commit avant main."],afterMarkdowns:["Boum ! Fini. Bien plus facile que d'écrire l'identifiant du commit."],command:"git checkout main^",beforeCommand:"git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Vous pouvez aussi utiliser `HEAD` comme une référence relative. Utilisons cela plusieurs fois pour remonter l'arbre des commits."],afterMarkdowns:["Facile ! Nous pouvons voyager dans le temps avec `HEAD^`"],command:"git checkout C3; git checkout HEAD^; git checkout HEAD^; git checkout HEAD^",beforeCommand:"git commit; git commit"}},{type:"ModalAlert",options:{markdowns:["Pour compléter ce niveau, faites un checkout du commit parent de `bugFix`. Cela va détacher `HEAD`.","","Vous pouvez spécifier l'identifiant du commit si vous voulez, mais essayez plutôt d'utiliser les références relatives !"]}}]},de_DE:{childViews:[{type:"ModalAlert",options:{markdowns:["## Relative Referenzen","","Es kann etwas mühselig werden, sich in einem Commit-Baum mittels Angabe der Hashes zu bewegen. Im echten Leben hat man normalerweise keine hübsche Visualisierung des Baumes neben seinem Terminal, also benutzt man `git log` um die Hashes zu sehen.","","Außerdem sind die echten Hashes sehr viel länger und nicht fortlaufend nummeriert. Beispielsweise heißt der Hash, mit dem ich den letzten Level committet habe, in echt `fed2da64c0efc5293610bdd892f82a58e8cbc5d8`. Nicht gerade einprägsam ...","","Zum Glück ist Git intelligent wenn es um die Hashes geht. Du musst nur soviele Zeichen eines Hashes angeben, bis der Hash eindeutig ist. Ich kann also `fed2` eingeben anstatt die komplette Zeichenkette tippen zu müssen."]}},{type:"ModalAlert",options:{markdowns:["Wie ich schon sagte: Commits über ihren Hash zu referenzieren ist nicht gerade der bequemste Weg. Weshalb es in Git relative Referenzen gibt. Welche super sind!","","Mit relativen Referenzen kann man bei einem leicht zu merkenden Bezeichner anfangen (zum Beispiel dem Branch-Namen `bugFix` oder der Referenz `HEAD`) und sich von dort vorarbeiten.","","Relative Referenzierung von Commits kann komplex sein, aber wir starten mit zwei einfachen Beispielen:","","* Geh einen Commit zurück mit `^`","* Geh eine bestimmte Anzahl von Commits zurück mit `~`"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Schauen wir uns zuerst den Dach-Operator (`^`) an. Jedes mal wenn du ihn hinter einen Referenz-Namen setzt, sagst du Git damit, dass es zum Vorgänger des angegebenen Commits gehen soll.","",'Das heißt `main^` ist gleichbedeutend mit "direkter Vorgänger des Commits, auf den `main` zeigt".',"","`main^^` ist also der Vorgänger des Vorgängers von `main`.","","Wir checken jetzt mal den Commit vor `main` aus:"],afterMarkdowns:["Bämm! Fertig. Einfacher, als den Commit-Hash zu tippen (oder zu kopieren)."],command:"git checkout main^",beforeCommand:"git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Du kannst auch `HEAD` als Basis für relative Referenzen benutzen. Lass uns das ein paar Mal verwenden, um uns im Commit-Baum nach oben zu bewegen."],afterMarkdowns:["Das war einfach. Wir reisen mit `HEAD^` in der Zeit zurück."],command:"git checkout C3; git checkout HEAD^; git checkout HEAD^; git checkout HEAD^",beforeCommand:"git commit; git commit"}},{type:"ModalAlert",options:{markdowns:["Um dieses Level abzuschließen musst du den direkten Vorgänger von `bugFix` auschecken. Dadurch wirst du `HEAD` von `bugFix` abkoppeln.","","Du kannst natürlich den Hash angeben, aber versuch doch relative Referenzen zu benutzen!"]}}]},es_AR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Referencias relativas","","Moverse por git usando los hashes de los commits puede volverse un tanto tedioso. En el mundo real no vas a tener una visualización de commits tan linda en la terminal, así que vas a tener que usar `git log` para ver los hashes.","","Peor aún, los hashes en general son mucho más largos en el git real, también. Por ejemplo, el hash del commit que introduje en el nivel anterior es `fed2da64c0efc5293610bdd892f82a58e8cbc5d8`. No es algo particularmente fácil de nombrar...","","Lo copado es que git es bastante astuto con los hashes. Sólo requiere que especifiques una cantidad de caracteres suficientes para identificar unívocamente al commit. Entonces, yo podría simplemente tipear `fed2` en lugar de esa cadena larga de arriba."]}},{type:"ModalAlert",options:{markdowns:["Como ya dije, especificar los commits por su hash no es la manera más conveniente, y por eso git tiene referencias relativas. ¡Son geniales!","","Con las referencias relativas podés arrancar de algún lugar recordable (como la rama `bugFix`, o `HEAD`) y manejarte desde ahí.","","Los commits relativos son poderosos, pero ahora vamos a presentar sólo dos formas simples:","","* Moverse un commit atrás con `^`","* Moverse una cantidad de commits atrás con `~`"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Veamos el operador ^ primero. Cada vez que le agregás eso al nombre de una referencia, le estás diciendo a git que use el padre del commit especificado.","",'Entonces, decir `main^` es equivalente a "el primer padre de `main`".',"","`main^^` es el _abuelo_ (segunda generación de ancestros) de `main`","","Veamos el commit que está antes de main acá."],afterMarkdowns:["¡Boom! Ahí está. Mucho más simple que tipear el hash de ese commit."],command:"git checkout main^",beforeCommand:"git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["También podés referenciar a `HEAD` como una referencia relativa. Usémoslo un par de veces para movernos hacia atrás en nuestro árbol."],afterMarkdowns:["¡Fácil! Podemos volver en el tiempo con `HEAD^`"],command:"git checkout C3; git checkout HEAD^; git checkout HEAD^; git checkout HEAD^",beforeCommand:"git commit; git commit"}},{type:"ModalAlert",options:{markdowns:["Para completar este nivel, checkouteá el padre del commit de `bugFix`. Esto va a detachear a `HEAD`.","","Podés especificar el hash si querés, pero mejor ¡tratá de usar la referencia relativa!"]}}]},es_ES:{childViews:[{type:"ModalAlert",options:{markdowns:["## Referencias relativas","","Moverse por git usando los hashes de los commits puede volverse un tanto tedioso. En el mundo real no vas a tener una visualización de commits tan linda en la terminal, así que vas a tener que usar `git log` para ver los hashes.","","Peor aún, los hashes en general son mucho más largos en el git real, también. Por ejemplo, el hash del commit que introduje en el nivel anterior es `fed2da64c0efc5293610bdd892f82a58e8cbc5d8`. No es algo particularmente fácil de nombrar...","","Lo interesante es que git es bastante astuto con los hashes. Sólo requiere que especifiques una cantidad de caracteres suficientes para identificar unívocamente al commit. Entonces, yo podría simplemente tipear `fed2` en lugar de esa cadena larga de arriba."]}},{type:"ModalAlert",options:{markdowns:["Como ya dije, especificar los commits por su hash no es la manera más conveniente, y por eso git tiene referencias relativas. ¡Son geniales!","","Con las referencias relativas puedes arrancar de algún lugar recordable (como la rama `bugFix`, o `HEAD`) y trabajar desde ahí.","","Los commits relativos son poderosos, pero ahora vamos a presentar sólo dos formas simples:","","* Moverse un commit hacia atrás con `^`","* Moverse una cantidad de commits hacia atrás con `~`"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Veamos el operador ^ primero. Cada vez que le agregas eso al nombre de una referencia, le estás diciendo a git que use el padre del commit especificado.","",'Entonces, decir `main^` es equivalente a "el primer padre de `main`".',"","`main^^` es el _abuelo_ (segunda generación de ancestros) de `main`","","Veamos el commit que está antes de main aquí."],afterMarkdowns:["¡Zas! Ahí está. Mucho más simple que escribir el hash de ese commit."],command:"git checkout main^",beforeCommand:"git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["También puedes referenciar a `HEAD` como una referencia relativa. Usémoslo un par de veces para movernos hacia atrás en nuestro árbol."],afterMarkdowns:["¡Fácil! Podemos volver en el tiempo con `HEAD^`"],command:"git checkout C3; git checkout HEAD^; git checkout HEAD^; git checkout HEAD^",beforeCommand:"git commit; git commit"}},{type:"ModalAlert",options:{markdowns:["Para completar este nivel, haz checkout sobre el padre del commit de `bugFix`. Esto va a detachear a `HEAD`.","","Puedes especificar el hash si quieres, pero mejor ¡trata de usar la referencia relativa!"]}}]},es_MX:{childViews:[{type:"ModalAlert",options:{markdowns:["## Referencias relativas","","Moverse por ahí en Git usando los hashes de los commits puede volverse un tanto tedioso. En el mundo real no vas a tener una visualización de commits tan linda en la terminal, así que vas a tener que usar `git log` para ver los hashes.","","Peor aún, los hashes en general son mucho más largos en el git real, también. Por ejemplo, el hash del commit que introduje en el nivel anterior es `fed2da64c0efc5293610bdd892f82a58e8cbc5d8`. No es algo particularmente fácil de nombrar...","","Lo interesante es que Git es bastante astuto con los hashes. Sólo requiere que especifiques una cantidad de caracteres suficientes para identificar unívocamente al commit. Entonces, yo podría simplemente tipear `fed2` en lugar de esa larga cadena de arriba."]}},{type:"ModalAlert",options:{markdowns:["Como ya dije, especificar los commits por su hash no es la manera más conveniente y por eso Git tiene referencias relativas. ¡Son geniales!","","Con las referencias relativas puedes arrancar de algún lugar memoralbe (como la rama `bugFix`, o `HEAD`) y trabajar desde ahí.","","Los commits relativos son poderosos, pero ahora vamos a presentar sólo dos formas simples:","","* Moverse un commit hacia atrás con `^`","* Moverse una cantidad de commits hacia atrás con `~`"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Veamos el operador ^ primero. Cada vez que le agregas eso al nombre de una referencia, le estás diciendo a git que use el padre del commit especificado.","",'Entonces, `main^` quiere decir que es equivalente a "el primer padre de `main`".',"","`main^^` es el _abuelo_ (segunda generación de ancestros) de `main`","","Veamos el commit que está antes de main aquí."],afterMarkdowns:["Vientos! Ahí está. Mucho más simple que escribir el hash de ese commit."],command:"git checkout main^",beforeCommand:"git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["También puedes referenciar a `HEAD` como una referencia relativa. Usémoslo un par de veces para movernos hacia atrás en nuestro árbol."],afterMarkdowns:["¡Fácil! Podemos volver en el tiempo con `HEAD^`"],command:"git checkout C3; git checkout HEAD^; git checkout HEAD^; git checkout HEAD^",beforeCommand:"git commit; git commit"}},{type:"ModalAlert",options:{markdowns:["Para completar este nivel, haz checkout sobre el padre del commit de `bugFix`. Esto va a detachear a `HEAD`.","","Puedes especificar el hash si quieres, pero mejor ¡trata de usar la referencia relativa!"]}}]},pt_BR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Referências relativas","","Mover-se pela árvore do Git especificando o hash do commit pode se tornar um pouco entediante. No mundo real, você não terá à sua disposição essa bonita visualização da árvore ao lado do seu terminal, então você terá de usar o comando `git log` para ver os hashes.","","Além disso, os hashes são geralmente muito maiores no mundo real. Por exemplo, o hash do commit que introduziu o nível de exercícios anterior é `fed2da64c0efc5293610bdd892f82a58e8cbc5d8`. Não é algo exatamente fácil de lembrar.","","O que salva é que o Git é inteligente com os hashes. Ele só exige que você especifique a quantidade de caracteres do hash suficiente para identificar unicamente o commit. Então eu posso digitar apenas `fed2` em vez da grande string acima."]}},{type:"ModalAlert",options:{markdowns:["Como eu disse, especificar commits pelo hash não é a sempre o mais conveniente, e é por isso que o Git suporta referências relativas. Elas são fantásticas!","","Com referências relativas, você pode começar a partir de um ponto fácil de lembrar (como o ramo `bugFix` ou o `HEAD`) e referenciar a partir dali.","","Commits relativos são poderosos, mas vamos introduzir apenas dois tipos simples aqui:","","* Mover para cima um commit por vez com `^`","* Mover para cima um número de vezes com `~`"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Vamos dar uma olhada no operador circunflexo (^) primeiro. Cada vez que você adicioná-lo a um nome de referência, você está dizendo ao Git para encontrar o pai do commit especificado.","",'Então, dizer `main^` é equivalente a "o primeiro pai do `main`".',"","`main^^` é o avô (ancestral de segunda geração) do `main`","","Vamos fazer checkout do commit logo acima do main."],afterMarkdowns:["Boom! Pronto. Muito mais fácil que digitar o hash do commit."],command:"git checkout main^",beforeCommand:"git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Você também pode usar o `HEAD` como parte de uma referência relativa. Vamos usar isso para nos mover para cima algumas vezes na árvore de commits."],afterMarkdowns:["Fácil! Podemos viajar para trás no tempo com `HEAD^`"],command:"git checkout C3; git checkout HEAD^; git checkout HEAD^; git checkout HEAD^",beforeCommand:"git commit; git commit"}},{type:"ModalAlert",options:{markdowns:["Para completar esse nível, faça checkout do commit pai de `bugFix`. Isso soltará o `HEAD`.","","Você pode especificar o hash se quiser, mas tente usar referências relativas em vez disso!"]}}]},gl:{childViews:[{type:"ModalAlert",options:{markdowns:["## Referencias relativas","","Moverse por a árbore de git usando os códigos hash dos commits pode volverse un pouco tedioso. Neste mundo real non vas ter unha visualización dos commits tan bonita no terminal, así que vas ter que usar `git log` para ver cada código hash.","","Inda peor, os códigos hash són xeralmente moito máis grandes no mundo real. Por exemplo, o hash do commit que introduxemos no nivel anterior é `fed2da64c0efc5293610bdd892f82a58e8cbc5d8`. Non é algo sinxelo de lembrar.","","O bo é que git aínda afina cos hashes. El só precisa que expecifiques a cantidade mínima de caracteres suficientes para identificar unívocamente ó commit. Entón eu podo escribir `fed2` e non o hash completo."]}},{type:"ModalAlert",options:{markdowns:["Como xa dixemos, indicar os commits polo seu código hash non é a forma máis convinte, e é por eso que git ten referencias relativas. ¡Son a caña!","","Cas referencias relativas, podes comezar por un punto sinxelo de lembrar (como a rama `bugFix` ou o `HEAD`) e referenciar a partir de ahí.","","Os commits relativos son poderosos, pero agora imos presentar só dous formas sinxelas:","","* Moverse un commit por riba con `^`","* Mover unha cantidade de commits atrás con `~`"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Votémoslle unha ollada o operador (^) primeiro. Cada vez que o engadimos a unha referencia, estaslle dicindo a commit que queres o pai de esa referencia.","",'Entón, dicir `main^` é equivalente a "o primeiro pai do `main`".',"","`main^^` é o avó (ancestral de segunda xeración) do `main`","","Imos facer checkout do commit que está enriba de main."],afterMarkdowns:["Boom! Ahí o tes. Moito máis rápido que por o hash do commit."],command:"git checkout main^",beforeCommand:"git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Tamén podes usar o `HEAD` como parte dunha referencia relativa. Ímolo utilizar para nos mover uns commits cara arriba na árbore."],afterMarkdowns:["¡Chupado! Podemos viaxar cara atrás no tempo con `HEAD^`"],command:"git checkout C3; git checkout HEAD^; git checkout HEAD^; git checkout HEAD^",beforeCommand:"git commit; git commit"}},{type:"ModalAlert",options:{markdowns:["Para completar este nivel, fai checkout do commit pai de `bugFix`. Iso soltará o `HEAD`.","","¡Podes indicar o hash que queiras, pero intenta empregar as referencias relativas, é moito mellor!"]}}]},zh_CN:{childViews:[{type:"ModalAlert",options:{markdowns:["## 相对引用","","通过指定提交记录哈希值的方式在 Git 中移动不太方便。在实际应用时,并没有像本程序中这么漂亮的可视化提交树供你参考,所以你就不得不用 `git log` 来查查看提交记录的哈希值。","","并且哈希值在真实的 Git 世界中也会更长(译者注:基于 SHA-1,共 40 位)。例如前一关的介绍中的提交记录的哈希值可能是 `fed2da64c0efc5293610bdd892f82a58e8cbc5d8`。舌头都快打结了吧...","","比较令人欣慰的是,Git 对哈希的处理很智能。你只需要提供能够唯一标识提交记录的前几个字符即可。因此我可以仅输入`fed2` 而不是上面的一长串字符。"]}},{type:"ModalAlert",options:{markdowns:["正如我前面所说,通过哈希值指定提交记录很不方便,所以 Git 引入了相对引用。这个就很厉害了!","","使用相对引用的话,你就可以从一个易于记忆的地方(比如 `bugFix` 分支或 `HEAD`)开始计算。","","相对引用非常给力,这里我介绍两个简单的用法:","","* 使用 `^` 向上移动 1 个提交记录","* 使用 `~` 向上移动多个提交记录,如 `~3`"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["首先看看操作符 (^)。把这个符号加在引用名称的后面,表示让 Git 寻找指定提交记录的 parent 提交。","","所以 `main^` 相当于“`main` 的 parent 节点”。","","`main^^` 是 `main` 的第二个 parent 节点","","现在咱们切换到 main 的 parent 节点"],afterMarkdowns:["搞定。这种方式是不是比输入哈希值方便多了?!"],command:"git checkout main^",beforeCommand:"git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["你也可以将 `HEAD` 作为相对引用的参照。下面咱们就用 `HEAD` 在提交树中向上移动几次。"],afterMarkdowns:["很简单吧?!我们可以一直使用 `HEAD^` 向上移动。"],command:"git checkout C3; git checkout HEAD^; git checkout HEAD^; git checkout HEAD^",beforeCommand:"git commit; git commit"}},{type:"ModalAlert",options:{markdowns:["要完成此关,切换到 `bugFix` 的 parent 节点。这会进入分离 `HEAD` 状态。","","如果你愿意的话,使用哈希值也可以过关,但请尽量使用相对引用!"]}}]},zh_TW:{childViews:[{type:"ModalAlert",options:{markdowns:["## 相對引用","","如果要在 git 中移動,透過指定 commit 的 hash 值的方式會變得比較麻煩。在實際例子中,你的終端機上面不會出現漂亮且具備視覺效果的 commit tree,所以你不得不用 `git log` 來查詢 hash 值。","","另外,hash 值的長度在真實的 git 環境中很長。舉個例子,前一個關卡的介紹中的 commit 的 hash 值是 `fed2da64c0efc5293610bdd892f82a58e8cbc5d8`。舌頭不要打結了...","","幸運的是,git 對於處理 hash 值很有一套。你只需要提供能夠唯一辨識出該 commit 的前幾個字元就可以了。所以,我可以只輸入 `fed2` 而不是上面的一長串字元。"]}},{type:"ModalAlert",options:{markdowns:["我說過,透過 hash 值來指定 commit 不是很方便,所以 git 加入了相對引用。這個就很厲害了!","","使用相對引用,你可以從一個易於記憶的地方(比如說 branch 名稱 `bugFix` 或 `HEAD`)開始工作。","","相對引用非常好用,這裡我介紹兩個簡單的用法:","","* 使用 `^` 向上移動一個 commit","* 使用 `~` 向上移動多個 commit"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["首先看看插入(^)這一個符號。把這個符號接在某一個 reference 後面,就表示你告訴 git 去找到該 reference 所指向的 commit 的 parent commit。","",'所以 `main^` 相當於 "`main` 的 parent commit"。',""," `main^^` 是 `main` 的 grandparent commit(往前推兩代)","","切換到 main的 parent commit"],afterMarkdowns:["看吧!完成了。這種方式比輸入代表 commit 的 hash 值簡單多了!"],command:"git checkout main^",beforeCommand:"git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["你也可以把 `HEAD` 當作相對引用。以下指令使用 `HEAD` 在 commit tree 中向上移動數次。"],afterMarkdowns:["簡單吧!我們可以一直使用 `HEAD^` 向上移動。"],command:"git checkout C3; git checkout HEAD^; git checkout HEAD^; git checkout HEAD^",beforeCommand:"git commit; git commit"}},{type:"ModalAlert",options:{markdowns:["要完成這一關,切換到 `bugFix` 的 parent commit。這會分離出 `HEAD`。","","如果你願意的話,透過直接指定 hash 值的方式也可以過關,但是還是試試看相對引用吧!"]}}]},ja:{childViews:[{type:"ModalAlert",options:{markdowns:["## 相対リファレンス","","コミットのハッシュを利用してgitの中で移動するのも少し疲れる時もあります。現実の世界では、このチュートリアルのようにターミナルの隣に見やすいツリーのビジュアライズがないので、ハッシュを見るには`git log`を使う必要があります。","","その上、実際のハッシュはこちらで見たものよりずっと長いです。例えば、先ほどのレベルの紹介のコミットハッシュは`fed2da64c0efc5293610bdd892f82a58e8cbc5d8`です。少し覚えにくいですね...","","そのため、gitでは手短くコミットを指定する方法があります。ユニークな存在だと確認できるだけのハッシュの字数を入力すれば良いです -- 上記の長い文字列の代わりに`fed2`を入力するだけで済みます。"]}},{type:"ModalAlert",options:{markdowns:["先ほど言いましたように、ハッシュでコミットを指定するのがめんどくさくなる時もあるので、gitには相対リファレンスという素晴らしい機能があります。","","相対リファレンスを使うことで、覚えやすい位置(例えば`bugFix`ブランチや`HEAD`)から始め、そのところから相対的な位置を指定できます。","","相対コミットは強力ですが、ここでは二つをご紹介します:","","* 一つずつ上へ移動させる`^`(カレット)","* 複数回上へ移動させる `~`"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["まずはカレット(^)から始めましょう。リファレンス名にカレットを追加すると、指定コミットの親コミットを見つけるようにとgitに命令を出しています。","",'なので `main^`と記述すれば、"`main`の一個上の親"、という意味になります。',"","そして`main^^`とはその親の一つの上のコミット(2代前の親)を指します。","","mainの上のコミットをここで見てみましょう"],afterMarkdowns:["やりました!コミットハッシュを書くよりずっと簡単ですね。"],command:"git checkout main^",beforeCommand:"git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["`HEAD`を相対リファレンスとして参照することもできます。 ここで数回そのコマンドを使い、コミットツリーの中で上へと移動しましょう。"],afterMarkdowns:["簡単ですね!`HEAD^`で時間を巻き戻せます。"],command:"git checkout C3; git checkout HEAD^; git checkout HEAD^; git checkout HEAD^",beforeCommand:"git commit; git commit"}},{type:"ModalAlert",options:{markdowns:["このレベルをクリアするには、`bugFix`の親コミットをチェックアウトしてください。その操作により`HEAD`が分離されます。","","ハッシュを使用してもいいですが、その代わりに相対リファレンスを試してみましょう!"]}}]},ru_RU:{childViews:[{type:"ModalAlert",options:{markdowns:["## Относительные ссылки","","Передвигаться по дереву Git при помощи указания хешей коммитов немного неудобно. В реальной ситуации у вас вряд ли будет красивая визуализация дерева в терминале, так что придётся каждый раз использовать `git log`, чтобы найти хеш нужного коммита","","Более того, хеши в реальном репозитории Git намного более длинные. Например, хеш для коммита, который приведён в предыдущем уровне - `fed2da64c0efc5293610bdd892f82a58e8cbc5d8`. Не очень просто для произношения =)","","Хорошая новость в том, что Git достаточно умён в работе с хешами. Ему нужны лишь первые несколько символов для того, чтобы идентифицировать конкретный коммит. Так что можно написать просто `fed2` вместо колбасы выше."]}},{type:"ModalAlert",options:{markdowns:["Как мы уже говорили, указание на коммит при помощи его хеша - не самый удобный способ, поэтому Git поддерживает относительные ссылки и они прекрасны!","","С относительными ссылками можно начать с какого-либо удобного места (например, с ветки `bugFix` или от HEAD) и двигаться от него","","Относительные ссылки - мощный инструмент, но мы покажем два простых способа использования:","","* Перемещение на один коммит назад `^`","* Перемещение на несколько коммитов назад `~`"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Для начала рассмотрим оператор каретки (^). Когда мы добавляем его к имени ссылки, Git воспринимает это как указание найти родителя указанного коммита.","",'Так что `main^` означает "первый родитель ветки `main`".',"","`main^^` означает прародитель (родитель родителя) `main`","","Давайте переключимся на коммит Выше `main`"],afterMarkdowns:["Опачки! Готово. Сильно проще, чем поиск и указание хеша."],command:"git checkout main^",beforeCommand:"git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Можно также использовать `HEAD` как относительную ссылку. Попробуем пройти несколько раз назад по дереву коммитов"],afterMarkdowns:["Изи! Мы можем путешествовать во времени при помощи `HEAD^`"],command:"git checkout C3; git checkout HEAD^; git checkout HEAD^; git checkout HEAD^",beforeCommand:"git commit; git commit"}},{type:"ModalAlert",options:{markdowns:["Чтобы пройти этот уровень, переместись на первого родителя ветки `bugFix`. Это отделит `HEAD` от ветки.","","Конечно, можно указать хеш, но надо попробовать использовать относительные ссылки!"]}}]},ko:{childViews:[{type:"ModalAlert",options:{markdowns:["## 상대 참조","","Git에서 여기저기 이동할 때 커밋의 해시를 사용하는 방법은 조금 귀찮습니다. 실제로 Git을 사용할 때는 터미널화면 옆에 예쁘장하게 커밋트리가 보이진 않으니까요. 매번 해시를 확인하려고 `git log` 명령어를 치고 있을 겁니다.","","나아가서, 실제 Git에서는 해시들이 훨씬 더 깁니다. 예를 들어 이전 레벨에 소개했던 커밋의 해시는 `fed2da64c0efc5293610bdd892f82a58e8cbc5d8`입니다. 쓰기 쉬워 보이진 않네요....","","다행히도, Git은 똑똑합니다. 해시가 커밋의 고유한 값임을 보여줄 수 있을 만큼만 명시해주면 됩니다. 위의 긴 문자열 대신 `fed2`만 입력해도 되는 겁니다."]}},{type:"ModalAlert",options:{markdowns:["말했듯이, 커밋들을 해시로 구분하고 사용하는것이 아주 편하다고 볼 수는 없습니다. Git의 상대 참조(Relative Ref)가 여기서 등장합니다. 굉장한 기능입니다.","","상대 참조로 우리가 기억할 만한 지점(브랜치 `bugFix`라던가 `HEAD`라던가)에서 출발해서 이동하여 다른 지점에 도달해 작업을 할 수 있습니다.","","상대 커밋은 강력한 기능인데, 여기서 두가지 간단한 방법을 소개하겠습니다.","","* 한번에 한 커밋 위로 움직이는 `^`","* 한번에 여러 커밋 위로 올라가는 `~`"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["먼저 캐럿 (^) 연산자 부터 알아보겠습니다. 참조 이름에 하나씩 추가할 때마다, 명시한 커밋의 부모를 찾게 됩니다.","",'`main^`는 "`main`의 부모"와 같은 의미 입니다.',"",'`main^^` 는 "`main`의 조부모(부모의 부모)"를 의미합니다',"","main 위에 있는 부모를 체크아웃 해 봅시다."],afterMarkdowns:["Boom! 됐습니다. 커밋의 해시를 입력하는 것보다 훨씬 쉬운 방법입니다."],command:"git checkout main^",beforeCommand:"git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["또한 참조인 `HEAD`도 상대참조를 위해 사용할 수 있습니다. 커밋트리 위쪽으로 움직이기위해 여러번 사용 해 봅시다."],afterMarkdowns:["쉽군요! 이제 우린 `HEAD^`를 통해 시간을 거슬러 올라갈 수 있습니다."],command:"git checkout C3; git checkout HEAD^; git checkout HEAD^; git checkout HEAD^",beforeCommand:"git commit; git commit"}},{type:"ModalAlert",options:{markdowns:["이 레벨을 완료하기 위해서는, `bugFix`의 부모 커밋을 체크아웃 하십시오. 이렇게 하면 `HEAD`가 분리 될 것입니다.","","해시를 이용해서도 할 수 있지만, 상대 참조를 활용하는 것을 연습해 보세요!"]}}]},uk:{childViews:[{type:"ModalAlert",options:{markdowns:["## Відносні посилання","","Пересуватися по гіту використовуючи хеш комітів може бути трохи напряжно. В справжньому гіті в тебе не буде візуалізації дерева комітів в терміналі, тому доведеться використовувати `git log` щоб подивится хеші комітів.","","Більше того, хеші як правило набагато довші в справжньому гіті. Типовий хеш виглядає як `fed2da64c0efc5293610bdd892f82a58e8cbc5d8`. Без мнемонік не обійтися)...","","З іншого боку git дуже розумно працює з хешами. Він просить вказати рівно стільки літер, скільки потрібно щоб відрізнити один коміт від іншого. Отже, замість довгого хеша зверху можна просто набрати `fed2`."]}},{type:"ModalAlert",options:{markdowns:["Як було сказано, вказувати коміти за хешем не найзручніша річ, через це git підтримує відносні посилання. Вони реально круті!","","З відносними посиланнями ти можеш почати з якогось зручного місця (наприклад гілки `bugFix` чи посилання `HEAD`) й вказати потрібний коміт відносно цього посилання","","Відносні коміти є дуже потужним інструментом, але ми почнемо з двох простих прикладів:","","* Йдемо вверх на один коміт за допомогою `^`","* Йдемо вверх на кілька комітів за допомогою `~<число>`"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Розберемось спочатку з оператором каретки (^). Кожна каретка додана до посилання (напр. до імені коміту) вказує git що потрібно знайти батька посилання до якого застосована каретка.","",'Тож `main^` тотожнє до "перший предок посилання `main`".',"","`main^^` це дідусь (предок другого покоління) посилання `main`","","Давайте перейдемо на коміт трохи вище від main:"],afterMarkdowns:["Бум! Готово. Трохи простіше ніж набирати хеш коміту"],command:"git checkout main^",beforeCommand:"git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Ти також можеш використовувати `HEAD` з відносними посиланнями. Давай використаємо це щоб трошки піднятися по дереву."],afterMarkdowns:["Просто! Ми можемо переміщуватись назад в часі з `HEAD^`"],command:"git checkout C3; git checkout HEAD^; git checkout HEAD^; git checkout HEAD^",beforeCommand:"git commit; git commit"}},{type:"ModalAlert",options:{markdowns:["Щоб пройти цей рівень перемістись на першого предка гілки `bugFix`. Ти опинишся в стані `detach HEAD`.","","Ти, звичайно, можеш вказати хеш, але натомість спробуй користуватися відносними посиланнями!"]}}]},vi:{childViews:[{type:"ModalAlert",options:{markdowns:["## Tham chiếu tương đối","","Dịch chuyển trong Git bằng cách chỉ định mã băm (hash) của commit cỏ vẻ hơi buồn tẻ. Trong đời thực thì sẽ không có mô tả Git trực quan ngay bên cạnh terminal của bạn đâu, nên nếu bạn muốn nhìn mã băm của commit thì phải dùng `git log` thôi.","","Hơn nữa, mã băm thực tế thường dài hơn rất nhiều. Ví dụ, mã băm của commit được giới thiệu trong phần trước là `fed2da64c0efc5293610bdd892f82a58e8cbc5d8`. Đọc mà xoắn hết cả lưỡi...","","Được cái là Git cũng khá thông minh về mã băm. Chỉ cần cung cấp kí tự mã băm đủ để phân biệt với các commit khác. Cho nên tôi có thể đơn giản chỉ cần gõ `fed2` thay vì cái chuỗi dài ngoằng phía trên."]}},{type:"ModalAlert",options:{markdowns:["Như tôi đã nói, xác định commit bằng mã băm chẳng hề thuận tiện tẹo nào, đó là tại sao Git có những `tham chiếu tương đối`. Chúng rất tuyệt vời!","","Với tham chiếu tương đối, bạn có thể bắt đầu từ những nơi có thể ghi nhớ được (như là nhánh `bugFix` hoặc `HEAD`) và làm việc trên đó.","","Những commit tương đối (relative commits) rất mạnh mẽ, nhưng chúng tôi sẽ chỉ giới thiệu 2 loại đơn giản sau:","","* Dịch chuyển lên 1 commit mỗi lần với `^`","* Dịch chuyển lên nhiều commit mỗi lần với `~`"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Xem thử cái dấu mũ (^) trước nào. Mỗi lần bạn nối nó với một cái tên tham chiếu, bạn đang ra lệnh cho Git tìm kiếm cha của một commit cụ thể.","",'Cho nên `main^` nghĩa là "cha đầu tiên của `main`".',"","`main^^` là ông nội (tổ tiên thế hệ 2) của `main`","","Thử nhảy sang commit trước main nào"],afterMarkdowns:["BÙUM! Đã xong. Đơn giản hơn gõ mã băm nhiều."],command:"git checkout main^",beforeCommand:"git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Bạn cũng có thể dùng `HEAD` như là tham chiếu tương đối. Thử dùng nó để leo commit vài lần nào."],afterMarkdowns:["Game là dễ! Du hành ngược thời gian với `HEAD^`"],command:"git checkout C3; git checkout HEAD^; git checkout HEAD^; git checkout HEAD^",beforeCommand:"git commit; git commit"}},{type:"ModalAlert",options:{markdowns:["Để hoàn thành cấp độ này, nhảy sang cha của `bugFix`. Tức là tháo `HEAD`.","","Nếu muốn thì bạn có thể dùng mã băm, nhưng thế thì còn gì vui nữa dùng tham chiếu tương đối đi!"]}}]},sl_SI:{childViews:[{type:"ModalAlert",options:{markdowns:["## Relativne Reference","","Premikanje po Gitu z določanjem hashev commitov je lahko včasih nerodno. V praksi ne boš imel na voljo lepe vizualizacije drevesa zraven ukaznega terminala, zato boš moral uporabljati `git log`, da boš videl hashe.","","Hashi so ponavadi v praksi tudi veliko daljši. Naprimer, hash commita, predstavljenega v prejšnji stopnji, je `fed2da64c0efc5293610bdd892f82a58e8cbc5d8`. Ni ravno preprosto za izgovoriti ...","","Pozitivna stran je, da je Git pameten glede hashev. Zahteva, da napišeš le toliko znakov hasha, da lahko prepozna unikaten commit. Tako lahko napišem `fed2`, namesto dolge verzije zgoraj."]}},{type:"ModalAlert",options:{markdowns:["Kot sem rekel, izbiranje commitov po njihovih hashih ni ravno najpriročnejša stvar na svetu, zato ima Git relativne reference. In te so super!","","Z relativni referencami lahko izhajaš iz nekje (npr. branch `bugFix` ali `HEAD`) in delaš od tam.","","Relativni commiti so močni in obsegajoči, ampak tu bomo predstavili dva preprosta:","","* Premikanje navzgor en commit naenkrat z `^`","* Premikanje navzgor n-krat z `~`"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Poglejmo najprej operator `^`. Vsakič, ko pripneš to imenu reference, poveš Gitu, naj najde starša tega commita.","",'Torej `main^` je isto kot "prvi starš brancha `main`".',"","`main^^` je stari starš (prednik druge generacije) `main`.","","Checkoutajmo sedaj commit nad masterjem."],afterMarkdowns:["Boom! Narejeno. Veliko enostavneje kot tipkanje hasha commita."],command:"git checkout main^",beforeCommand:"git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Prav tako se lahko sklicuješ na `HEAD` kot relativno referenco. Uporabimo to nekajkrat, da se pomakenmo višje po drevesu commitov."],afterMarkdowns:["Enostavno! Lahko potujemo nazaj v čas z `HEAD^`."],command:"git checkout C3; git checkout HEAD^; git checkout HEAD^; git checkout HEAD^",beforeCommand:"git commit; git commit"}},{type:"ModalAlert",options:{markdowns:["Za dokončanje te stopnje, checkoutaj starša commita `bugFix`. To bo ločilo `HEAD`.","","Hash lahko določiš, če želiš, ampak probaj raje z relativnimi referencami!"]}}]},pl:{childViews:[{type:"ModalAlert",options:{markdowns:["## Referencje względne","","Poruszanie się w Gicie poprzez określanie haszy commitów może być trochę nudne. W prawdziwym świecie nie zobaczysz ładnej wizualizacji drzewa commitów obok swojego terminala (chyba, że używasz Forka lub TortoiseGita). Musisz użyć `git log`, aby zobaczyć hasze.","","Co więcej, hasze są zazwyczaj o wiele dłuższe w prawdziwym Gicie. Na przykład hash commita, który był na początku poprzedniego poziomu, to `fed2da64c0efc5293610bdd892f82a58e8cbc5d8`. Spróbuj to przeczytać!","","Plusem jest to, że Git sprytnie radzi sobie z haszami. Wymaga jedynie podania tylu znaków hasza, ile potrzebuje, aby jednoznacznie zidentyfikować konkretny commit. Dlatego mogę wpisać jedynie `fed2` zamiast długiego łańcucha powyżej."]}},{type:"ModalAlert",options:{markdowns:["Jak już powiedzieliśmy, wybieranie commitów, używając ich hasza, nie jest najprzyjemniejszą rzeczą w życiu, dlatego Git ma referencje względne. Są niesamowite!","","Korzystając z referencji względnych, możesz zacząć od miejsca, które zapamiętasz (jak np. gałąź `bugFix` lub `HEAD`), i pracować stamtąd.","","Relatywne commity są potężne, ale pokażemy tu tylko dwie proste sytuacje:","","* Poruszanie się wstecz o jeden commit za pomocą `^`","* Poruszanie się wstecz o ileś commitów z `~`"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Spójrzmy najpierw na operator karety / daszek (^). Za każdym razem, gdy dodajesz go do referencji względnej, mówisz Gitowi, aby znalazł rodzica określonego commita.","",'Wpisując zatem `main^`, mamy na myśli "pierwszego rodzica z gałęzi `main`".',"","`main^^` to dziadek (przodek drugiego stopnia) gałęzi `main`.","","Zcheckoutujmy commit powyżej `main`:"],afterMarkdowns:["Tadam! Gotowe! O wiele łatwiej niż wpisując hasz commita."],command:"git checkout main^",beforeCommand:"git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Możesz również odwołać się do `HEAD` jako referencji względnej. Użyjmy tego kilka razy, aby przesunąć się w górę drzewa commitów."],afterMarkdowns:["Łatwizna! Możemy cofać się w czasie, używając `HEAD^`"],command:"git checkout C3; git checkout HEAD^; git checkout HEAD^; git checkout HEAD^",beforeCommand:"git commit; git commit"}},{type:"ModalAlert",options:{markdowns:["Aby ukończyć ten poziom, checkoutuj commita-rodzica z gałęzi `bugFix`. To spowoduje odczepienie `HEADa`.","","Możesz wybrać commita po haszu, jeżeli chcesz, ale spróbuj wykorzystać nowe umiejętności i użyć referencji względnej!"]}}]},it_IT:{childViews:[{type:"ModalAlert",options:{markdowns:["## Riferimenti relativi","","Spostarsi in Git specificando l'hash dei commit può essere una scocciatura. Nella vita vera non avrai un bell'albero con tutti i commit sullo schermo, dovrai usare `git log` per vedere gli hash.","","Inoltre, gli hash sono solitamente molto più lunghi. Per esempio, l'hash del commit nel livello precedente è `fed2da64c0efc5293610bdd892f82a58e8cbc5d8`. Non così semplice da ricordare...","","La nota positiva è che Git è furbo con gli hash. Richiede un numero di caratteri dell'hash tali da poter identificare in modo univoco il commit. Posso scrivere `fed2` invece dell'hash completo."]}},{type:"ModalAlert",options:{markdowns:["Come detto prima, specificare un commit tramite l'hash non è assolutamente il modo migliore, ragion per cui Git ha i riferimenti relativi. Sono stupendi!","","Tramite i riferimenti relativi, puoi partire da un punto facile da ricordare (per esempio dal ramo `bugFix` o `HEAD`) e procedere da lì.","","Questi riferimenti sono strumenti potenti, introduciamo i più semplici:","","* Risalire di un commit alla volta con `^`","* Risalire di tot commit alla volta con `~`"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Diamo un occhiata all'operatore (^) chiamato Caret o accento circonflesso. Ogni volta che lo aggiungi a un riferimento, stai dicendo a Git di cercare il genitore del commit specificato.","",'Quindi, dire `main^` è equivalente a dire "il primo genitore di `main`".',"","`main^^` è il nonno (antenato di seconda generazione) di `main`","","Selezioniamo il commit sopra main."],afterMarkdowns:["Colpito! Fatto. Mille volte meglio che scrivere l'hash."],command:"git checkout main^",beforeCommand:"git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Puoi considerare `HEAD` come un riferimento relativo. Usiamolo un paio di volte per risalire l'albero dei commit."],afterMarkdowns:["Facile! Possiamo viaggiare in dietro nel tempo con `HEAD^`"],command:"git checkout C3; git checkout HEAD^; git checkout HEAD^; git checkout HEAD^",beforeCommand:"git commit; git commit"}},{type:"ModalAlert",options:{markdowns:["Per completare questo livello, seleziona il commit padre di `bugFix`. Questo provocherà una detached `HEAD`.","","Puoi usare l'hash se vuoi, ma prova a usare i riferimenti relativi!"]}}]}}}},{}],135:[function(e,t,o){o.level={goalTreeString:'{"branches":{"main":{"target":"C6","id":"main"},"bugFix":{"target":"C0","id":"bugFix"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C1"],"id":"C3"},"C4":{"parents":["C2"],"id":"C4"},"C5":{"parents":["C3"],"id":"C5"},"C6":{"parents":["C5"],"id":"C6"}},"HEAD":{"target":"C1","id":"HEAD"}}',solutionCommand:"git branch -f main C6;git checkout HEAD~1;git branch -f bugFix HEAD~1",startTree:'{"branches":{"main":{"target":"C4","id":"main"},"bugFix":{"target":"C5","id":"bugFix"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C1"],"id":"C3"},"C4":{"parents":["C2"],"id":"C4"},"C5":{"parents":["C3"],"id":"C5"},"C6":{"parents":["C5"],"id":"C6"}},"HEAD":{"target":"C2","id":"HEAD"}}',hint:{en_US:"You'll need to use at least one direct reference (hash) to complete this level",fr_FR:"Vous aurez besoin d'utiliser au moins une référence directe (hash) pour compléter ce niveau.",zh_CN:"这一关至少要用到一次直接引用 (即哈希值)",zh_TW:"這一關至少要用到一次直接參考(hash)",es_AR:"Vas a necesitar usar al menos una referencia directa (hash) para completar este nivel",es_ES:"Vas a necesitar usar al menos una referencia directa (hash) para completar este nivel",pt_BR:"Você precisará usar pelo menos uma referência direta (hash) para completar este nível",gl:"Precisarás usar polo menos unha referencia directa (hash) para completar este nivel",de_DE:"Du musst mindestens einen Hash benutzen, um dieses Level zu schaffen",ja:"このレベルをクリアするには少なくとも一つの直接リファレンス(hash)を使用する必要があります",ru_RU:"Понадобится использовать как минимум одну прямую ссылку (хеш), чтобы пройти этот уровень",ko:"이번 레벨을 완료하려면 최소 한번은 직접 참조(해시)를 사용해야 합니다.",uk:"Тобі потрібно використати як мінімум одне пряме посилання (хеш) щоб пройти цей рівень",vi:"Bạn sẽ cần dùng ít nhất một tham chiếu trực tiếp (mã băm) để hoàn thành cấp độ này",sl_SI:"Moral boš uporabiti vsaj eno direktno referenco (hash) za dokončanje te stopnje.",it_IT:"Dovrai usare almeno un riferimento diretto (hash) per completare questo livello",pl:"Aby ukończyć ten poziom, musisz użyć co najmniej jednej bezpośredniej referencji (hasza)."},name:{en_US:"Relative Refs #2 (~)",de_DE:"Relative Referenzen #2 (~)",ja:"相対リファレンス その2 (~)",es_AR:"Referencias relativas #2 (~)",es_ES:"Referencias relativas #2 (~)",es_MX:"Referencias relativas #2 (~)",pt_BR:"Referências relativas #2 (~)",gl:"Referencias relativas #2 (~)",fr_FR:"Références relatives #2 (~)",zh_CN:"相对引用2(~)",zh_TW:"相對引用二(~)",ru_RU:"Относительные ссылки №2",ko:"상대 참조 #2 (~)",uk:"Відносні посилання №2",vi:"Tham chiếu tương đối #2 (~)",sl_SI:"Relativne Reference #2 (~)",it_IT:"Riferimenti relativi #2 (~)",pl:"Referencje względne #2 (~)"},startDialog:{en_US:{childViews:[{type:"ModalAlert",options:{markdowns:['### The "~" operator',"","Say you want to move a lot of levels up in the commit tree. It might be tedious to type `^` several times, so Git also has the tilde (~) operator.","","","The tilde operator (optionally) takes in a trailing number that specifies the number of parents you would like to ascend. Let's see it in action."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Let's specify a number of commits back with `~`."],afterMarkdowns:["Boom! So concise -- relative refs are great."],command:"git checkout HEAD~4",beforeCommand:"git commit; git commit; git commit"}},{type:"ModalAlert",options:{markdowns:["### Branch forcing","","You're an expert on relative refs now, so let's actually *use* them for something.","","One of the most common ways I use relative refs is to move branches around. You can directly reassign a branch to a commit with the `-f` option. So something like:","","`git branch -f main HEAD~3`","","moves (by force) the main branch to three parents behind HEAD."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Let's see that previous command in action."],afterMarkdowns:["There we go! Relative refs gave us a concise way to refer to `C1` and branch forcing (`-f`) gave us a way to quickly move a branch to that location."],command:"git branch -f main HEAD~3",beforeCommand:"git commit; git commit; git commit; git checkout -b bugFix"}},{type:"ModalAlert",options:{markdowns:["Now that you have seen relative refs and branch forcing in combination, let's use them to solve the next level.","","To complete this level, move `HEAD`, `main`, and `bugFix` to their goal destinations shown."]}}]},es_AR:{childViews:[{type:"ModalAlert",options:{markdowns:['### El operador "~"',"","Digamos que querés moverte un montón de niveles atrás en tu árbol de commits. Podría ser tedioso tipear `^` muchas veces, por lo que git tiene el operador ~.","","","El operador ~ (opcionalmente) toma una cantidad que especifica la cantidad de padres que querés volver hacia atrás. Veámoslo en acción"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Especifiquemos una cantidad de commits hacia atrás con `~`."],afterMarkdowns:["¡Boom! Bien conciso -- las referencias relativas la rompen."],command:"git checkout HEAD~4",beforeCommand:"git commit; git commit; git commit"}},{type:"ModalAlert",options:{markdowns:["### Forzando los branches","","Ahora que conocés todo sobre las referencias relativas, *usémoslas* para algo.","","Una de las formas más comunes en que uso las referencias relativas es para mover las ramas. Podés reasignar directamente una rama a un commit usando la opción `-f`. Así que algo como:","","`git branch -f main HEAD~3`","","Mueve (forzadamente) la rama main tres padres atrás de HEAD."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Veamos ese comando previo en acción"],afterMarkdowns:["¡Ahí vamos! Las referencias relativas nos dieron una manera concisa de referenciar a `C1`, y forzar la rama (`-f`) nos dio una manera rápida de mover la rama a esa ubicación"],command:"git branch -f main HEAD~3",beforeCommand:"git commit; git commit; git commit; git checkout -b bugFix"}},{type:"ModalAlert",options:{markdowns:["Ahora que viste las referencias relativas y el forzar ramas combinados, usémoslos para resolver el siguiente nivel.","","Para completar este nivel, mové `HEAD`, `main` y `bugFix` a sus destinos finales."]}}]},es_ES:{childViews:[{type:"ModalAlert",options:{markdowns:['### El operador "~"',"","Digamos que quieres moverte un montón de niveles atrás en tu árbol de commits. Podría ser tedioso escribir `^` muchas veces, por lo que git tiene el operador ~.","","","El operador ~ (opcionalmente) toma una cantidad que especifica la cantidad de padres que quieres volver hacia atrás. Veámoslo en acción"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Especifiquemos una cantidad de commits hacia atrás con `~`."],afterMarkdowns:["¡Zas! Bien conciso -- las referencias relativas la rompen."],command:"git checkout HEAD~4",beforeCommand:"git commit; git commit; git commit"}},{type:"ModalAlert",options:{markdowns:["### Forzando las ramas","","Ahora que eres un experto en las referencias relativas, *usémoslas* para algo.","","Una de las formas más comunes en que uso las referencias relativas es para mover las ramas. Puedes reasignar directamente una rama a un commit usando la opción `-f`. Algo así como:","","`git branch -f main HEAD~3`","","Mueve (forzadamente) la rama main tres padres por detrás de HEAD."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Veamos ese comando previo en acción"],afterMarkdowns:["¡Allá vamos! Las referencias relativas nos proporcionaron una manera concisa de referenciar a `C1`, y forzar la rama (`-f`) nos dio una manera rápida de mover la rama a esa ubicación"],command:"git branch -f main HEAD~3",beforeCommand:"git commit; git commit; git commit; git checkout -b bugFix"}},{type:"ModalAlert",options:{markdowns:["Ahora que viste las referencias relativas y el forzar ramas combinados, usémoslos para resolver el siguiente nivel.","","Para completar este nivel, mueve `HEAD`, `main` y `bugFix` a sus destinos finales."]}}]},es_MX:{childViews:[{type:"ModalAlert",options:{markdowns:['### El operador "~"',"","Digamos que quieres moverte un montón de niveles atrás en tu árbol de commits. Podría ser tedioso escribir `^` muchas veces y por eso Git tiene el operador ~.","","","El operador ~ (opcionalmente) toma la cantidad especificada de padres que quieres volver hacia atrás. Veámoslo en acción"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Especifiquemos una cantidad de confirmaciones hacia atrás con `~`."],afterMarkdowns:["¡Vientos! Genial -- las referencias relativas son lo mejor."],command:"git checkout HEAD~4",beforeCommand:"git commit; git commit; git commit"}},{type:"ModalAlert",options:{markdowns:["### Forzando las ramas","","Ahora que eres un experto en las referencias relativas, *usémoslas* para algo.","","Una de las formas más comunes en que uso las referencias relativas es para mover las ramas. Puedes reasignar directamente una rama a un commit usando la opción `-f`. Algo así como:","","`git branch -f main HEAD~3`","","Mueve (forzadamente) la rama main tres padres por detrás de HEAD."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Veamos ese comando previo en acción"],afterMarkdowns:["¡Allá vamos! Las referencias relativas nos proporcionaron una manera breve de referenciar a `C1` y forzar la rama (`-f`) nos dio una manera rápida de mover la rama a esa ubicación"],command:"git branch -f main HEAD~3",beforeCommand:"git commit; git commit; git commit; git checkout -b bugFix"}},{type:"ModalAlert",options:{markdowns:["Ahora que viste las referencias relativas y el forzar ramas combinados, usémoslos para resolver el siguiente nivel.","","Para completar este nivel, mueve `HEAD`, `main` y `bugFix` a sus destinos finales."]}}]},pt_BR:{childViews:[{type:"ModalAlert",options:{markdowns:['### O operador "~"',"","Digamos que você queira se mover vários níveis para cima na árvore de commits. Pode ser entediante digitar `^` várias vezes, e por isso o Git possui também o operador til (`~`).","","","Um número pode ser passado (opcionalmente) após o operador til, especificando o número de ancestrais que você deseja subir. Vamos vê-lo em ação"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Vamos especificar um número de commits para trás com `~`."],afterMarkdowns:["Boom! Tão conciso -- referências relativas são incríveis."],command:"git checkout HEAD~4",beforeCommand:"git commit; git commit; git commit"}},{type:"ModalAlert",options:{markdowns:["### Forçando os ramos","","Agora que você é um especialista em referências relativas, vamos *usá-las* de fato para alguma coisa.","","Uma das situações mais comuns na qual eu uso referências relativas é quando quero trocar ramos de lugar. Você pode redefinir diretamente o commit para o qual um ramo aponta com a opção `-f`. Desta forma, o seguinte comando:","","`git branch -f main HEAD~3`","","Move (à força) o ramo main 3 ancestrais acima do HEAD."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Vejamos o comando anterior em ação"],afterMarkdowns:["Aqui vamos nós! As referências relativas nos deram uma forma concisa de nos referirmos ao `C1`, e a movimentação de ramos (com `-f`) nos deu uma forma de apontar rapidamente um ramo para esse local."],command:"git branch -f main HEAD~3",beforeCommand:"git commit; git commit; git commit; git checkout -b bugFix"}},{type:"ModalAlert",options:{markdowns:["Agora que você viu referências relativas e movimentação de ramos combinadas, vamos usá-las para resolver o próximo nível.","","Para completar este nível, mova o `HEAD` e os ramos `main` e `bugFix` para os destinos mostrados no objetivo."]}}]},gl:{childViews:[{type:"ModalAlert",options:{markdowns:['### O operador "~"',"","Digamos que queres moverte un montón de commits cara atrás nunha árbore de git. Sería moi tedioso escribir `^` moitas veces, e por iso que git tamén ten o operador (`~`).","","","Pódeselle pasar un número (opcionalmente) despois da tilde, especificando o número de commits que se quere mover cara atrás. Mira como é en acción."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Imos especificar un número de commits cara atrás con `~`."],afterMarkdowns:["¡Veeeña! Ben apuntado -- as referencias relativas son a leche."],command:"git checkout HEAD~4",beforeCommand:"git commit; git commit; git commit"}},{type:"ModalAlert",options:{markdowns:["### Forzando as ramas","","Agora que eres un especialista en referencias relativas, imos *usalas* para algunha cousiña.","","Un dos usos máis comúns para o uso das referencias relativas é para movelas ramas de lugar. Ti podes reasignar directamente unha rama a un commit usando a opción `-f`. Así que con algo coma:","","`git branch -f main HEAD~3`","","Move (de forma forzosa) a rama main 3 commits enriba do HEAD."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Vexamos o comando anterior en acción"],afterMarkdowns:["¡Agora é o a nosa quenda! As referencias relativas nos darán unha forma concisa de nos referír a `C1`, e forzar a rama (con `-f`) deunos unha forma rápida de movela rama `main` a esa posición."],command:"git branch -f main HEAD~3",beforeCommand:"git commit; git commit; git commit; git checkout -b bugFix"}},{type:"ModalAlert",options:{markdowns:["Xa viches as referencias relativas e o movemento de ramas combinadas, ímolas usar para resolver o próximo exercicio.","","Para completar este nivel, mova o `HEAD` e as ramas `main` e `bugFix` para os destinos mostrados no obxectivo."]}}]},fr_FR:{childViews:[{type:"ModalAlert",options:{markdowns:['### L\'opérateur "~"',"","Imaginons que vous souhaitiez remonter beaucoup de niveaux dans l'arbre des commits. Cela peut être ennuyeux d'utiliser `^` plusieurs fois, c'est pourquoi Git a aussi l'opérateur tilde (~).","","","L'opérateur tilde prend optionnellement à sa suite un nombre qui spécifie le nombre de parents que vous souhaitez remonter. Voyons cela en action."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Spécifions le nombre de commits en arrière avec `~`."],afterMarkdowns:["Boum ! Tellement rapide ! Les références relatives sont géniales."],command:"git checkout HEAD~4",beforeCommand:"git commit; git commit; git commit"}},{type:"ModalAlert",options:{markdowns:["### Forcer les branches","","Vous êtes maintenant un expert des références relatives, alors servons-nous en.","","L'une des principales raisons pour lesquelles j'utilise les références relatives est qu'elles permettent de réorganiser les branches. Vous pouvez directement réassigner les branches à un commit avec l'option `-f`. Ainsi la commande suivante :","","`git branch -f main HEAD~3`","","bouge (de force) la branche main à trois parents derrière HEAD."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Voyons l'effet de la précédente commande."],afterMarkdowns:["On y est ! Les références relatives nous donnent une méthode concise pour référencer `C1` et le forçage de branche (`-f`) nous donne une méthode rapide pour déplacer une branche à cet emplacement."],command:"git branch -f main HEAD~3",beforeCommand:"git commit; git commit; git commit; git checkout -b bugFix"}},{type:"ModalAlert",options:{markdowns:["Maintenant que vous avez vu les références relatives et le forçage de branche, utilisons-les pour résoudre le niveau suivant.","","Pour compléter ce niveau, bouger `HEAD`, `main`, et `bugFix` à leurs destinations désignées."]}}]},de_DE:{childViews:[{type:"ModalAlert",options:{markdowns:['### Der "~"-Operator',"","Nehmen wir an, du willst viele Schritte im Commit-Baum zurückgehen. Dann wird es schnell mühsam immer wieder `^` einzugeben; deswegen gibt es in Git den Tilde-Operator `~`.","","Der Tilde-Operator akzeptiert optional eine Zahl, mit der du angeben kannst, wie viele Vorgänger du zurückgehen willst. Keine Anzahl anzugeben, bewirkt dasselbe wie `~1`."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Geben wir mit `~` an, wie viele Commits wir zurückgehen wollen."],afterMarkdowns:["Peng! So einfach -- relative Referenzen sind super."],command:"git checkout HEAD~4",beforeCommand:"git commit; git commit; git commit"}},{type:"ModalAlert",options:{markdowns:["### Erzwungene Branches","","Du bist jetzt Experte in Sachen relative Referenzen, also lass sie uns mal richtig einsetzen.","","Das Verschieben von Branches ist einer der häufigsten Anwendungsfälle dafür. Du kannst einen Branchnamen direkt auf einen bestimmten Commit setzen (_ohne_ ihn vorher ausgecheckt haben zu müssen!), indem du den Parameter `-f` benutzt. So in etwa:","","`git branch -f main HEAD~3`","","Das bewegt (erzwungenermaßen) den `main` auf den Commit drei Vorgänger vor `HEAD`."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Schauen wir uns das mal in Aktion an:"],afterMarkdowns:["Das war's schon! Relative Referenzen ermöglichen es uns den Commit `C1` sehr einfach anzugeben und `git branch -f` ermöglicht es uns, den Branch sehr schnell auf diesen Commit zu setzen."],command:"git branch -f main HEAD~3",beforeCommand:"git commit; git commit; git commit; git checkout -b bugFix"}},{type:"ModalAlert",options:{markdowns:["Jetzt wo du relative Referenzen und erzwungenes Branching in Kombination gesehen hast können wir damit den nächsten Level bewältigen.","","Bewege `HEAD`, `main` und `bugFix` an die jeweils angegebenen Positionen, um diesen Level abzuschließen."]}}]},zh_CN:{childViews:[{type:"ModalAlert",options:{markdowns:["### “~”操作符","","如果你想在提交树中向上移动很多步的话,敲那么多 `^` 貌似也挺烦人的,Git 当然也考虑到了这一点,于是又引入了操作符 `~`。","","","该操作符后面可以跟一个数字(可选,不跟数字时与 `^` 相同,向上移动一次),指定向上移动多少次。咱们还是通过实际操作看一下吧"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["咱们用 `~` 一次后退四步。"],afterMarkdowns:["多么的简洁 —— 相对引用就是方便啊!"],command:"git checkout HEAD~4",beforeCommand:"git commit; git commit; git commit"}},{type:"ModalAlert",options:{markdowns:["### 强制修改分支位置","","你现在是相对引用的专家了,现在用它来做点实际事情。","","我使用相对引用最多的就是移动分支。可以直接使用 `-f` 选项让分支指向另一个提交。例如:","","`git branch -f main HEAD~3`","","上面的命令会将 main 分支强制指向 HEAD 的第 3 级 parent 提交。"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["现在咱们来演示一下刚才的命令:"],afterMarkdowns:["这就对了! 相对引用为我们提供了一种简洁的引用提交记录 `C1` 的方式, 而 `-f` 则容许我们将分支强制移动到那个位置。"],command:"git branch -f main HEAD~3",beforeCommand:"git commit; git commit; git commit; git checkout -b bugFix"}},{type:"ModalAlert",options:{markdowns:["既然你已经看过相对引用与强制移动分支的演示了,那么赶快使用这些技巧来挑战这一关吧!","","要完成此关,移动 `HEAD`,`main` 和 `bugFix` 到目标所示的位置。"]}}]},zh_TW:{childViews:[{type:"ModalAlert",options:{markdowns:['### "~" 符號',"","假設需要在 commit tree 中向上移動多個 commit。使用太多 `^` 會非常討人厭,所以 Git 也加入了波浪(~)符號。","","","波浪符號後面可以選擇一個數字(你也可以不選擇),該數字可以告訴 Git 我要向上移動多少個 commit 。舉個例子"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["使用 `~` 一次往上移動多個 commit。"],afterMarkdowns:["哇!太簡潔了 -- 相對引用真的很好用!"],command:"git checkout HEAD~4",beforeCommand:"git commit; git commit; git commit"}},{type:"ModalAlert",options:{markdowns:["### Branch forcing","","你現在是相對引用的高手了,現在用它來實際做點事情。","","我使用相對引用最多的就是移動分支。你可以使用 `-f` 選項直接讓分支指向另一個 commit。舉個例子:","","`git branch -f main HEAD~3`","","(強制)移動 main 指向從 HEAD 往上數的第三個 parent commit。"]}},{type:"ModalAlert",options:{markdowns:["要完成這一關,移動 `HEAD`,`main` 和 `bugFix` 到目標所示的位置。"]}}]},ja:{childViews:[{type:"ModalAlert",options:{markdowns:['###"~" 演算子',"","コミットツリーの中で複数の段階上へ移動したいとします。毎回毎回`^`と打つのは面倒くさくなるかもしれませんので、gitにはチルダの演算子も備わっています。","","","チルダ演算子のあとには、上へ移動したい親コミットの数を表す数字もオプションでつけられます。実際の動作を見てみましょう。"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["遡る前のコミット数を`~`で指定しましょう。"],afterMarkdowns:["よっしゃ!効率が良いですね -- 相対リファレンスはなんと便利です。"],command:"git checkout HEAD~4",beforeCommand:"git commit; git commit; git commit"}},{type:"ModalAlert",options:{markdowns:["###ブランチの強制","","今はあなたも相対リファレンスの達人なので、実践的な使い方を覚えましょう。","","相対リファレンスのよくある使い方としてあるのは、ブランチの移動です。`-f`オプションを使ってブランチを直接コミットに関連付けられます。次のようになります","","`git branch -f main HEAD~3`","","mainブランチを(強制的に)HEADより親三代前へと移動します。"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["先ほどのコマンドの動作を見てみましょう。"],afterMarkdowns:["できました!相対リファレンスを使うことで、手短く`C1`を指定することができ、`-f`でブランチを強制的にそこへ移動することができました。"],command:"git branch -f main HEAD~3",beforeCommand:"git commit; git commit; git commit; git checkout -b bugFix"}},{type:"ModalAlert",options:{markdowns:["相対リファレンスとブランチの強制関連付けを見ましたので、いまここでそれらの方法を使ってみましょう。","","このレベルをクリアするには`HEAD`、`main`、`bugFix`をゴールで指定されている目的位置まで移動してください。"]}}]},ru_RU:{childViews:[{type:"ModalAlert",options:{markdowns:['### Оператор "~"',"","Предположим, нужно переместиться на много шагов назад по дереву. Было бы неудобно печатать `^` несколько раз (или несколько десятков раз), так что Git поддерживает также оператор тильда (~).","","","К тильде (опционально) можно добавить количество родительских коммитов, через которые нужно пройти. Посмотрим, как это работает."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Укажем после `~` число коммитов, через которые надо пройти."],afterMarkdowns:["Оп! Очевидно, относительные ссылки прекрасны."],command:"git checkout HEAD~4",beforeCommand:"git commit; git commit; git commit"}},{type:"ModalAlert",options:{markdowns:["### Перемещение ветки (branch forcing)","","Теперь мы разбираемся в относительных ссылках, так что можно реально использовать их для дела.","","Одна из наиболее распространённых целей, для которых используются относительные ссылки - это перемещение веток. Можно напрямую прикрепить ветку к коммиту при помощи опции `-f`. Например, команда:","","`git branch -f main HEAD~3`","","Переместит (принудительно) ветку `main` на три родителя назад от `HEAD`."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Посмотрим, как работает эта команда"],afterMarkdowns:["Вуаля! Относительная ссылка дала нам возможность просто сослаться на `C1`, а branch forcing (`-f`) позволил быстро переместить указатель ветки на этот коммит."],command:"git branch -f main HEAD~3",beforeCommand:"git commit; git commit; git commit; git checkout -b bugFix"}},{type:"ModalAlert",options:{markdowns:["Мы рассмотрели относительные ссылки и branch forcing вкупе, так что теперь пришло время пройти следующий уровень.","","Чтобы пройти этот уровень, передвинь `HEAD`, `main` и `bugFix` так, как показано на визуализации."]}}]},ko:{childViews:[{type:"ModalAlert",options:{markdowns:['### "~" 연산자',"","커밋트리에서 위로 여러 단계를 올라가고 싶을 수 있습니다. `^`를 계속 입력해서 올라가는것 말고 좋은 방법이 있습니다. Git 에는 틸드 (~) 연산자가 있습니다.","",""," (~) 틸드 연산자는 (선택적) 올라가고 싶은 부모의 갯수가 뒤에 숫자가 옵니다. 직접 확인해 보죠."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["돌아가고 싶은 커밋의 갯수를 `~`뒤의 숫자로 명시해 줍시다."],afterMarkdowns:["Boom! 아주 간결합니다. -- 상대 참조는 대단해요."],command:"git checkout HEAD~4",beforeCommand:"git commit; git commit; git commit"}},{type:"ModalAlert",options:{markdowns:["### 브랜치 강제로 옮기기","","이제 여러분은 상대 참조의 전문가 입니다. 이제 이걸로 무언가를 해봅시다.","","제가 상대 참조를 사용하는 가장 일반적인 방법은 브랜치를 옮길 때 입니다. `-f` 옵션을 이용해서 브랜치를 특정 커밋에 직접적으로 재지정 할 수 있습니다. 이런 식으로 말이죠:","","`git branch -f main HEAD~3`","","(강제로) main 브랜치를 HEAD에서 세번 뒤로 옮겼습니다. (three parents behind HEAD)."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["방금의 커맨드를 직접 확인해 봅시다."],afterMarkdowns:["됐네요! 우리는 상대 참조를 통해 `C1`을 간결한 방법으로 참조할 수 있었고 브랜치 강제(`-f`)를 통해 브랜치를 저 위치로 빠르게 옮길 수 있었습니다."],command:"git branch -f main HEAD~3",beforeCommand:"git commit; git commit; git commit; git checkout -b bugFix"}},{type:"ModalAlert",options:{markdowns:["자 이제 상대 참조와 브랜치 강제의 조합을 봤으니 다음 레벨을 해결해 봅시다.","","이 레벨을 통과하기 위해서, `HEAD`와 `main`과 `bugFix`를 제시되는 골지점으로 옮겨 주십시오."]}}]},uk:{childViews:[{type:"ModalAlert",options:{markdowns:['### Оператор "~"',"","Уявімо, що тобі потрібно піднятися досить високо вгору в дереві комітів. Було б трохи напряжно набирати `^` багато разів, тому Git також має оператор тильда(~).","","","До оператор тильда (не обов’язково) можна дописати справа число, що вказує на яку кількість предків потрібно піднятися вверх. Подивимось на практиці"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Давайте вкажемо на яку кількість комітів повернутися з `~`."],afterMarkdowns:["Ка-бум! Так коротко -- відносні посилання прекрасні."],command:"git checkout HEAD~4",beforeCommand:"git commit; git commit; git commit"}},{type:"ModalAlert",options:{markdowns:["### Форсуємо гілку","","Тепер ти експерт в відносних посиланнях, давай же *використаємо* їх для справи.","","Один з найуживаніших прийомів де я використовую відносні посилання це переміщення гілок. Ти можеш напряму переспрямувати бранч на якийсь коміт використавши опцію `-f` (force, тобто насильно). Щось на зразок:","","`git branch -f main HEAD~3`","","Переміщує (насильно) гілку main на три предки позад HEAD."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Давайте подивимось на попередню команду в дії"],afterMarkdowns:["Ось і маєш! Відносні посилання дають нам зручний спосіб доступу до коміту `C1`, крім того форсування бранчів (`-f`) дає нам можливість швидко перемістити гілку на цей коміт"],command:"git branch -f main HEAD~3",beforeCommand:"git commit; git commit; git commit; git checkout -b bugFix"}},{type:"ModalAlert",options:{markdowns:["Тепер, коли ти побачив відносні посилання та форсування гілок в купі, давай використаємо це щоб пройти поточний рівень.","","Щоб пройти цей рівень, перемісти `HEAD`, `main` та `bugFix` так як показано в візуалізації."]}}]},vi:{childViews:[{type:"ModalAlert",options:{markdowns:['### Toán tử "~"',"","Giả sử bạn muốn leo lên nhiều cấp trong Git. Dùng `^` vài lần thì tù lắm, nên Git đã có dấu ngã (~) cho việc đó.","","","Theo sau toán tử ngã (~) là số lượng cha ông mà bạn muốn leo lên (không bắt buộc). Xem thử làm thật thì thế nào nào."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Hãy chỉ định số lượng commit với `~`."],afterMarkdowns:["BÙUM! Quá chuẩn luôn -- tham chiếu tương đối tuyệt vời."],command:"git checkout HEAD~4",beforeCommand:"git commit; git commit; git commit"}},{type:"ModalAlert",options:{markdowns:["### Branch forcing","","Giờ thì bạn là cao thủ về tham chiếu tương đối rồi, *làm* thật thôi chứ nhỉ.","","Tôi thì hay thường dùng tham chiếu tương đối để dịch chuyển nhánh. Bạn có thể trực tiếp gán lại nhánh cho commit với cú pháp `-f`. Kiểu như thế này:","","`git branch -f main HEAD~3`","","dịch chuyển (ép buộc) nhánh main lên 3 commit phía trên HEAD."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Xem thử cái lệnh trên hoạt động sao nào."],afterMarkdowns:["Đóóóó! Tham chiếu tương đối cho chúng ta một cách chuẩn xác để trỏ tới `C1` và ép nhánh bằng (`-f`) để dịch chuyển nhanh chóng nhánh tới đó."],command:"git branch -f main HEAD~3",beforeCommand:"git commit; git commit; git commit; git checkout -b bugFix"}},{type:"ModalAlert",options:{markdowns:["Bây giờ khi bạn đã biết về các tham chiếu tương đối và ép buộc nhánh, hãy sử dụng chúng để giải quyết cấp độ tiếp theo","","Để hoàn thành cấp độ này, chuyển `HEAD`, `main`, và `bugFix` đến mục tiêu được xác định của chúng."]}}]},sl_SI:{childViews:[{type:"ModalAlert",options:{markdowns:['### Operator "~"',"","Recimo, da se želiš premakniti veliko stopenj višje po drevesu commitov. Malo je nerodno večkrat tipkati `^`, zato ima Git tudi tilda (~) operator.","","","Tilda operator (opcijsko) sprejme številko, ki določi, koliko staršev bi se rad povzpel po drevesu. Poglejmo to v praksi."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Določimo število prejšnjih commitov z `~`."],afterMarkdowns:["Boom! Tako jedrnato -- relativne reference so super."],command:"git checkout HEAD~4",beforeCommand:"git commit; git commit; git commit"}},{type:"ModalAlert",options:{markdowns:["### Forcanje Branchev","","Sedaj si strokovnjak za relativne reference, zato jih končno *uporabimo* za nekaj.","","Eden izmed najpogostejših načinov, kjer uporabljam relativne reference je za premikanje branchev naokoli. Direktno lahko premakneš branch na nek commit z `-f` opcijo. Takole nekako:","","`git branch -f main HEAD~3`","","premakne (s force-om) main branch tri commite za HEAD."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Poglejmo si prejšnji ukaz v praksi."],afterMarkdowns:["Tako ja! Relativne reference so nam dale jedrnat način s katerim se lahko nanašamo na `C1` in branch force-anje (`-f`) nam je omogočilo, da hitro prestavimo branch na to lokacijo."],command:"git branch -f main HEAD~3",beforeCommand:"git commit; git commit; git commit; git checkout -b bugFix"}},{type:"ModalAlert",options:{markdowns:["Sedaj ko smo si pogledali relativne reference in force branchanje v kombinaciji, uporabimo to, da rešimo naslednjo stopnjo.","","Za dokončanje te stopnje, premakni `HEAD`, `main` in `bugFix` na njihove ciljne prikazane destinacije."]}}]},pl:{childViews:[{type:"ModalAlert",options:{markdowns:['### Operator "~"',"","Powiedzmy, że chcesz przejść o wiele poziomów wstecz na drzewie commitów. Wielokrotne wpisywanie `^` może być męczące. Na tę okazję Git ma również operator - tyldę (~).","","","Do operatora tyldy możesz (opcjonalnie) dodać numer, który określa, o jaką liczbę rodziców chcesz się cofnąć. Zobaczmy, jak to działa."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Podajmy liczbę commitów, które chcemy przeskoczyć, za `~`."],afterMarkdowns:["Tadam! Ale szybko - referencje względne są czadowe."],command:"git checkout HEAD~4",beforeCommand:"git commit; git commit; git commit"}},{type:"ModalAlert",options:{markdowns:["### Forsowanie gałęzi","","Jesteś teraz ekspertem ds. referencji. *Wykorzystajmy* je do czegoś.","","Jednym z najczęstszych sposobów, w jaki korzystam z referencji względnych, są działania na gałęziach. Możesz bezpośrednio przypisać gałąź do commita za pomocą opcji `-f`. Na przykład tak:","","`git branch -f main HEAD~3`","","przenosi (na siłę) gałąź `main` trzy commity wstecz - za HEADa."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Zobaczmy, jak działa poprzednie polecenie."],afterMarkdowns:["Proszę bardzo! Referencje względne umożliwiły ci odnieść się w zwięzły sposób do `C1`, a forsowanie gałęzi (`-f`) pozwoliło na szybkie przeniesienie gałęzi w to konkretne miejsce."],command:"git branch -f main HEAD~3",beforeCommand:"git commit; git commit; git commit; git checkout -b bugFix"}},{type:"ModalAlert",options:{markdowns:["Teraz, gdy wiesz już, jak połączyć referencje względne i forsowanie gałęzi, użyj ich do rozwiązania następnego poziomu.","","Aby ukończyć ten poziom, przenieś `HEAD`, `main` oraz `bugFix` do wskazanych celów."]}}]},it_IT:{childViews:[{type:"ModalAlert",options:{markdowns:['### L\'operatore "~"',"","Nel caso in cui voglia risalire di più livelli l'albero dei commit, è una seccatura aggiungere `^` per ogni salto, per questo Git ha l'operatore tilde(~).","","","A questo operatore si può (facoltativamente) aggiungere un numero che specifica di quanti livelli si vuole risalire l'albero dei commit. Vediamolo in azione."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Specifichiamo il numero di commit con `~`."],afterMarkdowns:["Fatto! Breve ed efficace -- i riferimenti relativi sono stupendi."],command:"git checkout HEAD~4",beforeCommand:"git commit; git commit; git commit"}},{type:"ModalAlert",options:{markdowns:["### Forzatura dei rami (branch forcing)","","Ormai sei un esperto di riferimenti relativi, quindi facciamone realmente *uso* per qualcosa.","","Uno dei motivi più comuni per cui uso i riferimenti relativi è per spostare i rami. E' possibile assegnare un ramo a un commit con l'opzione `-f`. Per esempio:","","`git branch -f main HEAD~3`","","sposta (con la forza) il ramo main al terzo antenato di HEAD."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Vediamolo in azione."],afterMarkdowns:["Ecco qua! I riferimenti relativi ci permettono facilmente di specificare `C1` e il branch forcing (`-f`) ci da modo di spostare rapidamente il ramo su quella posizione."],command:"git branch -f main HEAD~3",beforeCommand:"git commit; git commit; git commit; git checkout -b bugFix"}},{type:"ModalAlert",options:{markdowns:["Ora che hai visto i riferimenti relativi e il branch forcing, usiamoli per completare il prossimo livello.","","Per completare questo livello, sposta `HEAD`, `main`, e `bugFix` alla loro destinazione finale mostrata nell'obiettivo."]}}]}}}},{}],136:[function(e,t,o){o.level={goalTreeString:"%7B%22branches%22%3A%7B%22main%22%3A%7B%22target%22%3A%22C1%22%2C%22id%22%3A%22main%22%7D%2C%22pushed%22%3A%7B%22target%22%3A%22C2%27%22%2C%22id%22%3A%22pushed%22%7D%2C%22local%22%3A%7B%22target%22%3A%22C1%22%2C%22id%22%3A%22local%22%7D%7D%2C%22commits%22%3A%7B%22C0%22%3A%7B%22parents%22%3A%5B%5D%2C%22id%22%3A%22C0%22%2C%22rootCommit%22%3Atrue%7D%2C%22C1%22%3A%7B%22parents%22%3A%5B%22C0%22%5D%2C%22id%22%3A%22C1%22%7D%2C%22C2%22%3A%7B%22parents%22%3A%5B%22C1%22%5D%2C%22id%22%3A%22C2%22%7D%2C%22C3%22%3A%7B%22parents%22%3A%5B%22C1%22%5D%2C%22id%22%3A%22C3%22%7D%2C%22C2%27%22%3A%7B%22parents%22%3A%5B%22C2%22%5D%2C%22id%22%3A%22C2%27%22%7D%7D%2C%22HEAD%22%3A%7B%22target%22%3A%22pushed%22%2C%22id%22%3A%22HEAD%22%7D%7D",solutionCommand:"git reset HEAD~1;git checkout pushed;git revert HEAD",compareOnlyBranches:!0,startTree:'{"branches":{"main":{"target":"C1","id":"main"},"pushed":{"target":"C2","id":"pushed"},"local":{"target":"C3","id":"local"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C1"],"id":"C3"}},"HEAD":{"target":"local","id":"HEAD"}}',name:{en_US:"Reversing Changes in Git",de_DE:"Änderungen in Git rückgängig machen",ja:"変更を元に戻す",fr_FR:"Annuler des changements avec Git",es_AR:"Revirtiendo cambios en git",es_ES:"Revirtiendo cambios en git",es_MX:"Revirtiendo cambios en Git",pt_BR:"Revertendo mudanças no Git",gl:"Revertindo cambios en git",ko:"Git에서 작업 되돌리기",zh_CN:"撤销变更",zh_TW:"在 git 中取消修改 ",ru_RU:"Отмена изменений в Git",uk:"Відміна змін в Git",vi:"Hoàn tác thay đổi trong Git",sl_SI:"Revertanje Sprememb v Gitu",it_IT:"Annullare i cambiamenti in Git",pl:"Odwracanie zmian w Gicie"},hint:{en_US:"Notice that revert and reset take different arguments.",de_DE:"Beachte, dass revert und reset unterschiedliche Argumente benötigen",fr_FR:"Notez que `revert` et `reset` n'ont pas les mêmes arguments.",es_AR:"Notá que revert y reset toman parámetros distintos",es_MX:"Observa que revert y reset utilizan parámetros distintos",es_ES:"Observa que revert y reset utilizan parámetros distintos",pt_BR:"Lembre que revert e reset recebem parâmetros diferentes",gl:"Lembra que revert e reset usan parámetros distintos",zh_CN:"注意 revert 和 reset 使用的参数不同。",zh_TW:"注意 revert 和 reset 使用不同的參數。",ko:"revert와 reset이 받는 인자가 다름을 기억하세요",ja:"revertとresetとで引数が異なることに注意。",ru_RU:"Обрати внимание, что revert и reset принимают разные параметры.",uk:"Зверни увагу на те що revert та reset приймають різні параметри",vi:"Lưu ý rằng hoàn tác (revert) và đặt lại (reset) có những đối số khác nhau.",sl_SI:"Revert in reset sprejmeta različne argumente.",it_IT:"Revert e reset hanno parametri diversi.",pl:"Zauważ, że revert i reset przyjmują różne argumenty"},startDialog:{en_US:{childViews:[{type:"ModalAlert",options:{markdowns:["## Reversing Changes in Git","","There are many ways to reverse changes in Git. And just like committing, reversing changes in Git has both a low-level component (staging individual files or chunks) and a high-level component (how the changes are actually reversed). Our application will focus on the latter.","","There are two primary ways to undo changes in Git -- one is using `git reset` and the other is using `git revert`. We will look at each of these in the next dialog",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["## Git Reset","",'`git reset` reverses changes by moving a branch reference backwards in time to an older commit. In this sense you can think of it as "rewriting history;" `git reset` will move a branch backwards as if the commit had never been made in the first place.',"","Let's see what that looks like:"],afterMarkdowns:["Nice! Git moved the main branch reference back to `C1`; now our local repository is in a state as if `C2` had never happened."],command:"git reset HEAD~1",beforeCommand:"git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["## Git Revert","",'While resetting works great for local branches on your own machine, its method of "rewriting history" doesn\'t work for remote branches that others are using.',"","In order to reverse changes and *share* those reversed changes with others, we need to use `git revert`. Let's see it in action."],afterMarkdowns:["Weird, a new commit plopped down below the commit we wanted to reverse. That's because this new commit `C2'` introduces *changes* -- it just happens to introduce changes that exactly reverses the commit of `C2`.","","With reverting, you can push out your changes to share with others."],command:"git revert HEAD",beforeCommand:"git commit"}},{type:"ModalAlert",options:{markdowns:["To complete this level, reverse the most recent commit on both `local` and `pushed`. You will revert two commits total (one per branch).","","Keep in mind that `pushed` is a remote branch and `local` is a local branch -- that should help you choose your methods."]}}]},es_AR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Revirtiendo cambios en git","","Hay varias maneras de revertir cambios en git. Y, tal como al commitear, revertir cambios en git tiene tanto un componente de bajo nivel (indexar archivos o fragmentos individualmente) como un componente de alto nivel (cómo son efectivamente revertidos los cambios). Nuestra aplicación se va a concentrar en esto último.","","Hay dos formas principales de deshacer cambios en git -- uno es usando `git reset` y el otro es usando `git revert`. Vamos a ver cada uno de esos a continuación",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["## Git Reset","",'`git reset` revierte los cambios moviendo la referencia de una rama hacia atrás en el tiempo a un commit anterior. En este sentido podés pensarlo como "reescribir la historia". `git reset` va a mover la rama hacia atrás, como si el commit nunca se hubiera hecho.',"","Veamos cómo es eso:"],afterMarkdowns:["¡Genial! git simplemente movió la referencia de la rama main atrás hacia `C1`. Ahora tu repositorio local está en un estado como si `C2` nunca hubiera ocurrido."],command:"git reset HEAD~1",beforeCommand:"git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["## Git Revert","",'Mientras que resetear los cambios funciona genial para ramas locales en tu máquina, su método de "reescribir la historia" no funciona para ramas remotas que utilizan otras personas.',"","Para revertir cambios y *compartir* esa _revertida_ con el resto, necesitamos usar `git revert`. Veámoslo en acción"],afterMarkdowns:["Extraño. Hay un nuevo commit aplicado sobre el que queríamos revertir. Eso es porque este nuevo commit `C2'` introduce *cambios* - sólo que esos cambios son exactamente los necesarios para revertir los que introdujo `C2`.","","Cuando usás revert, podés pushear ese cambio para compartirlo con otros."],command:"git revert HEAD",beforeCommand:"git commit"}},{type:"ModalAlert",options:{markdowns:["Para completar este nivel, revertí el commit más reciente, tanto en `local` como en `pushed`.","","Tené en cuenta que `pushed` es una rama remota y `local` es una rama local -- eso debería ayudarte a elegir qué métodos usar."]}}]},es_ES:{childViews:[{type:"ModalAlert",options:{markdowns:["## Revirtiendo cambios en git","","Hay varias maneras de revertir cambios en git. Y, tal como al commitear, revertir cambios en git tiene tanto un componente de bajo nivel (indexar archivos o fragmentos individualmente) como un componente de alto nivel (cómo son efectivamente revertidos los cambios). Nuestra aplicación se va a concentrar en esto último.","","Hay dos formas principales de deshacer cambios en git -- uno es usando `git reset` y el otro es usando `git revert`. Vamos a ver cada uno de ellos a continuación",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["## Git Reset","",'`git reset` deshace los cambios moviendo la referencia de una rama hacia atrás en el tiempo a un commit anterior. En este sentido puedes imaginarlo como "reescribir la historia". `git reset` va a mover la rama hacia atrás, como si el commit nunca se hubiera hecho.',"","Veamos cómo es eso:"],afterMarkdowns:["¡Genial! git simplemente movió la referencia de la rama main atrás hacia `C1`. Ahora tu repositorio local está en un estado como si `C2` nunca hubiera ocurrido."],command:"git reset HEAD~1",beforeCommand:"git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["## Git Revert","",'Mientras que resetear los cambios funciona estupendamente para ramas locales en tu máquina, su método de "reescribir la historia" no funciona para ramas remotas que otros están usando.',"","Para revertir cambios y *compartir* esa _revertida_ con otros, necesitamos usar `git revert`. Veámoslo en acción"],afterMarkdowns:["Extraño. Hay un nuevo commit aplicado sobre el que queríamos revertir. Eso es porque este nuevo commit `C2'` introduce *cambios* - sólo que esos cambios son exactamente los necesarios para revertir los que introdujo `C2`.","","Cuando utilices revert, puedes hacer push sobre ese cambio para compartirlo con otros."],command:"git revert HEAD",beforeCommand:"git commit"}},{type:"ModalAlert",options:{markdowns:["Para completar este nivel, revierte el commit más reciente, tanto en `local` como en `pushed`.","","Ten en cuenta que `pushed` es una rama remota y `local` es una rama local -- eso debería ayudarte a elegir qué métodos usar."]}}]},es_MX:{childViews:[{type:"ModalAlert",options:{markdowns:["## Revirtiendo cambios en Git","","Hay varias maneras de revertir cambios en Git. Y tal como al confirmar, revertir cambios en Git tiene tanto un componente de bajo nivel (indexar archivos o fragmentos individualmente) como un componente de alto nivel (cómo son efectivamente revertidos los cambios). Nuestra aplicación se va a concentrar en esto último.","","Hay dos formas principales de deshacer cambios en Git -- uno es usando `git reset` y el otro es usando `git revert`. Vamos a ver cada uno de ellos a continuación",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["## Git Reset","",'`git reset` deshace los cambios moviendo la referencia de una rama hacia atrás en el tiempo a un commit anterior. En este sentido puedes imaginarlo como "reescribir la historia". `git reset` va a mover la rama hacia atrás, como si el commit nunca se hubiera hecho.',"","Veamos cómo se ve eso:"],afterMarkdowns:["¡Genial! git simplemente movió la referencia de la rama main atrás hacia `C1`. Ahora tu repositorio local está en un estado como si `C2` nunca hubiera ocurrido."],command:"git reset HEAD~1",beforeCommand:"git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["## Git Revert","",'Mientras que reiniciar (reset) los cambios funciona estupendamente para ramas locales en tu máquina, su método de "reescribir la historia" no funciona para ramas remotas que otros están usando.',"","Para revertir cambios y *compartir* esa _revertida_ con otros, necesitamos usar `git revert`. Veámoslo en acción"],afterMarkdowns:["Extraño. Hay un nuevo commit aplicado sobre el que queríamos revertir. Eso es porque este nuevo commit `C2'` introduce *cambios* - sólo que esos cambios son exactamente los necesarios para revertir los que introdujo `C2`.","","Cuando utilices revert, puedes hacer push sobre ese cambio para compartirlo con otros."],command:"git revert HEAD",beforeCommand:"git commit"}},{type:"ModalAlert",options:{markdowns:["Para completar este nivel, revierte el commit más reciente, tanto en `local` como en `pushed`.","","Ten en cuenta que `pushed` es una rama remota y `local` es una rama local -- eso debería ayudarte a elegir qué métodos usar."]}}]},pt_BR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Revertendo Mudanças no Git","","Existem várias maneiras de reverter mudanças no Git. E assim como o ato de commitar, reverter mudanças no Git também tem um componente de baixo nível (a preparação, ou staging, de arquivos ou trechos de arquivos individuais) e um componente de alto nível (como as mudanças são, de fato, revertidas). Aqui vamos focar neste último ponto.","","Há duas maneiras principais de desfazer mudanças no Git -- uma delas é usando `git reset`, e a outra é usando `git revert`. Vamos olhar cada uma delas na próxima janela",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["## Git Reset","",'O comando `git reset` reverte mudanças movendo para trás no tempo (para um commit mais antigo) a referência do ramo. Desta forma, você pode pensar nessa operação como uma "reescrita do histórico"; o `git reset` vai mover o ramo para trás como se o commit nunca tivesse existido.',"","Vejamos como funciona:"],afterMarkdowns:["Legal! O Git simplesmente moveu a referência do ramo main de volta para `C1`; agora o nosso repositório local está em um estado como se o `C2` nunca tivesse acontecido."],command:"git reset HEAD~1",beforeCommand:"git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["## Git Revert","",'Embora o reset funcione muito bem em ramos locais no seu próprio computador, o método utilizado de "reescrever o histórico" não funciona com ramos remotos que outras pessoas estejam usando.',"","Para reverter mudanças e conseguir *compartilhar* essas mudanças com os outros, precisamos usar o `git revert`. Vejamo-lo em ação"],afterMarkdowns:["Estranho, um novo commit surgiu abaixo do commit que queríamos reverter. Isso é porque o novo commit `C2'` introduz *mudanças* -- acontece que as mudanças que ele introduz revertem exatamente aquelas do commit `C2`.","","Com o `revert`, você pode fazer `push` das suas mudanças para compartilhá-las com os outros."],command:"git revert HEAD",beforeCommand:"git commit"}},{type:"ModalAlert",options:{markdowns:["Para completar este nível, reverta o commit mais recente tanto em `local` como em `pushed`.","","Tenha em mente que `pushed` é um ramo remoto, e `local` é um ramo local -- isso deve ajudá-lo a escolher o método apropriado."]}}]},gl:{childViews:[{type:"ModalAlert",options:{markdowns:["## Revertindo cambios en Git","","Existen varias formas de revertir os cambios en git. E, como cando se fai commit, desfacer cambios supon unha operación de baixo nivel (a indexación de arquivos ou trozos de eles) e unha operación de alto nivel (desfacer os cambios xa aplicados). Aquí ímonos enfocar neste último punto.","","Hai dúas formas de desfacer os cambios en git -- unha delas é `git reset`, e a outra é usando `git revert`. Imos comparalas na próxima ventá.",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["## Git Reset","",'O comando `git reset` desfai os cambios movendo a referencia dunha rama cara un commit máis antigo na rama. Desta forma, podes pensar nesta operación como "reescritura do histórico"; o `git reset` vai movela rama cara atrás, como se ós commits nunca antes se fixeran.',"","Vexamos o seu funcionamento:"],afterMarkdowns:["¡Bye bye! Git moveu a referencia da rama main cara atrás, ata o commit `C1`; agora o teu repositorio local está coma se o commit `C2` nunca acontecera."],command:"git reset HEAD~1",beforeCommand:"git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["## Git Revert","",'Mentres que resetear os cambios funciona xenial para as ramas locales na túa máquina, o método utilizado de "reescribir o histórico" non funciona con ramas remotas que outra xente usa.',"","Para revervir os cambios e *compartir* eses cambios ca outra xente, precisamos usar `git revert`. Atende a cómo funciona."],afterMarkdowns:["Estrano, xurdíu un novo commit por baixo do commit que queriamos desfacer. Iso é porque o novo commit `C2'` engadíu *cambios* -- o que pasa é que o commit desfai exactamente os cambios feitos no commit `C2`.","","Con `revert`, ti podes facer `push` dos teus cambios para compartilos cos outros."],command:"git revert HEAD",beforeCommand:"git commit"}},{type:"ModalAlert",options:{markdowns:["Para completar este nivel, reverte o commit máis recente tanto en `local` como en `pushed`.","","Ten en mente que `pushed` é unha rama remota, e `local` é unha rama local -- Iso poida que te axude a aplicar o método apropriado."]}}]},de_DE:{childViews:[{type:"ModalAlert",options:{markdowns:["## Änderungen in Git rückgängig machen","","Es gibt viele Möglichkeiten, Änderungen in Git zurückzunehmen. Und ebenso wie das Committen hat auch das Rückgängigmachen eine Basis-Komponente (Dateien und Inhalte vormerken) und einen übergeordneten Aspekt (wie die Änderungen tatsächlich zurückgenommen werden). Dieses Level beschäftigt sich mit den übergeordneten Vorgängen.","","Es gibt grundsätzlich zwei Arten in Git etwas rückgängig zu machen -- einerseits `git reset` und andererseits `git revert`. Wir schauen uns beide mal an.",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["## Git Reset","",'`git reset` nimmt Änderungen zurück, indem es eine Branch-Referenz auf einen anderen Commit setzt. Es ist ein bisschen (aber nicht wirklich) wie "Geschichte umschreiben"; `git reset` bewegt einen Branch auf einen anderen Commit, als hätte er nie anders ausgesehen.',"","Schauen wir, wie das aussieht:"],afterMarkdowns:["Schick! Git hat den `main` einfach auf `C1` gesetzt; unser lokales Repository sieht nun so aus, als hätte `C2` nie stattgefunden."],command:"git reset HEAD~1",beforeCommand:"git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["## Git Revert","",'Obwohl `git reset` super im lokalen Kontext funktioniert, ist der Ansatz vom "Umschreiben" der Commit-Geschichte nicht geeignet für Branches, die auf einem Server liegen und auch von anderen benutzt werden.',"","Um Änderungen rückgängig zu machen und das mit anderen zu *teilen* müssen wir `git revert` benutzen. Schauen wir uns das in Aktion an."],afterMarkdowns:["Komisch, es ist ein neuer Commit entstanden. Das liegt daran, dass `C2'` genau die *Änderungen* enthält, die die Änderungen aus `C2` aufheben.","","Durch Reverten kannst du das Zurücknehmen von Änderungen mit anderen teilen."],command:"git revert HEAD",beforeCommand:"git commit"}},{type:"ModalAlert",options:{markdowns:["Um diesen Level abzuschließen musst du sowohl auf `local` als auch auf `pushed` jeweils den letzten Commit zurücknehmen.","","Vergiss nicht, dass `pushed` auch auf einem Server liegt und `local` ein rein lokaler Branch ist -- das sollte dir helfen, die richtige Methode zu wählen."]}}]},ja:{childViews:[{type:"ModalAlert",options:{markdowns:["## 変更を元に戻す","","Gitでは変更を元に戻す方法がたくさんあります。コミットと同じように、低レベルな動作(ファイル別だったりファイルの中の一部だったり)も高レベルな動作(変更のまとまりのキャンセル)もできます。このアプリケーションでは後者の方法について紹介します。","","基本的な巻き戻しの方法は2つあります -- 一つは`git reset`を使う方法で、もう1つは`git revert`を使う方法です。次のダイアログで一つ一つを見ていきます。",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["## Git Reset","","`git reset`はブランチのポインタを後方に移動することで変更のキャンセルを実現します。履歴を上書きするような動作だと思うと良いでしょうか。`git reset`はそもそも前のコミットなんかなかったかのように、ブランチのポインタを元に戻してくれます。","","どういう感じか見てみましょう。"],afterMarkdowns:["いいですね!Gitは単純にmainブランチへのポインタを`C1`へ戻しました。これでこのローカルリポジトリにはまるで`C2`なんて無かったかのように変更をキャンセルできました。"],command:"git reset HEAD~1",beforeCommand:"git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["## Git Revert","","自分のマシン上のブランチではさっきの`git reset`でうまくいきましたが、この「履歴を上書きする」手段は、他の人も使っているリモートにあるリポジトリに対しては使うことができません。","","変更を巻き戻して他の人とそれを共有するためには、`git revert`を使う必要があります。今度はこれを見てみましょう。"],afterMarkdowns:["あれ、おかしいな。巻き戻したいと思ってたコミットの下に新しいコミットが出来上がってしまったみたいです。そう、この新しい`C2'`コミットには`C2`コミットの内容を巻き戻す変更が含まれているのです。","","こんな風にして、巻き戻した内容を他人と共有するためにはrevertを使います。"],command:"git revert HEAD",beforeCommand:"git commit"}},{type:"ModalAlert",options:{markdowns:["この章の仕上げに、`local`と`pushed`の両方の直近のコミットを巻き戻してみましょう。","","`pushed`はリモートのブランチで、`local`はローカルであることに注意。正しくコマンドを使い分けましょう。"]}}]},fr_FR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Annuler des changements avec Git","","Il y a de nombreuses façons d'annuler des changements avec Git. De même que pour les commits, annuler des changements avec Git est à la fois un aspect bas niveau (gestion des fichiers et morceaux de fichiers) et un aspect de plus haut niveau (comment les changements sont effectivement annulés). Nous allons nous intéresser à ce dernier point.","","Il y a principalement deux façons d'annuler des changements avec Git : l'une est `git reset` et l'autre est `git revert`. Nous allons maintenant voir chacune d'entre elles.",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["## Git Reset","","`git reset` annule des changements en déplaçant la référence en arrière dans le temps sur un commit plus ancien. En ce sens, on peut considérer cela comme une façon de \"réécrire l'histoire\"; `git reset` fait remonter une branche en arrière comme si le(s) commit(s) n'avai(en)t jamais eu lieu.","","Regardons à quoi cela ressemble :"],afterMarkdowns:["Bravo ! Git a simplement déplacé la référence de la branche main en la faisant revenir sur `C1`; désormais notre dépôt est dans le même état que si `C2` n'avait jamais eu lieu."],command:"git reset HEAD~1",beforeCommand:"git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["## Git Revert","","Bien que le reset marche parfaitement pour les branches locales sur notre propre machine, cette façon de \"réécrire l'histoire\" ne marche pas avec les banches distantes (remote) que d'autres personnes utilisent.","","Pour pouvoir annuler des changements et *partager* ces annulations avec d'autres, nous devons utiliser `git revert`. Regardons comment cela fonctionne."],afterMarkdowns:["Étrangement, un nouveau commit est apparu en bas sous le commit que nous voulions annuler. C'est parce que ce nouveau commit `C2'` introduit des *modifications* -- celles qui correspondent justement à l'annulation de celles du commit `C2`.","","Avec revert, vous pouvez diffuser (push) vos modifications et les partager avec tout le monde."],command:"git revert HEAD",beforeCommand:"git commit"}},{type:"ModalAlert",options:{markdowns:["Pour accomplir ce niveau, annulez les derniers commits à la fois sur `local` et sur `pushed`. Vous devez annuler en tout 2 commits (un pour chaque branche).","","Ayez à l'esprit que `pushed` est une branche distante et `local` est une branche locale ; cela devrait vous guider dans le choix de la méthode à employer."]}}]},zh_CN:{childViews:[{type:"ModalAlert",options:{markdowns:["## 撤销变更","","在 Git 里撤销变更的方法很多。和提交一样,撤销变更由底层部分(暂存区的独立文件或者片段)和上层部分(变更到底是通过哪种方式被撤销的)组成。我们这个应用主要关注的是后者。","","主要有两种方法用来撤销变更 —— 一是 `git reset`,还有就是 `git revert`。接下来咱们逐个进行讲解。",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["## Git Reset","","`git reset` 通过把分支记录回退几个提交记录来实现撤销改动。你可以将这想象成“改写历史”。`git reset` 向上移动分支,原来指向的提交记录就跟从来没有提交过一样。","","让我们来看看演示:"],command:"git reset HEAD~1",afterMarkdowns:["漂亮! Git 把 main 分支移回到 `C1`;现在我们的本地代码库根本就不知道有 `C2` 这个提交了。","","(译者注:在reset后, `C2` 所做的变更还在,但是处于未加入暂存区状态。)"],beforeCommand:"git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["## Git Revert","","虽然在你的本地分支中使用 `git reset` 很方便,但是这种“改写历史”的方法对大家一起使用的远程分支是无效的哦!","","为了撤销更改并**分享**给别人,我们需要使用 `git revert`。来看演示:"],command:"git revert HEAD",afterMarkdowns:["奇怪!在我们要撤销的提交记录后面居然多了一个新提交!这是因为新提交记录 `C2'` 引入了**更改** —— 这些更改刚好是用来撤销 `C2` 这个提交的。也就是说 `C2'` 的状态与 `C1` 是相同的。","","revert 之后就可以把你的更改推送到远程仓库与别人分享啦。"],beforeCommand:"git commit"}},{type:"ModalAlert",options:{markdowns:["要完成此关,分别撤销 `local` 分支和 `pushed` 分支上的最近一次提交。共需要撤销两个提交(每个分支一个)。","","记住 `pushed` 是远程分支,`local` 是本地分支 —— 这么说你应该知道用分别哪种方法了吧?"]}}]},zh_TW:{childViews:[{type:"ModalAlert",options:{markdowns:["## 取消 git 的修改","","在 git 裡面取消修改的方法很多。和 commit 一樣,在 git 裡面取消修改同時具有底層的部份(暫存一些獨立的文件或者片段)和高層的部份(修改是如何被取消)。我們主要講的重點是後者。","","在 git 裡主要用兩種方法來取消修改,一種是 `git reset`,另外一種是 `git revert`。讓我們在下一個對話視窗中逐一瞭解它們。",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["## Git Reset","",'`git reset` 把分支的參考點退回到上一個 commit 來取消修改。你可以認為這是在"重寫歷史"。`git reset` 往回移動 branch,原來的 branch 所指向的 commit 好像從來沒有存在過一樣。',"","讓我們來看看要怎麼操作:"],command:"git reset HEAD~1",afterMarkdowns:["太好了! Git 把 main branch 簡單地移回到 `C1`;現在在我們的 local 已經退回到沒有 commit 過 `C2` 的狀態了。"],beforeCommand:"git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["## Git Revert","","雖然在你的 local branch 中使用 `git reset` 很方便,但是這種「改寫歷史」的方法對別人的 remote branch 是無效的哦!","","為了取消修改並且把這個狀態*分享*給別人,我們需要使用 `git revert`。舉個例子"],command:"git revert HEAD",afterMarkdowns:["很奇怪吧!在我們要取消的 commit 後面居然多了一個新的 commit!這是因為新的 commit `C2'` 引入了*修改*——用來表示我們取消 `C2` 這個 commit 的修改。","","多虧了 revert,現在可以把你的修改分享給別人啦。"],beforeCommand:"git commit"}},{type:"ModalAlert",options:{markdowns:["要完成這一關,分別取消 `local` branch 和 `pushed` branch 上的最近的一次 commit。","","記住 `pushed` 是一個 remote branch,`local` 是一個 local branch,有了這麼明顯的提示應該知道要用哪種方法了吧?"]}}]},ko:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git에서 작업 되돌리기","","Git에는 작업한 것을 되돌리는 여러가지 방법이 있습니다. 변경내역을 되돌리는 것도 커밋과 마찬가지로 낮은 수준의 일(개별 파일이나 묶음을 스테이징 하는 것)과 높은 수준의 일(실제 변경이 복구되는 방법)이 있는데요, 여기서는 후자에 집중해 알려드릴게요.","","Git에서 변경한 내용을 되돌리는 방법은 크게 두가지가 있습니다 -- 하나는 `git reset`을 쓰는거고, 다른 하나는 `git revert`를 사용하는 것입니다. 다음 화면에서 하나씩 알아보겠습니다.",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["## Git 리셋(reset)","",'`git reset`은 브랜치로 하여금 예전의 커밋을 가리키도록 이동시키는 방식으로 변경 내용을 되돌립니다. 이런 관점에서 "히스토리를 고쳐쓴다"라고 말할 수 있습니다. 즉, `git reset`은 마치 애초에 커밋하지 않은 것처럼 예전 커밋으로 브랜치를 옮기는 것입니다.',"","어떤 그림인지 한번 보죠:"],afterMarkdowns:["그림에서처럼 main 브랜치가 가리키던 커밋을 `C1`로 다시 옮겼습니다; 이러면 로컬 저장소에는 마치 `C2`커밋이 아예 없었던 것과 마찬가지 상태가 됩니다."],command:"git reset HEAD~1",beforeCommand:"git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["## Git 리버트(revert)","",'각자의 컴퓨터에서 작업하는 로컬 브랜치의 경우 리셋(reset)을 잘 쓸 수 있습니다만, "히스토리를 고쳐쓴다"는 점 때문에 다른 사람이 작업하는 리모트 브랜치에는 쓸 수 없습니다.',"","변경분을 되돌리고, 이 되돌린 내용을 다른 사람들과 *공유하기* 위해서는, `git revert`를 써야합니다. 예제로 살펴볼게요."],afterMarkdowns:["어색하게도, 우리가 되돌리려고한 커밋의 아래에 새로운 커밋이 생겼습니다. `C2`라는 새로운 커밋에 *변경내용*이 기록되는데요, 이 변경내역이 정확히 `C2` 커밋 내용의 반대되는 내용입니다.","","리버트를 하면 다른 사람들에게도 변경 내역을 밀어(push) 보낼 수 있습니다."],command:"git revert HEAD",beforeCommand:"git commit"}},{type:"ModalAlert",options:{markdowns:["이 레벨을 통과하려면, `local` 브랜치와 `pushed` 브랜치에 있는 최근 두 번의 커밋을 되돌려 보세요.","","`pushed`는 리모트 브랜치이고, `local`은 로컬 브랜치임을 신경쓰셔서 작업하세요 -- 어떤 방법을 선택하실지 떠오르시죠?"]}}]},ru_RU:{childViews:[{type:"ModalAlert",options:{markdowns:["## Отмена изменений в Git","","Есть много путей для отмены изменений в Git. Так же как и коммит, отмена изменений в Git возможна и на низком уровне (добавление в коммит отдельных файлов и наборов строк), и на высоком (как изменения реально отменяются). Сейчас сфокусируемся на высокоуровневой части.","","Есть два основных способа отмены изменений в Git: первый - это `git reset`, а второй - `git revert`. Попробуем оба на следующем шаге.",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["## Git Reset","",'`git reset` отменяет изменения, перенося ссылку на ветку назад, на более старый коммит. Это своего рода "переписывание истории"; `git reset` перенесёт ветку назад, как будто некоторых коммитов вовсе и не было.',"","Посмотрим, как это работает:"],afterMarkdowns:["Неплохо! Git просто перенёс ссылку на `main` обратно на коммит `C1`. Теперь наш локальный репозиторий в состоянии, как будто `C2` никогда не существовал."],command:"git reset HEAD~1",beforeCommand:"git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["## Git Revert","","Reset отлично работает на локальных ветках, в локальных репозиториях. Но этот метод переписывания истории не сработает на удалённых ветках, которые используют другие пользователи.","","Чтобы отменить изменения и поделиться отменёнными изменениями с остальными, надо использовать `git revert`. Посмотрим, как это работает"],afterMarkdowns:["Забавно, появился новый коммит. Дело в том, что новый коммит `C2'` просто содержит изменения, полностью противоположные тем, что сделаны в коммите `C2`.","","После `revert` можно сделать `push` и поделиться изменениями с остальными."],command:"git revert HEAD",beforeCommand:"git commit"}},{type:"ModalAlert",options:{markdowns:["Чтобы пройти этот уровень, отмени два последних коммита и в `local`, и в `pushed`","","Помни, что `pushed` - это remote ветка, а `local` - это локальная ветка. Это поможет выбрать способ отмены изменений."]}}]},uk:{childViews:[{type:"ModalAlert",options:{markdowns:["## Відміна змін в Git","","Є декілька шляхів відмини змін в Git. І так само як і коміти, зміни в гіт можна відміняти використовуючи або низькорівневі методи (додавання в коміт окремих файлів) так і високорівневі. Ми зосередемось на останніх.","","Є два основні шляхи відміни змін в Git -- перший це використовувати `git reset` й інший це `git revert`. В наступному слайді ми подивимося на кожний з них",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["## Git Reset","",'`git reset` відміняє зміни переміщуючи вказівник гілки назад в історії на старіший коміт. В принципі, можна вважати що це певне "переписування історії;" Коли `git reset` перемістить гілку назад буде здаватися, що відмінений коміт взагалі ніколи не створювався.',"","Давайте подивимося, як це виглядає:"],afterMarkdowns:["Чудово! Git перемістив посилання гілки main назад до `C1`; тепер наш локальний репозиторій в такому стані, наче коміту `C2` ніколи не було."],command:"git reset HEAD~1",beforeCommand:"git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["## Git Revert","",'Команда reset чудово працює для локальних бранчів на власному комп’ютері, але так як вона спричиняє "переписування історії", її не можна використовувати в ситуації коли кілька користувачів працюють з цим бранчем',"","Для того щоб відкотити зміни й потім *поділитися* цими відкоченими змінами з друзями, потрібно використовувати `git revert`. Давай подивимось на прикладі"],afterMarkdowns:["Дивно, був створений новий коміт, нижче того коміту який ми хотіли відкотити. Це сталося тому що новий коміт `C2'` містить *зміни* які повністю протилежні змінам `C2`.","","Після revert, ти зможеш зробити push щоб поділитися гілкою з іншими."],command:"git revert HEAD",beforeCommand:"git commit"}},{type:"ModalAlert",options:{markdowns:["Щоб пройти цей рівень відміни два останні коміти на гілках `local` та `pushed`.","","Зауваж, що `pushed` це віддалена гілка, а `local` це локальна гілка -- це має допомогти з вибором методу."]}}]},vi:{childViews:[{type:"ModalAlert",options:{markdowns:["## Hoàn tác trong Git","","Có rất nhiều cách để hoàn tác thay đổi trong Git. Và cũng tương tự như commit, hủy thay đổi trong Git có cả thành phần bậc thấp (tạm thời lưu trữ một số tệp hoặc đoạn độc lập) và thành phần bậc cao (cách mà các thay đổi thực sự bị hủy). Ứng dụng của chúng tôi tập trung vào cái sau.","","Có 2 cách cơ bản để hủy thay đổi trong Git -- một là dùng `git reset`, hai là dùng `git revert`. Chúng ta sẽ xem xét từng cái trong hộp thoại sau",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["## Git Reset","",'`git reset` hoàn tác bằng cách chuyển tham chiếu của nhánh ngược lên commit cũ hơn. Bạn có thể hiểu nó như kiểu "viết lại lịch sử;" `git reset` sẽ dịch chuyển nhánh lên trên như thể commit chưa bao giờ được tạo ra vậy.',"","Cùng xem thử nó trông thế nào nào:"],afterMarkdowns:["Hay! Git chuyển tham chiếu của main trở lại `C1`; bây giờ kho lưu trữ trông như thể commit `C2` chưa bao giờ xảy ra vậy."],command:"git reset HEAD~1",beforeCommand:"git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["## Git Revert","",'Trong khi git reset hoạt động rất tốt tại nhánh cục bộ trên máy cá nhân, cách thức "viết lại lịch sử" chẳng hề có tác dụng lên nhánh ở từ xa mà người khác sử dụng.',"","Để có thể hoàn tác và *chia sẻ* hoàn tác đó với người khác, thì ta cần sử dụng `git revert`. Xem thử cách thức nó hoạt động nào"],afterMarkdowns:["Lạ nhỉ, một commit mới được thả vào bên dưới commit mà ta muốn hoàn tác. Đó là bởi vì commit mới `C2'` này có chứa những *thay đổi* hoàn toàn ngược lại với những thay đổi trong commit `C2`.","","Dùng revert thì bạn có thể đẩy thay đổi mình lên và chia sẻ với người khác."],command:"git revert HEAD",beforeCommand:"git commit"}},{type:"ModalAlert",options:{markdowns:["Để hoàn thành cấp độ này, hoàn tác commit gần nhất trên cả `local` và `pushed`. Bạn sẽ hoàn tác tổng cộng 2 commit (một trên mỗi nhánh).","","Nhớ rằng `pushed` là nhánh từ xa và `local` là nhánh cục bộ -- như thế thì bạn sẽ chọn được phương án phù hợp."]}}]},sl_SI:{childViews:[{type:"ModalAlert",options:{markdowns:["## Revertanje Sprememb v Gitu","","Veliko načinov je, kako revertati (razveljaviti) spremembe v Gitu. In tako kot commitanje ima tudi revertanje sprememb v Gitu low-level komponente (stageanje posameznih datotek ali kosov) in high-level komponente (kako so spremembe dejansko povrnjene). Naša aplikacija se bo osredotočila na slednje.","","Obstajata dva glavna načina kako razveljaviti spremembe v Gitu -- prvi je uporaba `git reset` in drugi je uporaba `git revert`. V naslednjem dialogu si bomo pogledali oba pristopa.",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["## Git Reset","",'`git reset` povrne spremembe tako, da prestavi referenco brancha na starejši commit. Lahko si predstavljaš kot "pisanje zgodovine na novo"; `git reset` bo prestavil branch nazaj, kot da se commiti sploh niso zgodili.',"","Poglejmo kako to izgleda:"],afterMarkdowns:["Lepo! Git je premaknil main branch referenco nazaj na `C1`; sedaj je naš lokalen repozitorij v stanju, kot da se `C2` sploh ni nikoli zgodil."],command:"git reset HEAD~1",beforeCommand:"git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["## Git Revert","",'Medtem ko ponastavljanje z reset deluje super na lokalnih brancih na tvoji mašini, njegova metoda "prepisovanja zgodovina" ne deluje na remote brancih, ki jih uporabljajo drugi.',"","Če želimo ponastaviti spremembe in *deliti* te ponastavitve z drugimi, moramo uporabiti `git revert`. Poglejmo si to v praksi."],afterMarkdowns:["Čudno, nov commit se je naredil pod commitom, ki smo ga želeli reversati. To je zato, ker ta nov commit `C2'` uvede *spremembe* -- spremembe so pač v tem primeru točno nasprotne od `C2`.","","Z revertanjem lahko pushas in deliš svoje spremembe tudi z drugimi."],command:"git revert HEAD",beforeCommand:"git commit"}},{type:"ModalAlert",options:{markdowns:["Za dokončanje te stopnje, povrni oba zadnja commita, tako na `local` kot na `pushed` brancih. Skupno boš revertal dva commita (enega na branch).","","Upoštevaj, da je `pushed` oddaljen branch in `local` lokalen branch -- to bi ti moralo pomagati izbrati metodo."]}}]},pl:{childViews:[{type:"ModalAlert",options:{markdowns:["## Odwracanie zmian w Gicie","","Istnieje wiele sposobów na odwrócenie zmian w Gicie. Podobnie jak w przypadku commitowania, odwracanie zmian w Gicie ma zarówno komponent niskopoziomowy (zapisywanie stanów plików lub ich fragmentów), jak i wysokopoziomowy (sposób, w jaki zmiany są faktycznie odwracane). Nasza aplikacja skupi się na tym ostatnim.","","Istnieją dwa podstawowe sposoby na cofnięcie zmian w Gicie - jeden z nich to `git reset`, a drugi `git revert`. W następnym oknie przyjrzymy się każdemu z nich.",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["## Git Reset","",'`git reset` odwraca zmiany poprzez przesunięcie referencji gałęzi wstecz w czasie do starszego commita. Można myśleć o tym jako "przepisywaniu historii"; "resetowanie" spowoduje cofnięcie gałęzi, tak jakby commit nigdy nie został dodany.',"","Sprawdźmy, jak to działa:"],afterMarkdowns:["Nieźle! Git przeniósł referencję gałęzi `main` do `C1`; teraz nasze lokalne repozytorium jest w takim stanie, jakby commita `C2` nigdy nie było."],command:"git reset HEAD~1",beforeCommand:"git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["## Git Revert","",'Mimo że resetowanie działa świetnie w przypadku lokalnych gałęzi na twoim komputerze, jego metoda "przepisywania historii" nie działa dla gałęzi zdalnych, które są używane przez innych.',"","W celu odwrócenia zmian i *podzielenia się* nimi z innymi, musimy użyć `git revert`. Zobaczmy, jak to działa."],afterMarkdowns:["Dziwne, nowy commit spadł poniżej tego, który chcieliśmy odwrócić. To dlatego, że ten nowy commit `C2'` wprowadza *zmiany* -- akurat takie, które idealnie odwracają commit `C2`.","","Dzięki `git revert` możesz wypchnąć swoje zmiany, by podzielić się nimi z innymi."],command:"git revert HEAD",beforeCommand:"git commit"}}]},it_IT:{childViews:[{type:"ModalAlert",options:{markdowns:["## Annullare i cambiamenti in Git","","Esistono molti modi per annullare i cambiamenti in Git. Come la creazione di commit, anche l'annullamento in Git ha sia una componente di basso livello (tracciatura dei singoli file o blocchi) e uno di alto livello (come l'annullamento viene realmente eseguito). La nostra applicazione si concentrerà su quest'ultima.","","Ci sono due modi principali per annullare con Git -- uno è usare `git reset` e l'altro è `git revert`. Entreremo nel dettaglio per entrambi.",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["## Git Reset","",'`git reset` annulla le modifiche spostando il puntatore al ramo indietro nel tempo a un commit precedente. Puoi vederla come se stessi "riscrivendo la storia;" `git reset` torna al commit precedente come se il nuovo commit non fosse mai esistito.',"","Vediamone una rappresentazione:"],afterMarkdowns:["Grande! Git ha spostato il puntatore del ramo main the main sul commit `C1`; ora il nostro repository locale è come se non avesse mai avuto un commit `C2`."],command:"git reset HEAD~1",beforeCommand:"git commit"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["## Git Revert","",'Git reset funziona perfettamente in locale sul proprio computer, ma la funzione di "riscrivere la storia" non va d\'accordo con i rami salvati in remoto utilizzati da altri colleghi.',"","Per fare in modo di annullare e *condividere* con gli altri le modifiche annullate, dobbiamo usare `git revert`. Vediamolo in azione."],afterMarkdowns:["Strano, un nuovo commit è stato creato sotto il commit che volevamo annullare. Questo perché il nuovo commit `C2'` porta *cambiamenti* -- per l'esattezza i cambiamenti sono quelli che annullano il commit `C2`.","","Con git revert, aggiungi i cambiamenti che possono essere poi condivisi con altri."],command:"git revert HEAD",beforeCommand:"git commit"}},{type:"ModalAlert",options:{markdowns:["Per completare questo livello, annulla i commit più recenti sia in `local` che in `pushed`. Alla fine annullerai due commit in totale (uno per ramo).","","Tieni presente che `pushed` è un ramo remoto e `local` è un ramo locale -- questo dovrebbe aiutarti a scegliere quale metodo usare."]}}]}}}},{}],137:[function(e,t,o){o.level={compareOnlyMainHashAgnostic:!0,disabledMap:{"git revert":!0,"git cherry-pick":!0},goalTreeString:"%7B%22branches%22%3A%7B%22main%22%3A%7B%22target%22%3A%22C7%27%22%2C%22id%22%3A%22main%22%7D%2C%22bugFix%22%3A%7B%22target%22%3A%22C3%27%22%2C%22id%22%3A%22bugFix%22%7D%2C%22side%22%3A%7B%22target%22%3A%22C6%27%22%2C%22id%22%3A%22side%22%7D%2C%22another%22%3A%7B%22target%22%3A%22C7%27%22%2C%22id%22%3A%22another%22%7D%7D%2C%22commits%22%3A%7B%22C0%22%3A%7B%22parents%22%3A%5B%5D%2C%22id%22%3A%22C0%22%2C%22rootCommit%22%3Atrue%7D%2C%22C1%22%3A%7B%22parents%22%3A%5B%22C0%22%5D%2C%22id%22%3A%22C1%22%7D%2C%22C2%22%3A%7B%22parents%22%3A%5B%22C1%22%5D%2C%22id%22%3A%22C2%22%7D%2C%22C3%22%3A%7B%22parents%22%3A%5B%22C1%22%5D%2C%22id%22%3A%22C3%22%7D%2C%22C4%22%3A%7B%22parents%22%3A%5B%22C0%22%5D%2C%22id%22%3A%22C4%22%7D%2C%22C5%22%3A%7B%22parents%22%3A%5B%22C4%22%5D%2C%22id%22%3A%22C5%22%7D%2C%22C6%22%3A%7B%22parents%22%3A%5B%22C5%22%5D%2C%22id%22%3A%22C6%22%7D%2C%22C7%22%3A%7B%22parents%22%3A%5B%22C5%22%5D%2C%22id%22%3A%22C7%22%7D%2C%22C3%27%22%3A%7B%22parents%22%3A%5B%22C2%22%5D%2C%22id%22%3A%22C3%27%22%7D%2C%22C4%27%22%3A%7B%22parents%22%3A%5B%22C3%27%22%5D%2C%22id%22%3A%22C4%27%22%7D%2C%22C5%27%22%3A%7B%22parents%22%3A%5B%22C4%27%22%5D%2C%22id%22%3A%22C5%27%22%7D%2C%22C6%27%22%3A%7B%22parents%22%3A%5B%22C5%27%22%5D%2C%22id%22%3A%22C6%27%22%7D%2C%22C7%27%22%3A%7B%22parents%22%3A%5B%22C6%27%22%5D%2C%22id%22%3A%22C7%27%22%7D%7D%2C%22HEAD%22%3A%7B%22target%22%3A%22main%22%2C%22id%22%3A%22HEAD%22%7D%7D",solutionCommand:"git rebase main bugFix;git rebase bugFix side;git rebase side another;git rebase another main",startTree:'{"branches":{"main":{"target":"C2","id":"main"},"bugFix":{"target":"C3","id":"bugFix"},"side":{"target":"C6","id":"side"},"another":{"target":"C7","id":"another"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C1"],"id":"C3"},"C4":{"parents":["C0"],"id":"C4"},"C5":{"parents":["C4"],"id":"C5"},"C6":{"parents":["C5"],"id":"C6"},"C7":{"parents":["C5"],"id":"C7"}},"HEAD":{"target":"main","id":"HEAD"}}',name:{en_US:"Rebasing over 9000 times",de_DE:"10000 Rebases unter dem `HEAD`",es_AR:"Rebaseando más de 9000 veces",es_MX:"Rebaseando más de 8000... veces",es_ES:"Rebaseando más de 9000 veces",pt_BR:"Fazendo mais de 9000 rebases",gl:"Facendo máis de 9000 rebases",fr_FR:"Rebaser plus de 1000 fois",ko:"9천번이 넘는 리베이스",ja:"9000回以上のrebase",zh_CN:"多次 Rebase",zh_TW:"N次Rebase",ru_RU:"Rebase over 9000 раз",uk:"Rebase over 9000 разів",vi:"Rebase hơn 9000 lần",sl_SI:"Več kot 9000 Rebaseov",it_IT:"Rebasing livello 8000",pl:"Rebase ponad 8000 razy"},hint:{en_US:"Remember, the most efficient way might be to only update main at the end...",de_DE:"Nicht vergessen: Nur den main zu aktualisieren könnte die effizienteste Möglichkeit sein ...",es_AR:"Acordate, la manera más eficiente podría ser actualizar main sólo al final...",es_MX:"Recuerda, la manera más eficiente podría ser actualizar main hasta el final...",es_ES:"Recuerda, la manera más eficiente podría ser actualizar main sólo al final...",pt_BR:"Lembre-se, a forma mais eficiente pode ser atualizar o main por último...",gl:"Lembra, a forma máis eficiente pode ser actualizar a rama main ó final...",fr_FR:"Rappelez-vous, la façon la plus efficace peut être de mettre à jour main seulement à la fin...",ja:"最も効率的なやり方はmainを最後に更新するだけかもしれない・・・",ko:"아마도 main을 마지막에 업데이트하는 것이 가장 효율적인 방법일 것입니다...",zh_CN:"记住,最后更新 main 分支可能是最高效的方法……",zh_TW:"要記住喔! 把 main branch 留到最後更新可能是最有效率的方法。",ru_RU:"Не забудь, что лучше всего сдвинуть мастер в самом конце...",uk:"Не забувай, що краще всього буде перемістити main в самому кінці... ",vi:"Hãy nhớ rằng, cách tốt nhất có thể là cập nhật nhánh `main` sau cùng...",sl_SI:"Pomni, morda je najbolj učinkovit način posodabljanje masterja samo na koncu ...",it_IT:"Ricorda, il modo migliore potrebbe essere di aggiornare il main alla fine...",pl:"Pamiętaj, że najskuteczniejszym sposobem może być aktualizacja `main` dopiero na samym końcu..."},startDialog:{en_US:{childViews:[{type:"ModalAlert",options:{markdowns:["### Rebasing Multiple Branches","","Man, we have a lot of branches going on here! Let's rebase all the work from these branches onto main.","","Upper management is making this a bit trickier though -- they want the commits to all be in sequential order. So this means that our final tree should have `C7'` at the bottom, `C6'` above that, and so on, all in order.","","If you mess up along the way, feel free to use `reset` to start over again. Be sure to check out our solution and see if you can do it in fewer commands!"]}}]},es_AR:{childViews:[{type:"ModalAlert",options:{markdowns:["### Rebaseando múltiples ramas","","Che, ¡hay un montón de ramas acá! Rebaseemos todo el trabajo de esas ramas sobre main.","","La gente de administración nos está haciendo las cosas un poco complicadas, igual -- quieren que nuestros commits estén todos en orden secuencial. Esto significa que nuestro árbol final tendría que tener `C7` al final, `C6` antes de ese, y así siguiendo, todos en orden.","","Si hacés líos en el camino, sentite libre de usar `reset` para empezar de nuevo. ¡Asegurate de verificar tu solución y ver si podés hacerla en alguna cantidad menor de commandos!"]}}]},es_MX:{childViews:[{type:"ModalAlert",options:{markdowns:["### Rebaseando múltiples ramas","","Mira eso, ¡hay un montón de ramas aquí! Hagamos rebase de todo el trabajo de esas ramas hacia main.","","La alta dirección nos está haciendo las cosas un poco más complicadas -- quieren que nuestros commits estén todos en orden secuencial. Esto significa que nuestro árbol final tendría que tener `C7'` al final, `C6'` antes de ese, y así, todos en orden.","","Si te revuelves durante el camino, siéntete libre de usar `reset` para empezar de nuevo. ¡Asegúrate de verificar nuestra solución y ver si puedes lograrlo en un número menor de comandos!"]}}]},es_ES:{childViews:[{type:"ModalAlert",options:{markdowns:["### Rebaseando múltiples ramas","","Fíjate, ¡hay un montón de ramas aquí! Rebaseemos todo el trabajo de esas ramas sobre main.","","La gente de administración nos está haciendo las cosas un poco complicadas, igual -- quieren que nuestros commits estén todos en orden secuencial. Esto significa que nuestro árbol final tendría que tener `C7` al final, `C6` antes de ese, y así siguiendo, todos en orden.","","Si te haces un lío durante el proceso, siéntete libre de usar `reset` para empezar de nuevo. ¡Asegúrate de verificar tu solución y ver si puedes realizarla en un número inferior de comandos!"]}}]},pt_BR:{childViews:[{type:"ModalAlert",options:{markdowns:["### Fazendo rebase em múltiplos ramos","","Cara, temos um monte de ramos aqui! Vamos fazer um rebase de todo o trabalho contido nesses ramos para o main.","","No entanto, a cúpula da administração está tornando as coisas mais difíceis -- eles querem que os commits estejam todos em ordem sequencial. Isso significa que a nossa árvore final precisa ter o `C7'` por último, `C6'` acima disso, e assim por diante, tudo ordenado.","","Se você fizer besteira, sinta-se livre para usar o comando `reset` para recomeçar do zero. Depois lembre de olhar nossa solução do gabarito para ver se consegue resolver a tarefa usando menos comandos!"]}}]},gl:{childViews:[{type:"ModalAlert",options:{markdowns:["### Fazendo rebase en múltiples ramas","","Neno, temos unha chea de ramas aquí! Imos facer rebase de todo o traballo contido nesas ramas para a main.","","A xente de administración estanos a facer as cousas complicadas, igual eles queren que os commits estén todos en orde secuencial. Isto significa que a nosa árbore final precisa ter `C7'` de último, `C6'` inda por riba, está por adiante, todo ordeado.","","Se te fas un lio polo camiño, síntete ceibe para usar o comando `reset` para comezar de cero outra vez. Despois lembra ollar a nosa solución para ver se consegues resolver a tarefa usando menos comandos!"]}}]},fr_FR:{childViews:[{type:"ModalAlert",options:{markdowns:["### Rebaser plusieurs branches","","Dis-donc, nous avons beaucoup de branches par ici ! Rebasons tout le travail de ces branches dans main.","","Les patrons rendent cela encore plus compliqué -- ils veulent que les commits soient faits de manière séquentielle. Cela signifie donc que dans votre arbre final `C7'` est tout en bas, `C6'` juste au-dessus, et ainsi de suite, dans cet ordre.","","Si vous faites une erreur en cours de route, n'hésitez pas à utiliser `reset` pour recommencer. Pensez à comparer votre solution à la nôtre et voyez si vous pouvez le faire en moins de commandes !"]}}]},de_DE:{childViews:[{type:"ModalAlert",options:{markdowns:["### Mehrere Branches rebasen","","Wow, wir haben hier ja eine Menge Branches! Lass uns mal die ganze Arbeit, die in diesen Branches steckt, auf den `main` packen, um sie auf Stand zu bringen.","","Die Führungsetage macht die Sache allerdings etwas trickreicher -- sie möchte, dass alle Commits in aufsteigender Reihenfolge geordnet sind. Das heißt unser fertiger Baum sollte `C7` ganz unten haben, darüber `C6` und so weiter und so fort.","","Wenn du irgendwo einen Fehler machst, benütze ruhig `reset` um wieder von vorne anzufangen oder `undo` um einen Schritt zurückzugehen. Schau dir die Lösung an und versuche es in weniger Schritten hinzubekommen."]}}]},ja:{childViews:[{type:"ModalAlert",options:{markdowns:["### 複数のブランチをリベースする","","さあ、いくつものブランチが出てきます。このブランチたち全てをmainブランチにリベースしましょう。","","おエライさん方が今回の仕事を少しトリッキーにしてくれました -- コミットはすべて一列の連続した状態にしてほしいそうです。つまり私たちが作るリポジトリの最終的なツリーの状態は、`C7'`が最後に来て、`C6'`がその一つ上に来て、、と順に積み重なるイメージです。","","試行錯誤してツリーが汚くなってきたら、`reset`コマンドを使ってツリーの状態を初期化してください。模範解答をチェックして、それよりも簡単なコマンドで済ませられるかどうかを考えるのも忘れずに!"]}}]},zh_CN:{childViews:[{type:"ModalAlert",options:{markdowns:["### 多分支 rebase","","哇,现在我们这里出现了很多分支呢!让我们把所有这些分支上所做的工作都通过 rebase 合并到 main 分支上吧。","","但是你的领导给你提了点要求 —— 他们希望得到有序的提交历史,也就是我们最终的结果应该是 `C6'` 在 `C7'` 上面, `C5'` 在 `C6'` 上面,依此类推。","","即使你搞砸了也没关系,用 `reset` 命令就可以重新开始了。记得看看我们提供的答案,看你能否使用更少的命令来完成任务!"]}}]},zh_TW:{childViews:[{type:"ModalAlert",options:{markdowns:["### rebase 多個 branch","","嗨!現在我們有很多 branch 了啦!讓我們做一下 rebase,將這些分支接到 main branch 上吧。","","但是你的主管找了點麻煩,他們希望得到有序的 commit history,也就是我們最終的結果是 `C7'` 在最下面,`C6'` 在它上面,以此類推。","","假如你搞砸了,沒有關係啦!你用 `reset` 就可以重新開始!記得看看我們提供的答案,看你是否能夠使用更少的指令完成這一關!"]}}]},ko:{childViews:[{type:"ModalAlert",options:{markdowns:["### 여러 브랜치를 리베이스(rebase)하기 ","","음, 여기 꽤 여러개의 브랜치가 있습니다! 이 브랜치들의 모든 작업내역을 `main` 브랜치에 리베이스 해볼까요?","","윗선에서 일을 복잡하게 만드네요 -- 그 분들이 이 모든 커밋들을 순서에 맞게 정렬하라고 합니다. 그럼 결국 우리의 최종 목표 트리는 제일 아래에 `C7'` 커밋, 그 위에 `C6'` 커밋, 또 그 위에 순서대로 보여합니다.","","만일 작업중에 내용이 꼬인다면, `reset`이라고 쳐서 처음부터 다시 시작할 수 있습니다. 모범 답안을 확인해 보시고, 혹시 더 적은 수의 커맨드로 해결할 수 있는지 알아보세요!"]}}]},ru_RU:{childViews:[{type:"ModalAlert",options:{markdowns:["### Rebase на нескольких ветках","","У нас тут куча веток! Было бы круто перенести все изменения из них в мастер.","","Но начальство усложняет нашу задачу тем, что желает видеть все коммиты по порядку. Так что коммит `С7'` должен идти после коммита `С6'` и так далее.","","Если что-то пойдёт не так – не надо стесняться использовать `reset`, чтобы начать всё с чистого листа. Постарайся сделать как можно меньше манипуляций!"]}}]},uk:{childViews:[{type:"ModalAlert",options:{markdowns:["### Ребейсимо кілька гілок","","В нас тут до біса гілок! Перенесімо всі зміни з різних гілок в main.","","Але вище керівництво нам не полегшує життя -- вони хочуть, щоб всі коміти були впорядковані. Це означає, що в результаті коміт `C7'` має бути з самого низу, `C6'` трохи вище, і так далі, все за порядком.","","Якщо ти щось зробиш не так, сміливо використовуй `reset` щоб почати спочатку. Подивись на наш розв’язок і подумай, чи ти можеш обійтись меншою кількістю команд!"]}}]},vi:{childViews:[{type:"ModalAlert",options:{markdowns:["### Rebase nhiều nhánh","","Giời ạ, sao mà nhiều nhánh thế không biết! Chuyển hết chúng vào `main` thôi.","","Nhưng mà cha quản lý lại muốn oái oăm hơn cơ -- hắn muốn tất cả commit xếp thẳng hàng. Nghĩa là cây lịch sử của ta sẽ có `C7'` ở cuối, phía trên là `C6'`, và cứ thế theo đúng thứ tự.","","Nếu mà nhỡ may bạn làm nhầm thì có thể dùng lệnh `reset` để bắt đầu lại. Hãy nhớ đối chiếu với đáp án của chúng tôi xem bạn có thể hoàn thành với ít câu lệnh hơn không!"]}}]},sl_SI:{childViews:[{type:"ModalAlert",options:{markdowns:["### Rebasing Večih Branchev","","Uf, tu imamo pa res veliko branchev! Pojdimo in rebaseajmo vse delo iz teh branchev na main.","","Toda vodstvo se je odločilo, da le ne bo tako preprosto -- žeijo da so vsi commiti v zaporednem vrstnem redu. To pomeni, da bo naše ciljno drevo moralo imeti `C7'` na dnu, `C6'` nad njim, in tako dalje po vrsti.","","Če med reševanjem zamočiš, preprosto uporabi `reset`, da začneš znova. Poglej tudi našo rešitev in preveri, če lahko stopnjo rešiš še z manj ukazi!"]}}]},pl:{childViews:[{type:"ModalAlert",options:{markdowns:["### Rebase wielu gałęzi","","Człowieku, ależ tu pełno gałęzi! Przenieśmy wszystkie prace z tych gałęzi na `main`.","","Kierownictwo trochę utrudnia sprawę -- chcą, aby wszystkie commity były w odpowiedniej kolejności. Oznacza to, że nasze końcowe drzewo powinno mieć `C7'` na dole, `C6'` powyżej i tak dalej.","","Jeśli po drodze namieszasz, nie krępuj się użyć `reset`, aby zacząć od nowa. Przeanalizuj nasze rozwiązanie i sprawdź, czy dasz radę to zrobić, używając mniejszej liczby poleceń!"]}}]},it_IT:{childViews:[{type:"ModalAlert",options:{markdowns:["### Fare rebase con più rami","","Hey, qui abbiamo un bel po' di rami! Facciamo un po' di rebase di questi rami nel main.","","I piani alti ci stanno rendendo la vita complicata -- vogliono i commit tutti in ordine progressivo. Questo significa che alla fine il nostro albero avrà `C7'` come ultimo commit, `C6'` sopra di esso, e così via, tutto in ordine.","","Se ti smarrisci lungo la via, usa `reset` senza problemi per ripartire da capo. Assicurati di raggiungere l'obiettivo e cerca di farlo con il minor numero di comandi!"]}}]}}}},{}],138:[function(e,t,o){o.level={compareAllBranchesHashAgnostic:!0,disabledMap:{"git revert":!0},goalTreeString:"%7B%22branches%22%3A%7B%22main%22%3A%7B%22target%22%3A%22C5%22%2C%22id%22%3A%22main%22%7D%2C%22one%22%3A%7B%22target%22%3A%22C2%27%22%2C%22id%22%3A%22one%22%7D%2C%22two%22%3A%7B%22target%22%3A%22C2%27%27%22%2C%22id%22%3A%22two%22%7D%2C%22three%22%3A%7B%22target%22%3A%22C2%22%2C%22id%22%3A%22three%22%7D%7D%2C%22commits%22%3A%7B%22C0%22%3A%7B%22parents%22%3A%5B%5D%2C%22id%22%3A%22C0%22%2C%22rootCommit%22%3Atrue%7D%2C%22C1%22%3A%7B%22parents%22%3A%5B%22C0%22%5D%2C%22id%22%3A%22C1%22%7D%2C%22C2%22%3A%7B%22parents%22%3A%5B%22C1%22%5D%2C%22id%22%3A%22C2%22%7D%2C%22C3%22%3A%7B%22parents%22%3A%5B%22C2%22%5D%2C%22id%22%3A%22C3%22%7D%2C%22C4%22%3A%7B%22parents%22%3A%5B%22C3%22%5D%2C%22id%22%3A%22C4%22%7D%2C%22C5%22%3A%7B%22parents%22%3A%5B%22C4%22%5D%2C%22id%22%3A%22C5%22%7D%2C%22C4%27%22%3A%7B%22parents%22%3A%5B%22C1%22%5D%2C%22id%22%3A%22C4%27%22%7D%2C%22C3%27%22%3A%7B%22parents%22%3A%5B%22C4%27%22%5D%2C%22id%22%3A%22C3%27%22%7D%2C%22C2%27%22%3A%7B%22parents%22%3A%5B%22C3%27%22%5D%2C%22id%22%3A%22C2%27%22%7D%2C%22C5%27%22%3A%7B%22parents%22%3A%5B%22C1%22%5D%2C%22id%22%3A%22C5%27%22%7D%2C%22C4%27%27%22%3A%7B%22parents%22%3A%5B%22C5%27%22%5D%2C%22id%22%3A%22C4%27%27%22%7D%2C%22C3%27%27%22%3A%7B%22parents%22%3A%5B%22C4%27%27%22%5D%2C%22id%22%3A%22C3%27%27%22%7D%2C%22C2%27%27%22%3A%7B%22parents%22%3A%5B%22C3%27%27%22%5D%2C%22id%22%3A%22C2%27%27%22%7D%7D%2C%22HEAD%22%3A%7B%22target%22%3A%22two%22%2C%22id%22%3A%22HEAD%22%7D%7D",solutionCommand:"git checkout one; git cherry-pick C4 C3 C2; git checkout two; git cherry-pick C5 C4 C3 C2; git branch -f three C2",startTree:'{"branches":{"main":{"target":"C5","id":"main"},"one":{"target":"C1","id":"one"},"two":{"target":"C1","id":"two"},"three":{"target":"C1","id":"three"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C2"],"id":"C3"},"C4":{"parents":["C3"],"id":"C4"},"C5":{"parents":["C4"],"id":"C5"}},"HEAD":{"target":"main","id":"HEAD"}}',name:{ko:"브랜치 스파게티",en_US:"Branch Spaghetti",fr_FR:"Branche spaghetti",de_DE:"Branch-Spaghetti",es_AR:"Ensalada de branches",es_MX:"Espagueti de ramas",es_ES:"Ensalada de ramas",pt_BR:"Espaguete de ramos",gl:"Espaguete de ramas",ja:"ブランチスパゲッティ",zh_CN:"纠缠不清的分支",zh_TW:"branch 漿糊",ru_RU:"Спутанные ветки",uk:"Макарони з гілок",vi:"Nhánh rối như canh hẹ",sl_SI:"Špageti iz Branchev",it_IT:"Rami spaghettificati",pl:"Spaghetti gałęzi"},hint:{en_US:"Make sure to do everything in the proper order! Branch one first, then two, then three",fr_FR:"Faites attention à tout faire dans le bon ordre ! La première branche d'abord, puis la seconde, puis la troisième",de_DE:"Stelle sicher, dass du alles in der richtigen Reihenfolge machst! Branche erst one, dann two, dann three.",es_AR:"¡Asegurate de hacer las cosas en el orden correcto! Brancheá `one` primero, después `two`, y después `three`.",es_MX:"¡Asegúrate de hacer las cosas en el orden correcto! Primero la rama uno, después la dos, y después la tres.",es_ES:"¡Asegúrate de hacer las cosas en el orden correcto! Crea primero la rama `one`, después `two`, y después `three`.",pt_BR:"Certifique-se de fazer tudo na ordem correta! Crie o ramo `one` primeiro, depois `two`, depois `three`.",gl:"¡Afiánzate de facer as cousas no orde correcto! Crea ramas `one` de primeiras, e logo `two` e `three`.",ja:"全て正しい順番で処理すること!oneが最初で、次がtwo、最後にthreeを片付ける。",ko:"이 문제를 해결하는 방법은 여러가지가 있습니다! 체리픽(cherry-pick)이 가장 쉽지만 오래걸리는 방법이고, 리베이스(rebase -i)가 빠른 방법입니다",zh_CN:"确保你是按照正确的顺序来操作!先操作分支 `one`, 然后 `two`, 最后才是 `three`",zh_TW:"確認你是按照正確的順序來操作!先操作 branch `one`, 然後 `two`, 最後才是 `three`",ru_RU:"Убедись, что у нас всё по порядку! Сначала ветка `one`, потом `two` и только потом `three`",uk:"Переконайся, що все йде за порядком! Спершу гілка `one`, потім `two`, і тільки потім `three`",vi:"Hãy chắc chắn rằng bạn làm đúng thứ tự! Nhánh `one` trước, rồi `two`, rồi mới đến `three`",sl_SI:"Glej da boš vse opravil v pravilnem vrstnem redu! Najprej branch ena, nato pa dva in tri.",it_IT:"Assicurati di fare tutto nel giusto ordine! Prima il primo ramo, poi il secondo, poi il terzo",pl:"Upewnij się, że robisz wszystko w odpowiedniej kolejności! Gałąź pierwsza, potem druga, potem trzecia."},startDialog:{en_US:{childViews:[{type:"ModalAlert",options:{markdowns:["## Branch Spaghetti","","WOAHHHhhh Nelly! We have quite the goal to reach in this level.","","Here we have `main` that is a few commits ahead of branches `one` `two` and `three`. For whatever reason, we need to update these three other branches with modified versions of the last few commits on main.","","Branch `one` needs a re-ordering of those commits and an exclusion/drop of `C5`. Branch `two` just needs a pure reordering of the commits, and `three` only needs one commit transferred!","","We will let you figure out how to solve this one -- make sure to check out our solution afterwards with `show solution`. "]}}]},fr_FR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Branche spaghetti","","WOAHHHhhh ! Nous avons pas mal d'objectifs dans ce niveau.","","Actuellement nous avons `main` qui se situe quelques commits en avance par rapport aux branches `one` `two` et `three`. Pour une raison quelconque, nous avons besoin de mettre ces trois branches à jour avec les modifications des derniers commits sur main.","","La branche `one` a besoin d'une réorganisation et de la suppression de `C5`. `two` doit simplement être réordonnée, et `three` ne nécessite qu'un commit !","","Nous vous laissons imaginer la solution pour ce niveau; comparez avec notre solution après-coup avec la commande `show solution`. "]}}]},es_AR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Ensalada de branches","","¡WOAHHHhhh Nelly! Tenemos un _pequeño_ objetivo al que llegar en este nivel.","","Tenemos un `main` que está algunos commits adelante de `one`, `two` y `three`. Por alguna razón, necesitamos actualizar esas tres ramas con versiones modificadas de los últimos commits de main.","","La rama `one` necesita reordenarse, y eliminar `C5`. `two` necesita sólo reordenamiento, y `three` ¡sólo necesita un commit!","","Te vamos a dejar darte cuenta cómo resolver este -- asegurate de mirar la solución, después, usando `show solution`. "]}}]},es_MX:{childViews:[{type:"ModalAlert",options:{markdowns:["## Espagueti de ramas","","¡Oh vaya! Tenemos un _pequeño_ objetivo al que llegar en este nivel.","","La rama `main` se encuentra algunos commits por delante de las ramas `one`, `two` y `three`. Por alguna razón, necesitamos actualizar esas tres ramas con versiones modificadas de los últimos commits de main.","","La rama `one` necesita esos commits reordenados, y eliminar/excluir a `C5`. La rama `two` sólo necesita reordenarlos, y `three` ¡sólo necesita avanzar un commit!","","Vamos a dejar que averigues cómo resolver este -- asegúrate de revisar nuestra solución después, usando `show solution`. "]}}]},es_ES:{childViews:[{type:"ModalAlert",options:{markdowns:["## Ensalada de ramas","","¡Vaya, vaya! Tenemos un _pequeño_ objetivo al que llegar en este nivel.","","La rama `main` se encuentra algunos commits por delante de `one`, `two` y `three`. Por alguna razón, necesitamos actualizar esas tres ramas con versiones modificadas de los últimos commits de main.","","La rama `one` necesita reordenarse, y eliminar `C5`. `two` necesita sólo reordenamiento, y `three` ¡sólo necesita un commit!","","Vamos a dejar que intentes resolver este -- asegúrate de mirar la solución, después, usando `show solution`. "]}}]},pt_BR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Espaguete de ramos","","Uhuuuuu Nelly! Temos um belo de um objetivo para alcançar neste nível.","","Temos aqui um `main` que está alguns commits atrás dos ramos `one`, `two` e `three`. Seja lá por qual razão, precisamos atualizar esses três outros ramos com versões modificadas dos últimos commits do main.","","O ramo `one` precisa de uma reordenação e da exclusão do `C5`. O `two` precisa apenas de reordenação. O `three` precisa de um único commit!","","Vamos deixar você descobrir como resolver esta tarefa -- mas não deixe de ver a nossa solução depois com o comando `show solution`. "]}}]},gl:{childViews:[{type:"ModalAlert",options:{markdowns:["## Espaguete de ramas","","¡Íscalle lura! Temos un _pequeno_ obxectivo que acadar neste nivel.","","Temos aquí un `main` que está algúns commits por detrás das ramas `one`, `two` e `three`. Por algunha razón, precisamos atualizar esas tres ramas con versións modificadas dos últimos commits de main.","","A rama `one` precisa de unha reordenación, e votar fora a `C5`. O `two` precisa apenas de reordenacións. O `three` precisa dun único commit!","","Ímoste deixar resolver o problema por ti mesmo -- pero non deixes de ver a nosa solución, para eso escrebe `show solution`. "]}}]},de_DE:{childViews:[{type:"ModalAlert",options:{markdowns:["## Branch-Spaghetti","","Puh! Wir haben ein ganz schön schweres Ziel für dieses Level.","","Wir haben hier einen `main`, der ein paar Commits weiter ist als die Branche `one`, `two` und `three`. Aus welchem Grund auch immer müssen wir diese drei anderen Branches mit modifizierten Versionen der paar letzten Commits von `main` aktualisieren.","","Branch `one` benötigt eine Umsortierung und `C5` muss gelöscht werden. `two` muss nur umsortiert werden und `three` braucht nur einen Commit!","","Ich lass dich diese Aufgabe selbst lösen -- schau dir hinterher auf jeden Fall die Lösung mit `show solution` an."]}}]},ja:{childViews:[{type:"ModalAlert",options:{markdowns:["## ブランチスパゲッティ","","なんということでしょう。今回のレベルクリアのために、やることがたくさんあります。","","いま`main`が指しているコミットの数個前のコミットに、ブランチ`one`、`two`それから`three`があります。何か事情があって、これらの3つのブランチをmainが指している最新の状態に更新したいケースを考えます。","","ブランチ`one`に対しては、順序の変更と`C5`の削除が必要です。`two`では順序の変更のみ、`three`に対しては1回だけコミットすればOKです。","","`show solution`コマンドで模範解答を確認できますから、こちらも利用してください。 "]}}]},zh_CN:{childViews:[{type:"ModalAlert",options:{markdowns:["## 纠缠不清的分支","","哇塞大神!这关我们要来点不同的!","","现在我们的 `main` 分支是比 `one`、`two` 和 `three` 要多几个提交。出于某种原因,我们需要把 `main` 分支上最近的几次提交做不同的调整后,分别添加到各个的分支上。","","`one` 需要重新排序并删除 `C5`,`two` 仅需要重排排序,而 `three` 只需要提交一次。","","慢慢来,你会找到答案的 —— 记得通关之后用 `show solution` 看看我们的答案哦。"]}}]},zh_TW:{childViews:[{type:"ModalAlert",options:{markdowns:["## Branch Spaghetti","","哇塞大神!這關我們要來點不同的!","","現在我們的 `main` branch 是比 `one` `two` 和 `three` 這三個 branch 多了幾個 commit。由於某種原因,我們需要將 main 所新增的幾個 commit 套用到其它三個 branch 上面。","","`one` branch 需要重新排序和取消 `C5` 這一個 commit, `two` 需要完全重排,而 `three` 只需要再一個 commit。","","我們會讓你知道如何解決這個問題,之後請記得用 `show solution` 看看我們的答案喔。"]}}]},ko:{childViews:[{type:"ModalAlert",options:{markdowns:["## 브랜치 스파게티","","음, 이번에는 만만치 않습니다!","","여기 `main` 브랜치의 몇 번 이전 커밋에 `one`, `two`,`three` 총 3개의 브랜치가 있습니다. 어떤 이유인지는 몰라도, main의 최근 커밋 몇 개를 나머지 세 개의 브랜치에 반영하려고 합니다.","","`one` 브랜치는 순서를 바꾸고 `C5`커밋을 삭제하고, `two`브랜치는 순서만 바꾸며, `three`브랜치는 하나의 커밋만 가져옵시다!","","자유롭게 이 문제를 풀어보시고 나서 `show solution`명령어로 모범 답안을 확인해보세요."]}}]},ru_RU:{childViews:[{type:"ModalAlert",options:{markdowns:["## Спутанные ветки","","УОУ! В этом уровне придётся попотеть!","","У нас тут по несколько коммитов в ветках `one`, `two` и `three`. Не важно почему, но нам надо видоизменить эти три ветки при помощи более поздних коммитов из ветки `main`.","","Ветка `one` нуждается в изменении порядка и удалении `C5`. `two` требует полного перемешивания, а `three` хочет получить только один коммит","","Как пройти этот уровень – решать тебе, а как найдёшь решение – сравни его с нашим при помощи `show solution`."]}}]},uk:{childViews:[{type:"ModalAlert",options:{markdowns:["## Макарони з гілок","","Ооо Неля! Ну й завданнячко.","","Ми маємо гілку `main`, яка на кілька комітів попереду гілок `one`, `two` та `three`. З незрозумілих причин, нам потрібно оновити ці гілки більш пізніми змінами з мастеру.","","Гілку `one` потрібно впорядкувати і видалити `C5`. Гілку `two` також потрібно впорядкувати, а в гілку `three` потрібно додати ще один коміт!","","Ми повністю покладаємось на тебе -- порівняй свій розв’зок з нашим, який можна подивитись командою `show solution`. "]}}]},vi:{childViews:[{type:"ModalAlert",options:{markdowns:["## Nhánh rối như canh hẹ","","Chààà, anh bạn! Thử thách lần này hơi khoai đây.","","Hiện tại thì nhánh `main` đang có trước vài commit so với các nhánh `one`, `two` và `three`. Vì một lý do nào đó, ta cần cập nhật những commit trên nhánh `main` lên các nhánh còn lại kèm với một vài điều chỉnh.","","Nhánh `one` cần sắp xếp lại commit và xóa commit `C5`, nhánh `two` chỉ cần sắp xếp commit, còn `three` thì cần chuyển đi một commit!","","Cố gắng động não tìm ra cách đi nhé -- khi bạn làm xong thì nhớ so sánh với đáp án của chúng tôi bằng lệnh `show solution`. "]}}]},sl_SI:{childViews:[{type:"ModalAlert",options:{markdowns:["## Špageti iz Branchev","","WOAHHHhhh Miško! Ta stopnja bo pa pravi izziv.","","Tu imamo `main`, ki je nekaj commitov pred branchi `one`, `two` in `three`. Iz neznanega razloga moramo posodobiti te tri druge branche z modificiranimi različicami zadnjih nekaj commitov na masterju.","","Branch `one` potrebuje prerazporeditev in izbris `C5`. `two` rabi samo prerazporeditev, `three` pa potrebuje samo en commit!","","Prepustili ti bomo, da sam ugotoviš, kako tole rešiti -- vseeno lahko na koncu preveriš našo rešitev s `show solution`. "]}}]},pl:{childViews:[{type:"ModalAlert",options:{markdowns:["## Spaghetti gałęzi","","Łałałiła! Na tym poziomie mamy poważny cel do osiągnięcia.","","Mamy tutaj gałąź `main`, która jest kilka commitów przed gałęziami `one`, `two` i `three`. Z jakiegoś powodu musimy zaktualizować te trzy inne gałęzie zmodyfikowanymi wersjami ostatnich kilku commitów na main.","","Gałąź `one` wymaga zmiany kolejności i usunięcia `C5`. `two` potrzebuje wyłącznie zmiany kolejności, a `three` potrzebuje tylko przeniesienia jednego commitu!","","Samodzielnie zastanów się, jak rozwiązać to zadanie -- po wykonaniu go koniecznie sprawdź nasze rozwiązanie za pomocą `show solution`. "]}}]},it_IT:{childViews:[{type:"ModalAlert",options:{markdowns:["## Rami spaghettificati","","Accidenti! C'è tanto da fare per raggiungere l'obiettivo questa volta.","","Qui abbiamo il `main` situato qualche commit più avanti rispetto ai rami `one` `two` e `three`. Per una qualche ragione, dobbiamo aggiungere questi altri tre rami con versioni aggiornate degli ultimi commit sul main.","","Il ramo `one` deve essere riordinato e il commit `C5` è da rimuovere. `two` deve essere riordinato, e `three` deve avere un solo commit!","","Tocca a te capire come farlo -- controlla la soluzione alla fine con il comando `show solution`. "]}}]}}}},{}],139:[function(e,t,o){o.level={goalTreeString:'{"branches":{"main":{"target":"C1","id":"main","remoteTrackingBranchID":"o/main"},"o/main":{"target":"C1","id":"o/main","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"main","id":"HEAD"},"originTree":{"branches":{"main":{"target":"C1","id":"main","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"main","id":"HEAD"}}}',solutionCommand:"git clone",name:{en_US:"Clone Intro",fr_FR:"Introduction à clone",de_DE:"Clone Einführung",ja:"Clone入門",es_AR:"Introducción a clone",es_MX:"Introducción a clone",es_ES:"Introducción a clone",pt_BR:"Introdução à clonagem",gl:"Introducción a clone",zh_CN:"Git Clone",zh_TW:"介紹 clone",ru_RU:"Введение в клонирование",ko:"Clone 소개",uk:"Знайомство з clone",vi:"Giới thiệu về clone",sl_SI:"Uvod v Git Clone",pl:"Wstęp do klonowania (clone)",it_IT:"Introduzione al clone"},hint:{en_US:"Just git clone!",fr_FR:"Simplement git clone !",de_DE:"Einfach git clone ausführen!",ja:"単にgit clone!",zh_CN:"只要 git clone 就可以了!",es_AR:"Simplemente hacé git clone!",es_MX:"Simplemente haz git clone!",es_ES:"¡Simplemente escribe `git clone`!",pt_BR:"Basta fazer um git clone!",gl:"¡Chega con facer git clone!",zh_TW:"只要 git clone 就好了",ru_RU:"Простой git clone!",ko:"그냥 git clone 하세요!",uk:"Просто git clone!",vi:"Đơn giản là git clone!",sl_SI:"Preprosto samo git clone!",pl:"Po prostu git clone!",it_IT:"Semplicemente git clone!"},startDialog:{en_US:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Remotes","","Remote repositories aren't actually that complicated. In today's world of cloud computing it's easy to think that there's a lot of magic behind git remotes, but they are actually just copies of your repository on another computer. You can typically talk to this other computer through the Internet, which allows you to transfer commits back and forth.","","That being said, remote repositories have a bunch of great properties:","","- First and foremost, remotes serve as a great backup! Local git repositories have the ability to restore files to a previous state (as you know), but all that information is stored locally. By having copies of your git repository on other computers, you can lose all your local data and still pick up where you left off.","","- More importantly, remotes make coding social! Now that a copy of your project is hosted elsewhere, your friends can contribute to your project (or pull in your latest changes) very easily.","","It's become very popular to use websites that visualize activity around remote repos (like [GitHub](https://github.com/)), but remote repositories _always_ serve as the underlying backbone for these tools. So it's important to understand them!"]}},{type:"ModalAlert",options:{markdowns:["## Our Command to create remotes","","Up until this point, Learn Git Branching has focused on teaching the basics of _local_ repository work (branching, merging, rebasing, etc). However now that we want to learn about remote repository work, we need a command to set up the environment for those lessons. `git clone` will be that command.","","Technically, `git clone` in the real world is the command you'll use to create _local_ copies of remote repositories (from github for example). We use this command a bit differently in Learn Git Branching though -- `git clone` actually makes a remote repository out of your local one. Sure it's technically the opposite meaning of the real command, but it helps build the connection between cloning and remote repository work, so let's just run with it for now.",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Lets start slow and just look at what a remote repository looks like (in our visualization).",""],afterMarkdowns:["There it is! Now we have a remote repository of our project. It looks pretty similar except for some visual changes to make the distinction apparent -- in later levels you'll get to see how we share work across these repositories."],command:"git clone",beforeCommand:""}},{type:"ModalAlert",options:{markdowns:["To finish this level, simply `git clone` your existing repository. The real learning will come in following lessons."]}}]},fr_FR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Remotes","","Les dépôts distants (remote repositories) ne sont pas si compliqués que ça. Dans l'ère actuelle du cloud computing il est facile de croire qu'il y a un peu de magie derrière les branches distantes, mais elles sont en fait juste des copies de votre dépôt local sur un autre ordinateur. Vous pouvez donc vous connecter à cet ordinateur par Internet, ce qui vous permet de transférer les commits en retard et en avance.","","Cela dit, les branches distantes ont plusieurs propriétés puissantes :","","- Tout d'abord, le dépôt distant sert de sauvegarde ! Le dépôt local de Git a la capacité de restaurer des fichiers à un état précédent (comme vous le savez), mais toutes les informations sont stockées localement. En ayant des copies de votre dépôt Git sur d'autres ordinateurs, vous pouvez perdre vos données et toujours repartir de là où vous en étiez resté.","","- Plus important encore, les dépôts distants sociabilisent le projet ! Maintenant qu'il est hébergé quelque part ailleurs, vos amis peuvent y contribuer facilement (ou récupérer vos derniers changements).","","Il est devenu courant de visualiser l'activité sur dépôt distant via des sites internet (comme [GitHub](https://github.com/)), mais les dépôts distants servent _toujours_ de colonne vertébrale à ce système. Il est donc important de les comprendre !"]}},{type:"ModalAlert",options:{markdowns:["## Les commandes pour créer des dépôts distants","","Jusqu'à maintenant, Learn Git Branching s'est surtout concentré sur l'apprentissage des bases du travail sur un dépôt _local_ (branch, merge, rebase, etc). Cependant maintenant que nous voulons savoir comment travailler sur les dépôts distants, nous avons besoin d'une commande pour l'environnement de ces leçons. `git clone` sera cette commande.","","Techniquement, `git clone` dans le monde réel sera la commande que vous utiliserez pour créer des copies _locales_ des dépôts distants (de github par exemple). Nous utilisons cette commande un peu différemment dans Learn Git Branching car `git clone` crée ici un dépôt distant à partir de votre dépôt local. Il est vrai qu'il s'agit donc du sens opposé de la commande originale, mais cela aide à construire la connexion entre le clonage et le travail sur le dépôt distant, travaillons donc avec cela pour l'instant.",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Commençons doucement et regardons à quoi ressemble un dépôt distant (dans notre visualisation).",""],afterMarkdowns:["Nous y sommes ! Maintenant nous avons un dépôt distant de notre projet. Cela ressemble fortement à ce que nous avons d'habitude, en dehors de quelques changements pour rendre compte des différences -- dans les niveaux suivants vous allez voir comment partager le travail entre ces dépôts."],command:"git clone",beforeCommand:""}},{type:"ModalAlert",options:{markdowns:["Pour finir ce niveau, faites simplement un `git clone` du dépôt existant. Le réel apprentissage arrivera dans les prochaines leçons."]}}]},es_AR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Remotes","","Los repositorios remotos no son _tan_ complicados. En el mundo actual de la computación en la nube es bastante facil pensar que hay un montón de magia detrás de los remotes de git, pero en realidad sólo son copias de tu repositorio en otra computadora. Típicamente vas a hablar con esta otra computadora a través de Internet, lo que permite transferir commits de un lado a otro.","","Habiendo dicho eso, los repositorios remotos tienen un par de propiedades copadas:","","- Primero y principal, los remotos ¡son un genial backup! Los repositorios locales de git tienen la habilidad de restaurar archivos a un estado previo (como ya sabés), pero toda esa información está almacenada localmente. Al tener copias de tu repositorio git en otras computadoras, podés perder todos tus datos locales y aún así retomar de donde habías dejado.","","- Más importante, ¡los remotos sociabilizan la programación! Ahora que hay una copia de tu proyecto hosteada en otro lugar, cualquiera puede contribuir a tu proyecto (o bajarse los últimos cambios) de un modo muy sencillo.","","Se volvió bastante popular el uso de sitios web que muestran la actividad de los repositorios (como [GitHub](https://github.com/)), pero esos repositorios remotos _siempre_ sirven como la base subyacente de esas herramientas. Así que ¡es importante entenderlos!"]}},{type:"ModalAlert",options:{markdowns:["## Nuestro comando para crear remotos","","Hasta este punto, Learn Git Branching se centró en enseñar las bases del trabajo _local_ con repositorios (branchear, mergear, rebasear, etc). Sin embargo, ahora que queremos aprender sobre el trabajo con repositorios remotos, necesitamos un comando para inicializar nuestro entorno para esas lecciones. Ese comando será `git clone`","","Técnicamente, `git clone` en el mundo real es el comando que usarías para crear copias _locales_ de un repositorio remoto (uno de GitHub, por ejemplo). Acá usamos este comando de un modo un tanto distinto, en cambio -- `git clone` va a crear un repositorio remoto a partir del tuyo local. Estamos de acuerdo en que es el significado técnicamente opuesto al del comando real, pero ayuda bastante a entender la conexión entre el clonado y el trabajo en un repositorio remoto, así que vamos a vivir con ello por ahora.",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Comencemos despacio y simplemente veamos cómo se ve un repositorio remoto en nuestra visualización.",""],afterMarkdowns:["¡Ahí está! Ahora tenemos un repositorio remoto de nuestro proyecto. Parece bastante similar, salvando algunos cambios visuales para hacer evidente la distinción -- en niveles posteriores vas a ver cómo compartir trabajo entre estos repositorios."],command:"git clone",beforeCommand:""}},{type:"ModalAlert",options:{markdowns:["Para completar este nivel, simplemente hacé `git clone` de tu repositorio existente. El verdadero aprendizaje viene en las próximas lecciones."]}}]},es_MX:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Remotes","","Los repositorios remotos no son realmente _tan_ complicados. En el mundo actual de la computación en la nube es facil pensar que hay un montón de magia detrás de los git remotes, pero en realidad sólo son copias de tu repositorio en otra computadora. Típicamente vas a comunicarte con esta otra computadora a través de Internet, lo que te permite transferir commits de un lado a otro.","","Habiendo dicho eso, los repositorios remotos tienen un montón de propiedades geniales:","","- Primero y principalmente, los remotes ¡funcionan como un respaldo increible! Los repositorios locales de git tienen la habilidad de restaurar archivos a un estado previo (como ya sabes), pero toda esa información se encuentra almacenada localmente. Al tener copias de tu repositorio git en otras computadoras, puedes perder todos tus datos locales y aún así retomar el trabajo en donde lo dejaste.","","- Más importante, ¡los remotes hacen más social la programación! Ahora que hay una copia de tu proyecto almacenada en otro lugar, tus amigos pueden contribuir a tu proyecto (u obtener los últimos cambios) de un modo muy sencillo.","","Se ha vuelto bastante popular el uso de sitios web que muestran la actividad de los repositorios (como [GitHub](https://github.com/)), pero los repositorios remotos _siempre_ sirven como la base subyacente de esas herramientas. Así que ¡es importante entenderlos!"]}},{type:"ModalAlert",options:{markdowns:["## Nuestro comando para crear remotes","","Hasta este punto, Learn Git Branching se ha centrado en enseñar las bases del trabajo con repositorios _locales_ (manejo de ramas, mezclar, rebasear, etc). Sin embargo, ahora que queremos aprender sobre el trabajo con repositorios remotos, necesitamos un comando para inicializar nuestro entorno para esas lecciones. Ese comando será `git clone`.","","Técnicamente, `git clone` en el mundo real es el comando que usarías para crear copias _locales_ de un repositorio remoto (de GitHub, por ejemplo). Nosotros, en Learn Git Branching, lo usamos de un modo un poco diferente -- `git clone` va a crear un repositorio remoto a partir del tuyo local. Estamos de acuerdo en que técnicamente es lo opuesto al comando real, pero ayuda bastante a entender la conexión entre el clonado y el trabajo en un repositorio remoto, así que vamos a seguir así por ahora.",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Comencemos despacio y simplemente veamos cómo se ve un repositorio remoto en nuestro caso.",""],afterMarkdowns:["¡Ahí está! Ahora tenemos un repositorio remoto de nuestro proyecto. Se ve bastante similar, excepto por algunos cambios visuales para hacer evidente la distinción -- en niveles posteriores vas a ver cómo compartir trabajo entre estos repositorios."],command:"git clone",beforeCommand:""}},{type:"ModalAlert",options:{markdowns:["Para completar este nivel, simplemente ejecuta `git clone` en tu repositorio existente. El verdadero aprendizaje viene en las próximas lecciones."]}}]},es_ES:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Remotes","","Los repositorios remotos no son _tan_ complicados. En el mundo actual de la computación en la nube es bastante facil pensar que hay un montón de magia detrás de los remotes de git, pero en realidad sólo son copias de tu repositorio en otra computadora. Típicamente vas a hablar con esta otra computadora a través de Internet, lo que permite transferir commits de un lado a otro.","","Habiendo dicho eso, los repositorios remotos tienen un par de propiedades interesantes:","","- Primero y principal, los remotos ¡son un backup genial! Los repositorios locales de git tienen la habilidad de restaurar archivos a un estado previo (como ya sabes), pero toda esa información se encuentra almacenada localmente. Al tener copias de tu repositorio git en otras computadoras, puedes perder todos tus datos locales y aún así retomar el trabajo en el punto donde lo habías dejado.","","- Más importante, ¡los remotos sociabilizan la programación! Ahora que hay una copia de tu proyecto hosteada en otro lugar, tus amigos pueden contribuir a tu proyecto (o bajarse los últimos cambios) de un modo muy sencillo.","","Se volvió bastante popular el uso de sitios web que muestran la actividad de los repositorios (como [GitHub](https://github.com/)), pero esos repositorios remotos _siempre_ sirven como la base subyacente de esas herramientas. Así que ¡es importante entenderlos!"]}},{type:"ModalAlert",options:{markdowns:["## Nuestro comando para crear remotos","","Hasta este punto, Learn Git Branching se centró en enseñar las bases del trabajo _local_ con repositorios (crear ramas, mergear, rebasear, etc). Sin embargo, ahora que queremos aprender sobre el trabajo con repositorios remotos, necesitamos un comando para inicializar nuestro entorno para esas lecciones. Ese comando será `git clone`","","Técnicamente, `git clone` en el mundo real es el comando que usarías para crear copias _locales_ de un repositorio remoto (uno de GitHub, por ejemplo). Aquí usamos este comando de un modo un tanto distinto, en cambio -- `git clone` va a crear un repositorio remoto a partir del tuyo local. Estamos de acuerdo en que es el significado técnicamente opuesto al del comando real, pero ayuda bastante a entender la conexión entre el clonado y el trabajo en un repositorio remoto, así que vamos a vivir con ello por ahora.",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Comencemos despacio y simplemente veamos cómo se ve un repositorio remoto en nuestra visualización.",""],afterMarkdowns:["¡Ahí está! Ahora tenemos un repositorio remoto de nuestro proyecto. Parece bastante similar, salvando algunos cambios visuales para hacer evidente la distinción -- en niveles posteriores vas a ver cómo compartir trabajo entre estos repositorios."],command:"git clone",beforeCommand:""}},{type:"ModalAlert",options:{markdowns:["Para completar este nivel, simplemente ejecuta `git clone` en tu repositorio existente. El verdadero aprendizaje viene en las próximas lecciones."]}}]},pt_BR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Remotos no Git","","Repositórios remotos não são algo muito complicado. Nos dias atuais de computação em nuvem, seria fácil pensar que existiria muita mágica por trás dos remotos do Git, mas não é o caso -- eles são na verdade apenas cópias do seu repositório em outro computador. Você pode geralmente comunicar-se com esse outro computador por meio da Internet, o que permite que você transfira commits de um lado para o outro.","","Tendo dito isto, repositórios remotos tem uma série de propriedades interessantes:","","- Primeiro e antes de tudo, repositórios remotos servem como um ótimo backup! Repositórios Git locais possuem a habilidade de restaurar um arquivo para um estado anterior (como você sabe), mas toda a informação está guardada localmente. Tendo cópias do seu repositório Git em outros computadores, mesmo se você perder todos os seus dados locais, ainda terá como recomeçar do mesmo ponto de onde você tinha parado.","","- Ainda mais importante, repositórios remotos tornam o desenvolvimento uma atividade social! Agora que uma cópia do seu projeto está hospedada em outro lugar, seus amigos podem contribuir para o seu projeto (ou obter as suas últimas alterações) de uma forma bastante simples.","","Está se tornando bastante popular o uso de websites para visualizar a atividade em repositórios (como o [GitHub](https://github.com/)), mas o recurso de repositórios remotos _sempre_ serve como mecanismo base para essas ferramentas. Então é importante entender como ele funciona!"]}},{type:"ModalAlert",options:{markdowns:["## Nosso comando para criar remotos","","Até este ponto, o Learn Git Branching focou em ensinar o básico a respeito de trabalho em repositórios _locais_ (branch, merge, rebase, etc). Entretanto, agora que queremos aprender como repositórios remotos funcionam, precisamos de um comando para configurar o ambiente para essas lições. Esse comando será o `git clone`.","","Tecnicamente, o `git clone` do mundo real é um comando que se usa para criar cópias _locais_ de repositório remotos (do GitHub para o seu computador, por exemplo). Todavia, por motivos logísticos, nós usaremos esse comando de uma forma um pouco diferente no Learn Git Branching -- aqui o `git clone` criará um repositório remoto a partir do repositório local. Certamente, esse comportamento é exatamente o oposto do comando real, mas apesar disso ele ajuda a formar a conexão mental entre a clonagem e a forma como repositórios remotos funcionam, então vamos usá-lo dessa forma mesmo por enquanto.",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Vamos começar devagar e apenas olhar como um repositório remoto se parece na nossa visualização.",""],afterMarkdowns:["Aqui está ele! Agora temos um repositório remoto do nosso projeto. Ele é muito parecido exceto por algumas mudanças visuais para tornar a distinção factível -- nas tarefas a seguir veremos como compartilhar trabalho entre esses repositórios."],command:"git clone",beforeCommand:""}},{type:"ModalAlert",options:{markdowns:["Para completar este nível, simplesmente chame o comando `git clone`. Você aprenderá algo de verdade somente nas próximas lições."]}}]},gl:{childViews:[{type:"ModalAlert",options:{markdowns:["## Repositorios remotos en Git","","Os repositorios remotos non son complicados en git. Actualmente ca computación na nube, pódese pensar que hai moita maxia tras os repositorios remotos de git, pero para nada é así -- en verdade son copias do repositorio, pero noutra máquina. Ti podes comunicarte xeralmente con esa outra máquina por medio de internet, o que permite que mandes commits de un repositorio cara o outro.","","Dito isto, os repositorios remotos teñen propiedades interesantes:","","- Primeiro e antes de todo, os repositorios remotos serven como unha copia de seguranza! Os repositorios locais posúen a habilidade de restaurar un arquivo nun estado anterior (como xa sabes), pero toda á información está gardada. Tendo copias do repositorio noutras máquinas, incluso poderías perder tódolos datos da túa computadora, e comenzar a traballar no punto onde o deixaches no último commit.","","- Máis importante aún, ¡os repositorios remotos fan que o desenvolvemento sexa social! Agora que existe unha copia do teu código noutro lugar, os teus amigos poden contribuír no teu proxecto (ou obter os últimos cambios) dunha forma moi simple.","","Hai webs moi populares onde se pode ver a actividade dos repositorios (como [GitHub](https://github.com/)), pero estes recursos remotos _sempre_ axudan como mecanismo de base para esas ferramentas. ¡Entón é importante saber cómo funcionan!"]}},{type:"ModalAlert",options:{markdowns:["## O noso comando para crear remotos","","Ata este punto, Learn Git Branching enfocouse en ensinar o básico respecto do traballo en repositorios _locais_ (branch, merge, rebase, etc). Entretanto, agora que queremos aprender como os repositorios remotos funcionan, precisamos dun comando para configurar o entorno para esas leccións. Este comando será `git clone`.","","Técnicamente, `git clone` no mundo real é un comando que fai copias _locais_ de repositório remotos (de GitHub para a túa máquina, por exemplo). Todavía, por motivos loxísticos, nós usaremos ese comando dunha forma un pouco diferente, Learn Git Branching -- aquí `git clone` creará un repositorio remoto a partir do repositorio local. Certamente, ese comportamento é exactamente o oposto do comando real, pero a pesares de iso axudarate a formar unha conexión mental entre a clonación e como funcionan os repositorios remotos, entón imos usalo desa forma.",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Imos comenzar a modo, e só ollar cómo un repositorio remoto semellase á nosa visualización.",""],afterMarkdowns:["¡Aquí o tes! Agora temos un respositorio remoto do noso proxecto. El é moi parecido exceto por algúns cambios visuais para ter a unha distinción visible -- nas tarefas a seguir veremos como compartir o traballo entre eses repositorios."],command:"git clone",beforeCommand:""}},{type:"ModalAlert",options:{markdowns:["Para completar este nivel, escribe o comando `git clone`. Aprenderás algo de verdade sóamente nas próximas leccións."]}}]},zh_TW:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Remotes","","remote (遠端) repository 並不會很難了解. 藉由現在的雲端運算,可以很輕易地了解到在 git remote 裡面有很多有趣的事情,但它們其實其實就只是你的或者是其它電腦上的 repository 的副本。你可以輕易地透過網路去發送你的 commit 給其它的電腦。","","也就是說,remote repository 有很多有趣的地方:","","- 第一,remote 是用來備份的! 本地端的 git 有能力可以回復文件到前一個狀態 (你知道的),但是全部的資訊還是儲存在本地端。如果你在其它的電腦上面有你的 git repository 的副本,則你可以在資料不小心遺失的時候進行救援備份","","- 更重要的是, remote 讓大家一起來 coding!現在你的 project 放在 remote 上面,你的朋友可以很容易地對你的 project 做出貢獻(或者是 pull 你最後的修改) 。","","使用網站去對 remote repository 做視覺化非常流行(例如 [GitHub](https://github.com/) 或者是 [Phabricator](http://phabricator.org/)),但這背後最大的功臣是 remote repository,因此我們務必要了解它。"]}},{type:"ModalAlert",options:{markdowns:["## 我們去建立 remotes 的指令","","到目前為止,Learn Git Branching 著重在解釋本地端的工作(branching, merging, rebasing 以及其它指令), 但是我們現在想要學習針對 remote 的指令,我們需要一個指令去建立環境,`git clone` 就是我們需要的指令","","技術上來說, `git clone` 表示你想要把遠端的 repository 複製一份下來放在本地端( 例如從 github 複製)。 雖然 `git clone` 實際上是把遠端的 repository 複製下來放在本地端,在 Learn Git Branching 中,我們用的這個指令會有一點不同。雖然他跟真實的指令的意思相反,但是它可以建立起本地端以及遠端的一個連結,現在讓我們看看如何使用它吧。",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["讓我們慢慢來,並且看看 remote repository 是長什麼樣子(在我們的視覺化圖形中)。",""],afterMarkdowns:["就是那樣!現在我們有了一個放置了我們 project 的 remote repository。除了一些視覺上的改變之外,它們看起來很像,在之後的關卡中你就會看到我們如何分享我們的工作到這些 repository 上面。"],command:"git clone",beforeCommand:""}},{type:"ModalAlert",options:{markdowns:["要完成這個關卡,只要打 `git clone,其它的學習會在後面的關卡中出現。"]}}]},zh_CN:{childViews:[{type:"ModalAlert",options:{markdowns:["## 远程仓库","","远程仓库并不复杂, 在如今的云计算盛行的世界很容易把远程仓库想象成一个富有魔力的东西, 但实际上它们只是你的仓库在另个一台计算机上的拷贝。你可以通过因特网与这台计算机通信 —— 也就是增加或是获取提交记录","","话虽如此, 远程仓库却有一系列强大的特性","","- 首先也是最重要的的点, 远程仓库是一个强大的备份。本地仓库也有恢复文件到指定版本的能力, 但所有的信息都是保存在本地的。有了远程仓库以后,即使丢失了本地所有数据, 你仍可以通过远程仓库拿回你丢失的数据。","","- 还有就是, 远程让代码社交化了! 既然你的项目被托管到别的地方了, 你的朋友可以更容易地为你的项目做贡献(或者拉取最新的变更)","","现在用网站来对远程仓库进行可视化操作变得越发流行了(像 [GitHub](https://github.com/)), 但远程仓库**永远**是这些工具的顶梁柱, 因此理解其概念非常的重要!"]}},{type:"ModalAlert",options:{markdowns:["## 我们创建远程仓库的命令","","直到现在, 教程都聚焦于**本地**仓库的操作(branch、merge、rebase 等等)。但我们现在需要学习远程仓库的操作 —— 我们需要一个配置这种环境的命令, 它就是 `git clone`。","从技术上来讲,`git clone` 命令在真实的环境下的作用是在**本地**创建一个远程仓库的拷贝(比如从 github.com)。 但在我们的教程中使用这个命令会有一些不同 —— 它会在远程创建一个你本地仓库的副本。显然这和真实命令的意思刚好相反,但是它帮咱们把本地仓库和远程仓库关联到了一起,在教程中就凑合着用吧。",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["咱们慢慢来,先看看远程仓库(在图示中)的样子。",""],afterMarkdowns:["就是它了! 现在我们有了一个自己项目的远程仓库。除了远程仓库使用虚线之外, 它们几乎没有什么差别 —— 在后面的关卡中, 你将会学习怎样在本地仓库和远程仓库间分享工作成果。"],command:"git clone",beforeCommand:""}},{type:"ModalAlert",options:{markdowns:["要完成本关, 用 `git clone` 复制下你的仓库就可以了。后续的课程我们会正式地学习"]}}]},de_DE:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Remotes","","Entfernte Repositorys sind nicht weiter kompliziert. In dieser Welt des Cloud Computings könnte man vielleicht glauben, dass hinter entfernten Git-Repositorys eine Menge Magie steckt, aber es sind einfach nur Kopien eines Repositorys auf einem anderen Rechner. Du kannst mit diesem Rechner typischerweise über das Internet kommunizieren, was es dir ermöglicht Commits hin und her zu schicken.","","Nichts desto weniger haben entfernte Repositorys eine Menge toller Eigenschaften:","","- Vor allem: Sie sind ein super Backup! Lokale Git-Repositorys können deine Arbeitskopie in jeden beliebigen früheren Zustand versetzen (wie du ja weißt), aber all diese Informationen liegen eben bei dir lokal. Wenn es Kopien von deinem Repository auf anderen Rechnern gibt, kannst du ruhig all deine Daten verlieren und trotzdem genau da weitermachen, wo du aufgehört hast.","","- Noch wichtiger: Remotes geben dem Entwickeln eine soziale Komponente! Wenn eine Kopie deines Projekts woanders liegt, können deine Freunde sehr einfach etwas zu dem Projekt beitragen (oder sich deine neuesten Änderungen holen).","","Websites, die die Aktivitäten um diese entfernten Repositorys darstellen (wie [GitHub](https://github.com/)) erfreuen sich zunehmender Beliebtheit. Aber entfernte Repositorys sind _immer_ das Rückgrat für diese Werkzeuge. Deshalb ist es wichtig, sie zu verstehen."]}},{type:"ModalAlert",options:{markdowns:["## Der Befehl um ein Remote zu erstellen","","Bis jetzt hat sich Learn Git Branching darauf konzentriert, die Grundlagen der _lokalen_ Arbeit mit Repositorys zu vermitteln (Branche anlegen, zusammenführen, Rebasen etc). Jetzt wollen wir allerdings lernen mit entfernten Repositorys zu arbeiten und brauchen für die Level eine entsprechende Umgebung. Die schaffen wir mit `git clone`.","",'In der Realität ist `git clone` eigentlich der Befehl, mit dem du eine _lokale_ Kopie eines _entfernten_ Repositorys erstellst (das zum Beispiel auf GitHub liegt). Wir benutzen diesen Befehl in Learn Git Branching allerdings ein wenig anders -- hier macht `git clone` stattdessen eine Kopie von deinem lokalen Repository auf einem "entfernten Server". Klar, das ist eigentlich genau das Gegenteil von dem, was der echte Befehl macht, aber es hilft den Zusammenhang zwischen Cloning und der Arbeit mit entfernten Repositorys herzustellen, also machen wir\'s einfach so.',""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Fangen wir langsam an und schauen nur wie ein entferntes Repository in unserer Darstellung aussieht.",""],afterMarkdowns:["Da ist es! Jetzt haben wir ein entferntes Repository unseres Projektes. Es sieht so aus wie das lokale, nur mit ein paar Änderungen in der Darstellung -- in späteren Leveln wirst du sehen, wie man Änderungen zwischen den Repositorys austauschen kann."],command:"git clone",beforeCommand:""}},{type:"ModalAlert",options:{markdowns:["Um diesen Level abzuschließen führ einfach `git clone` auf deinem bestehenden Repository aus. Alles weitere kommt in den nächsten Leveln."]}}]},ja:{childViews:[{type:"ModalAlert",options:{markdowns:["## Gitリモート","","リモートのリポジトリというのはそんなに複雑なものでもありません。クラウドコンピューティングが普及している現在の世界では、gitリモートの裏には何か不思議な仕組みが動いていると思いやすいのですが、実は別のコンピュータ上に保存されているあなたのリポジトリのコピーにすぎません。通常、インターネットを媒体に使って別のコンピュータと対話し、コミットを交互にやり取りすることができます。","","とはいえ、リモートリポジトリにはいくつかの素晴らしい特徴があります:","","- まず、リモートはバックアップの役割を果たします。ご存知の通り、ローカルのgitリポジトリは以前の状態にファイルを復帰する機能を持っているのですが、その情報はすべてローカルに保存されています。gitリポジトリを別のコンピュータにも保存することで、ローカルのデータがすべて失われたとしても、保存状態からコーディングを続けられます。","","- それよりも大切なこととして、リモートではコードをより一般的に公開できます!プロジェクトのコピーが別の場所に保存されているため、友達などが簡単にそのプロジェクトに参加したり最近の変更をpullしたりできます。","","最近ではリモートリポジトリに関するデータをビジュアル的に表示するウェブサイト([GitHub](https://github.com/)や[Phabricator](http://phabricator.org/)など)の使用が人気を集めていますが、リモートリポジトリは_そのいずれの_ウェブサイトの裏にも使われています。なので理解する必要があります。"]}},{type:"ModalAlert",options:{markdowns:["## リモートを作成するコマンド","","今までLearn Git Branchingでは_ローカル_リポジトリの様々な作業(branch, merge, rebaseなど)に焦点を当ててきました。しかし、これからはリモートリポジトリの作業を学びますので、レッスンのために環境をセットアップする必要があります。そのコマンドは`git clone`になります。","","通常、`git clone`はリモートリポジトリ(githubなどから)を_ローカル_にコピーする時に使います。しかしLearn Git Branchingでは少し違ったように使います -- ここでは`git clone`が_ローカルリポジトリ_をリモートにコピーします。本当のコマンドの逆の動作になっているのですが、学んでいくうちにcloneとリモートリポジトリのつながりが見えてくるはずです。なので、今はとりあえず例として使ってみましょう。",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["最初の一歩として、ビジュアライズでリモートリポジトリを見てみましょう。",""],afterMarkdowns:["できました! プロジェクトのリモートリポジトリが保存されました。結構似ているのですが、その違いを明らかにするために少しだけビジュアルを工夫しました -- これからのレベルではこれらのリポジトリの間で作業をどう共有するか見ていきます。"],command:"git clone",beforeCommand:""}},{type:"ModalAlert",options:{markdowns:["このレベルをクリアするには、`git clone`で既存のリポジトリのクローンを作成します。次のレッスンでより詳細に見ていきます。"]}}]},ru_RU:{childViews:[{type:"ModalAlert",options:{markdowns:["## Удалённые репозитории в Git","","На самом деле удалённые репозитории в Git не так сложны, как кажутся на первый взгляд. Кажется, что в современном мире облачных вычислений под термином «удалённый репозиторий» подразумевается что-то сложное и загадочное. Однако, удалённые репозитории — это всего-навсего копии вашего репозитория, хранящиеся на другом компьютере. Обычно вы можете связываться с этим другим компьютером через Интернет, что позволяет вам передавать коммиты туда и сюда.","","Как уже было сказано, удалённые репозитории обладают рядом замечательных свойств:","","- В первую очередь, удалённые репозитории - это замечательное средство резервного копирования! Насколько вам известно, локальные репозитории способны восстанавливать файлы, используя предыдущие состояния, но вся эта информация хранится локально. Потеряв все свои локальные данные, вы способны восстановить их при наличии копии своего репозитория на другом компьютере.","","- Что ещё более важно, удалённые репозитории позволяют сделать процесс разработки более социальным! Теперь, когда копия вашего проекта размещена в другом месте, ваши друзья запросто могут внести свой вклад в ваш проект или забрать последние и актуальные изменения.","","Набирает популярность использование web-сайтов для визуализации активности удалённых репозиториев (например, [GitHub](https://github.com/)), однако удалённые репозитории _всегда_ выступают в качестве базы для таких инструментов. Поэтому так важно понимать, как устроены удалённые репозитории!"]}},{type:"ModalAlert",options:{markdowns:["## Наша команда для создания удалённого репозитория","","До настоящего момента мы были сфокусированы на изучении основ работы с _локальным_ репозиторием (ветвление, слияние, перемещение и т.д.). Однако теперь, когда мы хотим научиться работать с удалёнными репозиториями, нам нужны новые команды для настройки рабочей среды для этих упражнений. Такой командой нам послужит `git clone`","","Технически, `git clone` в реальной жизни - это команда, которая создаст _локальную_ копию удалённого репозитория (например, с GitHub). На наших занятиях в Learn Git Branching мы используем эту команду немного иначе - `git clone` создаёт удалённый репозиторий на основе вашего локального репозитория. На самом деле, это является полной противоположностью реальной команды, однако такой подход поможет нам наладить связь между склонированным и удалённым репозиторием. Давайте просто запустим эту команду.",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Давайте начнём постепенное изучение и взглянем на то, что собой представляет удалённый репозиторий (в нашем представлении).",""],afterMarkdowns:["Вот так! Теперь у нас есть удалённый репозиторий нашего проекта. Выглядит всё довольно одинаковым за исключением некоторых визуальных различий - в последующих уровнях вы увидите, как мы разделяем работу по этим репозиториям."],command:"git clone",beforeCommand:""}},{type:"ModalAlert",options:{markdowns:["Чтобы завершить уровень, просто выполните `git clone` на своём существующем репозитории. Настоящее обучение появится в последующих уроках."]}}]},ko:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Remote(원격)","","원격 저장소라는 것이 사실 그다지 복잡한 개념은 아닙니다. 오늘날의 클라우드 컴퓨팅을 떠올리면 git remote의 이면에 수많은 마법이 부려지고 있을 것 같지만, 사실 git remote 또 하나의 컴퓨터에 있는 여러분의 저장소의 복사본일 뿐입니다. 여러분은 일반적으로 인터넷을 통해서 이 또 하나의 컴퓨터와 커밋을 주고받는 등의 대화를 할 수 있습니다.","","소개한 김에 자랑까지 하자면 원격 저장소는 수많은 장점이 있습니다:","","- 무엇보다 먼저, 원격 저장소는 백업으로서의 역할을 훌륭하게 수행합니다! 로컬 git 저장소는 파일들을 이전의 상태로 되돌리는 기능을 가지고 있습니다(아시다시피). 하지만 그 모든 정보가 로컬(내 PC)에 저장되어 있습니다. 여러분의 git 저장소를 다른 컴퓨터가 복사본으로 가지고 있으면 로컬 데이터를 다 잃더라도 다른 컴퓨터에 남아있는 복사본으로 다시 출발 할 수 있습니다.","","- 더 중요한 것은, 원격 저장소를 통해 코딩을 다른 사람들과 함께 할 수 있다는 것입니다. 여러분의 프로젝트의 복사본이 어느 곳에선가 호스트되기 때문에 여러분의 친구가 프로젝트에 아주 쉽게 기여할 수 있게 됩니다(최근의 변화를 pull하거나).","","원격 저장소에서의 활동을 시각화해주는 웹 사이트들을 사용하는 것이 추세입니다. ([GitHub](https://github.com/) 또는 [Phabricator](http://phabricator.org/)등이 있습니다). 원격 저장소가 _항상_ 이러한 도구들의 중심 뼈대를 이루고 있습니다. 그래서 잘 아는 것이 중요해요!"]}},{type:"ModalAlert",options:{markdowns:["## 원격 저장소를 생성하는 명령어","","지금까지, Git 브랜치 배우기는 _로컬_ 저장소가 어떻게 활용되는지에 대해 중점적으로 소개해 왔습니다(브랜치, 합병, 리베이스 등등). 이제 원격 저장소를 어떻게 활용하는지에 대해 배워보려고 합니다. 앞으로 이어질 레슨의 환경을 마련할 명령어가 필요합니다. `git clone`이 바로 그 명령어입니다.","","실제로 `git clone`은 원격 저장소의 복사본을 _로컬_에 생성할때 사용하는 명령어입니다(github에서 가져올 때라던가). Git 브랜치 배우기에서는 이 명령어를 살짝 다르게 사용합니다 -- `git clone`이 당신의 로컬 저장소에서 원격 저장소를 생성해냅니다. 물론 실제 명령어와 반대로 작동하는 것이지만 클론과 원격 저장소 사이의 연결관계를 이해하는데 도움이되서 이렇게 했습니다. 일단은 그냥 해봅시다.",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["천천히 시작해봅시다. 일단 원격저장소가 우리 시각화 자료에서 어떻게 보이는지부터 봅시다.",""],afterMarkdowns:["자! 이제 우리 프로젝트의 원격 저장소를 가지게 되었습니다. 구분을 하기위해 조금 모양이 다른것 말고는 둘이 똑같게 생긴걸 알 수 있습니다 -- 뒤의 레벨에서는 우리가 이 저장소들 사이에서 어떻게 작업을 공유하는지 알아보겠습니다."],command:"git clone",beforeCommand:""}},{type:"ModalAlert",options:{markdowns:["이 레벨을 통과하기 위해서 `git clone`을 입력하세요. 뒤의 레슨에서 더많은 것들을 배워볼 것입니다."]}}]},uk:{childViews:[{type:"ModalAlert",options:{markdowns:["## Віддалені репозиторії","",'Віддалені репозиторії не є дуже складними. В сучасному світі, де на кожному кроці можна зустріти "хмарні обчислення", може видатися, що концепція віддалених репозиторіїв є дуже складною, але насправді вони -- просто звичайні копії твого репозиторію на віддаленому комп’ютері. Зазвичай з цим віддаленим комп’ютером можна зв’язатися через інтернет, що дозволяє обмінюватись комітами.',"","Приймаючи до уваги все сказане вище, віддалені репозиторії мають купу чудових властивостей:","","- В першу чергу, віддалені сервери -- це завжди чудова резевна копія (бекап)! Локальний репозиторій дає можливість відкотитися до попереднього стану, але вся інформація зберігається локально. Маючи копії свого репозиторію на віддалених машинах, ти можеш пережити втрату жорсткого диску чи пошкодження данних і продовжити працювати з того місця, на якому закінчив.","","- Що не менш важливо, віддалені репозиторії роблять програмування соціальним! Коли копія твого проекту розміщена в мережі, твої друзі мають змогу допомогти твоєму проекту (чи стягнути останні зміни) без зайвих зусиль.","","Стало дуже популярним користуватися веб-сайтами, що візуалізують активність на віддалених репозиторіях (наприклад [GitHub](https://github.com/)), але віддалені репозиторії _завжди_ слугують як основа цих сервісів. Тому важливо розуміти їх!"]}},{type:"ModalAlert",options:{markdowns:["## Команда, що створює віддалені репозиторії","","До цього моменту, Learn Git Branching концентрувало увагу на основах роботи з _локальним_ репозиторієм (гілкування, злиття гілок, ребейс, тощо). Однак тепер, коли ми вчимо віддалені репозиторії, нам потрібно налаштувати середовище для подальших уроків. `git clone` впорається з цим завданням.","","В принципі, `git clone` в справжньому git -- це команда для створення _локальної_ копії віддаленого репозиторію (наприклад з github). Але у Learn Git Branching ми використовуватимемо цю команду по-іншому -- `git clone` буде створювати віддалений репозиторій з локального. Я згодний, що це виходить трохи догори-дригом, але це допоможе створити зв’язок в голові між клонуванням та роботою з віддаленми репо, тому поки що будемо використовувати її таким чином.",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Низький старт - просто подивімося, як віддалений репозиторій виглядає (в нашій візуалізації).",""],afterMarkdowns:["Ось і все! Тепер ми маємо віддалений репозиторій нашого проекту. Він виглядає досить схоже, хіба що деякі візуальні елементи інші, щоб краще показати різницю -- в наступних рівнях ти навчишся ділитися роботою між цими репозиторіями."],command:"git clone",beforeCommand:""}},{type:"ModalAlert",options:{markdowns:["Щоб пройти цей рівень, просто зроби `git clone` свого поточного репозиторію. Справжні знання ти отримаєш в подальших рівнях."]}}]},vi:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Remotes (Kho lưu trữ từ xa)","","Thực ra thì kho chứa từ xa cũng không khó hiểu lắm đâu. Giờ đây, đâu đâu cũng thấy điện toán đám mây nên ai ai cũng tưởng git remote nó là cái gì đó ma thuật lắm, nhưng chúng thực ra chỉ là những bản sao chép kho chứa của bạn lên máy tính khác. Bạn có thể giao tiếp với chúng qua internet, từ đó mà chuyển giao commit qua lại.","","Vì lẽ đó mà kho chứa từ xa có những đặc tính tuyệt vời:","","- Trước hết, có tác dụng như là bản sao dự phòng! Bạn đã biết rằng kho cục bộ có thể khôi phục trở lại trạng thái trước đó, nhưng tất cả thông tin đó chỉ được lưu trữ cục bộ. Bằng cách sao chép toàn bộ kho chứa của bạn lên máy tính ở xa, một khi dữ liệu trong máy tính bị mất, bạn vẫn có thể tiếp tục làm việc như chưa có gì xảy ra.","","- Quan trọng hơn nữa, kho chứa từ xa khiến lập trình có tính cộng đồng hơn! Bây giờ bản sao dự án của bạn đã được lưu trữ ở nơi khác, bạn bè của bạn có thể đóng góp (hoặc kéo về cập nhật mới nhất) dự án của bạn rất dễ dàng.","","Trực quan hóa các kho lưu trữ từ xa bằng cách sử dụng các trang web đang trở nên phổ biến hơn (như [GitHub](https://github.com/)), nhưng các kho lưu trữ từ xa _luôn luôn_ là trụ cột của các công cụ này, vì vậy điều quan trọng là phải hiểu khái niệm này!"]}},{type:"ModalAlert",options:{markdowns:["## Câu lệnh của chúng tôi để tạo kho lưu trữ từ xa","","Cho đến bây giờ, Học Nhánh Git đã tập trung dạy về làm việc trên kho chứa _cục bộ_ (rẽ nhánh `branch`, hợp nhánh `merge`, dịch chuyển nhánh `rebase`,...). Nhưng bây giờ ta lại muốn học về làm việc trên kho lưu trữ từ xa, ta cần một câu lệnh để cài đặt môi trường cho những bài học này. Đó là `git clone`.","","Về mặt kỹ thuật, thì `git clone` thực tế là câu lệnh dùng để tạo một bản sao chép _cục bộ_ của kho chứa từ xa (ví dụ từ GitHub chẳng hạn). Nhưng trong Học Nhánh Git ta sẽ dùng câu lệnh này hơi khác biệt một chút -- `git clone` sẽ tạo ra một bản sao chép lên kho lưu trữ từ xa dựa trên kho chứa cục bộ của bạn. Điều này hoàn toàn ngược lại với câu lệnh thực tế, nhưng nó giúp ta nhân bản và làm việc với kho lưu trữ từ xa, nên ta sẽ dùng nó trong quá trình học.",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Nào cùng khởi động bằng cách nhìn xem kho lưu trữ từ xa trông như thế nào (trong mô tả của chúng tôi).",""],afterMarkdowns:["Nó đây rồi! Giờ ta đã có kho lưu trữ dự án từ xa. Nhìn nó cũng khá tương tự chỉ là được minh họa khác biệt một chút -- đến các cấp độ sau ta sẽ tìm hiểu thêm về cách thức trao đổi nội dung giữa các kho chứa này."],command:"git clone",beforeCommand:""}},{type:"ModalAlert",options:{markdowns:["Để hoàn thành cấp độ này chỉ cần đơn giản gõ lệnh `git clone` để sao chép kho chứa hiện tại. Ta sẽ học sâu hơn ở các bài học sau."]}}]},sl_SI:{childViews:[{type:"ModalAlert",options:{markdowns:["## Oddaljeni Git","","Oddaljeno repozitoriji sploh niso tako zakomplicirani. V današnjem svetu oblačnih storitev si lahko kdo predstavlja, da je veliko čarovnije za oddaljnim Gitom, a gre preprosto za tvoj repozitorij na drugem računalniku. Ponavadi lahko komuniciraš s tem računalnikom preko interneta, ki ti omogoča da prenašaš commite naprej in nazaj.","","Poleg tega imajo oddaljeni repozitoriji tudi veliko super lastnosti:","","- Prvič, oddaljenost služi za odlično rezervo! Lokalni git repozitoriji imajo možnost obnovitve datotek v prejšnje stanje (kot že veš), ampak vse te informacije so shranjene lokalno. S tem da imaš shranjene kopije gita na drugih računalnikih, lahko izgubiš vse tvoje lokalne podatke, pa imaš še zmeraj opcijo nadaljevati, kjer si ostal.","","- Še pomembneje, kodiranje lahko naredijo družabno! Sedaj, ko je kopija tvojega projekta nekje objavljena, lahko tvoji prijatelji pomagajo tvojemu projektu (ali pridobijo zadnje spremembe) zelo enostavno.","","Uporaba strani, ki vizualizirajo oddaljene repozitorije je postala zelo popularna (npr. [GitHub](https://github.com/)), ampak bistvo teh strani vseeno predstavljajo oddaljeni repozitoriji. Zato je pomembno, da jih razumemo!"]}},{type:"ModalAlert",options:{markdowns:["## Naši ukazi za kreiranje oddaljenih repozitorijev","","Do te točke, se je Learn Git Branching osredotočil na učenje osnov dela na lokalnih repozitorijih (branching, merging, rebasing, itd). Ampak sedaj, ko se hočemo naučiti še o delu na oddaljenih repozitorijih, potrebujemo ukaz, da postavi okolje za te lekcije. `git clone` bo ta ukaz.","","Tehnično je `git clone` v pravem svetu ukaz, ki ga boš uporabil za ustvarjanje lokalnih kopij oddaljenih repozitorijev (iz githuba naprimer). Mi uporabljamo ta ukaz nekoliko drugače na Learn Git Branching -- `git clone` ubistvu naredi oddaljen repozitorij iz tvojega lokalnega. Seveda, tehnično je nasproten pomen pravega ukaza, ampak pomaga ustvariti povezavo med kloniranjem in delom na oddaljenem repozitoriju, zato ga zdaj pač uporabljajmo.",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Začnimo počasi in poglejmo kako izgleda oddaljen repozitorij (v naši vizualizaciji).",""],afterMarkdowns:["Evo ga! Sedaj imamo oddaljen repozitorij našega projekta. Izgleda precej podoben razen nekaj vizualnih sprememb, da se opazi razlika -- v kasnejših stopnjah boš spoznal, kako si delimo delo preko teh repozitorijev."],command:"git clone",beforeCommand:""}},{type:"ModalAlert",options:{markdowns:["Za dokončanje te stopnje, uporabi `git clone` na svojem obstoječem repozitoriju. Pravo učenje pride v lekcijah, ki sledijo."]}}]},pl:{childViews:[{type:"ModalAlert",options:{markdowns:["## Zdalny Git","","Zdalne repozytoria nie są w rzeczywistości bardzo skomplikowane. W dzisiejszym, działającym w chmurze, świecie łatwo jest uznać, że za zdalnym Gitem kryje jakaś wielka magia, ale w rzeczywistości są to tylko kopie twojego repozytorium na innym komputerze. Zazwyczaj możesz połączyć się z nim przez internet, co umożliwia przesyłanie commitów tam i z powrotem. ","","Ale oczywiście zdalne repozytoria mają kilka świetnych właściwości:","","- Przede wszystkim zdalne repozytoria służą jako świetna kopia zapasowa! Lokalne repozytoria Git (jak już wiesz) mają możliwość przywracania plików do poprzedniego stanu, ale wszystkie te informacje są przechowywane lokalnie. Mając kopie repozytorium Git na innych komputerach, nawet jeśli stracisz wszystkie swoje dane lokalne, i tak możesz kontynuować pracę od tego samego miejsca.","","- Co ważniejsze, zdalne repozytoria sprawiają, że kodowanie jest społeczne! Teraz, gdy kopia twojego projektu jest umieszczona gdzie indziej, twoi znajomi mogą bardzo łatwo wnieść swój wkład do twojego projektu (lub pobrać najnowsze zmiany).","","Bardzo popularne stało się korzystanie ze stron internetowych, które wizualizują aktywność w zdalnych repozytoriach (takich jak [GitHub](https://github.com/)), ale podstawą tych narzędzi _zawsze_ są zdalne repozytoria. Dlatego ważne jest, aby je zrozumieć!"]}},{type:"ModalAlert",options:{markdowns:["## Polecenia do tworzenia zdalnych repozytoriów","","Do tego momentu kurs Learn Git Branching skupiał się na nauczaniu podstaw pracy z repozytoriami _lokalnymi_ (branch, merge, rebase itp.). Jednak teraz, gdy chcemy dowiedzieć się więcej o pracy ze zdalnym repozytorium, potrzebujemy polecenia, aby skonfigurować środowisko tych lekcji. Tym poleceniem będzie `git clone`.","","Technicznie rzecz biorąc, `git clone` w prawdziwym świecie jest poleceniem, którego będziesz używać do tworzenia _lokalnych_ kopii zdalnych repozytoriów (na przykład z GitHuba). Używamy tego polecenia nieco inaczej w Learn Git Branching -- `git clone` faktycznie tworzy repozytorium zdalne z lokalnego. Jasne, jest to technicznie odwrotne znaczenie prawdziwego polecenia, ale pomaga zrozumieć zależność między klonowaniem a pracą na zdalnym repozytorium, więc na razie zobaczmy, jak to wygląda w działaniu.",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Zacznijmy powoli i spójrzmy tylko, jak wygląda zdalne repozytorium (w naszej wizualizacji).",""],afterMarkdowns:["No i jest! Teraz mamy zdalne repozytorium naszego projektu. Wygląda dość podobnie, z wyjątkiem pewnych wizualnych zmian pomagających odróżnić je od lokalnego -- na kolejnych poziomach zobaczysz, jak udostępniamy pracę w tych repozytoriach."],command:"git clone",beforeCommand:""}},{type:"ModalAlert",options:{markdowns:["Aby ukończyć ten poziom, po prostu wpisz `git clone` na swoim repozytorium. Czas na prawdziwą naukę przyjdzie w kolejnych lekcjach."]}}]},it_IT:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Remoto","","I repository remoti non sono così tanto complicati. Nell'odierno mondo del cloud computing è facile pensare che vi sia una sorta di magia dietro i remote di git, ma in effetti sono solo copie del tuo repository in un altro computer. Puoi comunicare con quest'altro computer tramite Internet, consentendoti di trasferire commit dall'uno all'altro.","","Detto ciò, i repository remoti hanno diverse proprietà interessanti:","","- Prima di tutto, un repository remoto può servire come backup! Con i repository git locali si possono riportare file ad uno stato precedente (come sai), ma tutte le informazioni sono memorizzate localmente. Avendo copie del tuo repository git in altri computer, tu potresti perdere tutti i tuoi dati locali e riprenderli da dove avevi interrotto.","","- Seconda cosa, ancora più importante, l'utilizzo di repository remoti introduce al coding sociale! Ora che una copia del tuo progetto è ospitata anche altrove, i tuoi amici possono contribuire al tuo progetto molto agevolmente (o recuperare le tue ultime modifiche) .","","E' diventato molto popolare l'utilizzo di siti web che mostrano le attività di repository remoti (come [GitHub](https://github.com/)), ma questi repository _sempre_ rappresentano la base sottostante per questi strumenti. Per cui è importante conoscerli a fondo!"]}},{type:"ModalAlert",options:{markdowns:["## I nostri comandi per creare repository remoti","","Finora, Learn Git Branching si è focalizzato nell'insegnare le basi del lavoro _locale_ sui repository (creazione di rami, fusione, rebasing, etc). Tuttavia, ora che vogliamo esplorare il lavoro con i repository remoti, abbiamo bisogno di un comando per impostare l'ambiente per tali lezioni. Questo comando sarà `git clone`.","","Tecnicamente, `git clone` nel mondo reale è il comando che userai per creare copie _locali_ di repository remoti (da github per esempio). In Learn Git Branching, però, useremo questo comando in modo leggermente diverso -- `git clone` creerà un repository remoto a partire da quello tuo locale. E' chiaro che questo è il significato tecnicamente opposto del comando reale, ma questo aiuta nel costruire la connessione tra il cloning e il lavoro sui repository remoti, quindi per ora lo utilizzeremo così.",""]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Partendo lentamente, esaminiamo come un repository remoto appare nella nostra visualizzazione.",""],afterMarkdowns:["Eccolo! Ora abbiamo un repository remoto del nostro progetto. Appare molto similie eccetto per qualche modifica nella visualizzazione per far notare la distinzione -- nei successivi livelli vedrai come condividere il lavoro tra questi repository."],command:"git clone",beforeCommand:""}},{type:"ModalAlert",options:{markdowns:["Per completare questo livello, semplicemente esegui `git clone` nel tuo repository esistente. Il succo dell'apprendimento avverrà nelle prossime lezioni."]}}]}}}},{}],140:[function(e,t,o){o.level={goalTreeString:'{"branches":{"main":{"target":"C5","id":"main","remoteTrackingBranchID":"o/main","localBranchesThatTrackThis":null},"o/main":{"target":"C3","id":"o/main","remoteTrackingBranchID":null,"localBranchesThatTrackThis":["main"]}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C4":{"parents":["C1"],"id":"C4"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C2"],"id":"C3"},"C5":{"parents":["C3","C4"],"id":"C5"}},"HEAD":{"target":"main","id":"HEAD"},"originTree":{"branches":{"main":{"target":"C3","id":"main","remoteTrackingBranchID":null,"localBranchesThatTrackThis":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C2"],"id":"C3"}},"HEAD":{"target":"main","id":"HEAD"}}}',solutionCommand:"git clone;git fakeTeamwork 2;git commit ;git pull",startTree:'{"branches":{"main":{"target":"C1","id":"main","remoteTrackingBranchID":null,"localBranchesThatTrackThis":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"main","id":"HEAD"}}',name:{en_US:"Faking Teamwork",fr_FR:"Simulation du travail d'équipe",de_DE:"Teamarbeit simulieren",ja:"擬似的なチーム作業",es_AR:"Simulando el trabajo en equipo",es_ES:"Simulando el trabajo en equipo",pt_BR:"Simulando trabalho em equipe",gl:"Simulando o traballo no repositorio",zh_CN:"模拟团队合作",zh_TW:"模擬團隊合作",ru_RU:"Коллективная работа",uk:"Симуляція колективної роботи",ko:"가짜 팀워크",vi:"Giả lập làm việc nhóm",sl_SI:"Lažno Ekipno Delo",pl:"Symulacja pracy zespołowej",it_IT:"Simulare il lavoro di squadra"},hint:{en_US:"Remember you can specify the number of commits to fake",fr_FR:"Rappelez-vous que vous pouvez spécifier le nombre de commits à simuler",de_DE:"Nicht vergessen, du kannst angeben wie viele Commits simuliert werden sollen.",ja:"擬似的に作成するコミット数を指定できるのをお忘れなく",es_AR:"Acordate que podés especificar cuántos commits simular",es_ES:"Recuerda que puedes especificar cuántos commits simular",pt_BR:"Lembre-se que você pode especificar quantos commits quer simular",gl:"Lembra que podes especifar cantos commits queres simular",zh_CN:"记住你可以指定仿真提交的个数",zh_TW:"你要記得指定要送多少個 commit 出去",ru_RU:"помните, Вы можете указать количество фейковых коммитов",uk:"пам’ятай що ти можеш вказати кількість фейкових комітів",ko:"가장할 커밋의 갯수를 조절할 수 있습니다.",vi:"Nhớ rằng bạn có thể chỉ định số lượng commit để giả lập",sl_SI:"Spomni se, da lahko določiš število lažnih commitov.",pl:"Pamiętaj, że możesz określić liczbę symulowanych commitów",it_IT:"Tieni a mente che puoi specificare il numero di commit da simulare"},startDialog:{en_US:{childViews:[{type:"ModalAlert",options:{markdowns:["## Simulating collaboration","","So here is the tricky thing -- for some of these upcoming lessons, we need to teach you how to pull down changes that were introduced in the remote.","",'That means we need to essentially "pretend" that the remote was updated by one of your coworkers / friends / collaborators, sometimes on a specific branch or a certain number of commits.',"","In order to do this, we introduced the aptly-named command `git fakeTeamwork`! It's pretty self explanatory, let's see a demo..."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["The default behavior of `fakeTeamwork` is to simply plop down a commit on main."],afterMarkdowns:["There we go -- the remote was updated with a new commit, and we haven't downloaded that commit yet because we haven't run `git fetch`."],command:"git fakeTeamwork",beforeCommand:"git clone"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["You can also specify the number of commits or the branch by appending them to the command."],afterMarkdowns:["With one command we simulated a teammate pushing three commits to the `foo` branch on our remote."],command:"git fakeTeamwork foo 3",beforeCommand:"git branch foo; git clone"}},{type:"ModalAlert",options:{markdowns:["The upcoming levels are going to be pretty difficult, so we're asking more of you for this level.","","Go ahead and make a remote (with `git clone`), fake some changes on that remote, commit yourself, and then pull down those changes. It's like a few lessons in one!"]}}]},fr_FR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Simuler la collaboration","","C'est là que cela devient compliqué : pour certaines des leçons à venir, nous avons besoin de vous enseigner comment récupérer les changements effectués sur le dépôt distant.","","Cela signifie que nous devons faire semblant que le dépôt distant a été modifié par un collègue / ami / collaborateur, et parfois même sur une branche spécifique ou avec plusieurs commits.","","Pour faire cela, nous introduisons à point nommé la commande `git fakeTeamwork` ! Elle devrait vous paraître assez intuitive, voyons une démo..."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Le comportement par défaut de `fakeTeamwork` est tout simplement de faire apparaître un commit sur le main distant :"],afterMarkdowns:["Voilà : le dépôt distant a été mis à jour avec un nouveau commit, et nous n'avons pas encore téléchargé ce commit parce que nous n'avons pas exécuté la commande `git fetch`."],command:"git fakeTeamwork",beforeCommand:"git clone"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Vous pouvez aussi spécifier le nombre de commits ou la branche en les ajoutant à la fin de la commande."],afterMarkdowns:["Avec une seule commande, nous avons simulé un collègue ayant pushé 3 commits sur la branche `foo` de notre dépôt distant."],command:"git fakeTeamwork foo 3",beforeCommand:"git branch foo; git clone"}},{type:"ModalAlert",options:{markdowns:["Les niveaux suivants vont devenir assez difficiles, nous augmentons donc un peu la difficulté de cet exercice.","","Vous devrez créer un dépôt distant (avec `git clone`), simuler quelques changements sur ce dépôt, commiter les vôtres, et enfin appliquer les changements distants dans votre dépôt local (pull). C'est presque plusieurs leçons en une !"]}}]},es_AR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Simulando la colaboración","","Entonces, hay algo medio tramposo acá -- para algunas de las lecciones siguientes, necesitamos explicarte cómo bajar cambios introducidos en el repositorio remoto.","",'Eso significa que esencialmente tenemos que "hacer de cuenta" que el repositorio remoto fue actualizado por algún colega, amigo o colaborador tuyo, incluso a veces en alguna rama específica o una cantidad determinada de commits.',"","Para lograr esto, introdujimos el bien llamado comando ¡`git fakeTeamwork`! Es bastante auto-explicativo: simula trabajo de nuestros colegas. Veamos una demo..."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["El comportamiento por default de `fakeTeamwork` es simplemente crear un commit en main."],afterMarkdowns:["Ahí está: el remoto se actualizó con un nuevo commit, y todavía no nos bajamos ese commit porque aún no hicimos `git fetch`."],command:"git fakeTeamwork",beforeCommand:"git clone"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["También podés especificar la cantidad de commits o la ramma agregándolos al comando."],afterMarkdowns:["Con un único comando simulamos que un compañero de equipo pusheó tres commits a la rama `foo` de nuestro remoto."],command:"git fakeTeamwork foo 3",beforeCommand:"git branch foo; git clone"}},{type:"ModalAlert",options:{markdowns:["Los niveles siguientes van a ser algo difíciles, así que vamos a exigirte un poco más en este nivel.","","Animate y creá un remoto (con `git clone`), simulá algunos cambios en ese remoto, commiteá en tu repo local, y luego pulleate esos cambios. ¡Es como varias lecciones en una!"]}}]},es_ES:{childViews:[{type:"ModalAlert",options:{markdowns:["## Simulando la colaboración","","Entonces, hay algo un poco tramposo -- para algunas de las lecciones siguientes, necesitamos explicarte cómo descargar cambios introducidos en el repositorio remoto.","",'Eso significa que escencialmente tenemos que "tener en cuenta" que el repositorio remoto fue actualizado por algún colega, amigo o colaborador tuyo, incluso a veces en alguna rama específica o una cantidad determinada de commits.',"","Para lograr esto, introdujimos el bien llamado comando ¡`git fakeTeamwork`! Es bastante autoexplicativo: simula trabajo de nuestros colegas. Veamos una demo..."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["El comportamiento por default de `fakeTeamwork` es simplemente crear un commit en main."],afterMarkdowns:["Ahí está: el remoto se actualizó con un nuevo commit, y todavía no nos bajamos ese commit porque aún no hicimos `git fetch`."],command:"git fakeTeamwork",beforeCommand:"git clone"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["También puedes especificar la cantidad de commits o la rama agregándolos al comando."],afterMarkdowns:["Con un único comando simulamos que un compañero de equipo pusheó tres commits a la rama `foo` de nuestro remoto."],command:"git fakeTeamwork foo 3",beforeCommand:"git branch foo; git clone"}},{type:"ModalAlert",options:{markdowns:["Los niveles siguientes van a ser algo difíciles, así que vamos a exigirte un poco más en este nivel.","","Anímate y crea un remoto (con `git clone`), simula algunos cambios en ese remoto, haz commit en tu repo local, y luego haz pull de esos cambios. ¡Es como si fueran varias lecciones en una!"]}}]},pt_BR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Simulando colaboração","","Neste ponto, temos uma pequena dificuldade -- para algumas das lições a seguir, precisaremos ensinar como fazer pull de mudanças que foram introduzidas no repositório remoto.","",'Isso significa que precisaremos essencialmente "fingir" que o repositório remoto foi atualizado por algum de seus colegas / amigos / colaboradores, algumas vezes em um ramo específico ou com um certo número de commits.',"","Para esta finalidade, criamos o comando fictício `git fakeTeamwork`! Ele é bastante auto-explicativo, vejamos uma demonstração..."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["O comportamento padrão do `fakeTeamwork` é simplesmente fazer aparecer um commit no main."],afterMarkdowns:["Aqui vamos nos -- o repositório remoto foi atualizado com um novo commit, e ainda não baixamos esse commit porque não executamos um `git fetch`."],command:"git fakeTeamwork",beforeCommand:"git clone"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Você também pode especificar o número de commits ou o ramo, anexando-os ao comando."],afterMarkdowns:["Com um único comando, nós simulamos um colega enviando 3 commits para o ramo `foo` do repositório remoto."],command:"git fakeTeamwork foo 3",beforeCommand:"git branch foo; git clone"}},{type:"ModalAlert",options:{markdowns:["Os níveis posteriores serão mais difíceis, então estamos pedindo um pouco mais de você neste nível.","","Vá em frente e crie um repositório remoto (chamando `git clone`), simule algumas mudanças no repositório remoto, commite no repositório local, e então faça um pull das mudanças que haviam sido simuladas. É como se fossem várias lições em uma só!"]}}]},gl:{childViews:[{type:"ModalAlert",options:{markdowns:["## Simulando o traballo no repositorio","","Entón, hai algo con trampa aquí -- para algunhas das leccións seguintes, precisamos explicarche cómo baixar os cambios introducidos no repositorio remoto.","",'Eso significa que escencialmente temos que "finxir" que o repositorio remoto foi actualizado por algún compañeiro, amigo ou incluso nalgunha rama específica a cantidade de commits feitos.',"","Para acadar esto, introduxemos o ben chamado comando `git fakeTeamwork`! É bastante auto-explicativo: semella traballo dos nosos colegas. Vexamos una demo..."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["O comportamento por defecto de `fakeTeamwork` é simplemente crear un commit en main na rama remota."],afterMarkdowns:["Ahí o tes: a rama remota actualizouse cun novo commit, e aínda non nos baixamos ese commit porque inda non fixemos `git fetch`."],command:"git fakeTeamwork",beforeCommand:"git clone"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Tamén podes especificar a cantidad de commits ou a rama agregándoos ó comando."],afterMarkdowns:["Cun único comando simulamos que un colega do equipo empurrou tres commits á rama `foo` do noso remoto."],command:"git fakeTeamwork foo 3",beforeCommand:"git branch foo; git clone"}},{type:"ModalAlert",options:{markdowns:["Os niveis seguintes van ser un pouco máis complicados, así que imos a esixirte un pouco máis neste nivel.","","Anímate e crea unha rama remota (con `git clone`), e simula algúns cambios no repositorio remoto, logo desto, fai commit do teu repo local, e logo descarga os cambios. ¡É coma varias leccións nunha soa!"]}}]},zh_TW:{childViews:[{type:"ModalAlert",options:{markdowns:["## 模擬合作","","接下來的課程有一個很難的事情,我們需要讓你學會如何 pull remote 上的更新。","",'這就表示我們必須要 "假裝" remote 被你其中一個同事/ 朋友/ 合作的人在某個特定的 branch 上面送了一些特定的 commit。',"","為了要做到這件事情,我們要介紹一個自己設計的指令 `git fakeTeamwork`! 從字面上就可以很容易地看出來它在幹嘛,讓我們來看一個範例..."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["`fakeTeamwork` 的預設行為是在送一個 commit 給 main 分支"],afterMarkdowns:["我就說吧!remote 已經藉由一個新的 commit 而更新了,而且因為我們還沒有用 `git fetch`,所以表示我們還沒有下載該 commit。"],command:"git fakeTeamwork",beforeCommand:"git clone"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["你可以在命令的後面指定你要送幾個 commit 或是要送給哪個 branch。"],afterMarkdowns:["我們利用一個指令將三個 commit 送給在 remote 上面的 `foo` branch。"],command:"git fakeTeamwork foo 3",beforeCommand:"git branch foo; git clone"}},{type:"ModalAlert",options:{markdowns:["接下來的關卡會很困難,所以我們在這個關卡中會問你更多問題。","","現在先把 remote 下載下來(利用 `git clone`),假裝送幾個 commit 給 remote 做更新,然後 pull 這些 commit 下來 。這就好像是幾個教學中的指令的總結!"]}}]},zh_CN:{childViews:[{type:"ModalAlert",options:{markdowns:["## 模拟团队合作","","这里有一件棘手的事 —— 为了接下来的课程, 我们需要先教你如何制造远程仓库的变更。","","这意味着,我们需要“假装”你的同事、朋友、合作伙伴更新了远程仓库,有可能是某个特定的分支,或是几个提交记录。","","为了做到这点,我们引入一个自造命令 `git fakeTeamwork`!它的名称已经说明了一切,先看演示.."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["`fakeTeamwork` 默认操作就是在远程仓库的 main 分支上做一次提交。"],afterMarkdowns:["完成了 —— 远程仓库增加了一个新提交,我们还没有下载它,因为我们还没有执行 `git fetch`。"],command:"git fakeTeamwork",beforeCommand:"git clone"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["你还可以指定提交的分支或是数量,只需要在命令后加上它们就可以了。"],afterMarkdowns:["通过一个命令,我们就模拟队友推送了 3 个提交记录到远程仓库的 foo 分支。"],command:"git fakeTeamwork foo 3",beforeCommand:"git branch foo; git clone"}},{type:"ModalAlert",options:{markdowns:["接下来的关卡会相当的困难,所以在本关会让你做许多事情,先来热热身。","","克隆一个远程仓库(用 `git clone`),再在刚创建的远程仓库中模拟一些修改,然后在你自己的本地分支上做一些提交,再拉取远程仓库的变更。这看起来像是包含了好几节的课程。"]}}]},de_DE:{childViews:[{type:"ModalAlert",options:{markdowns:["## Zusammenarbeit simulieren","","Hier ist das Problem -- für einige der folgenden Level müssen wir lernen, wie man Änderungen vom entfernten Server holt.","",'Das heißt wir müssen im Grunde "so tun", als ob der Server von einem Kollegen / Freund / Mitarbeiter aktualisiert worden wäre, manchmal ein bestimmter Branch oder eine bestimmte Anzahl von Commits.',"","Um das zu tun führen wir den passend benannten Befehl `git fakeTeamwork` ein! Er ist ziemlich selbsterklärend, schauen wir uns ihn an ..."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Das normale Verhalten von `fakeTeamwork` ist es, einen Commit auf den entfernten `main` zu machen."],afterMarkdowns:["Da haben wir's -- der Server ist mit einem neuen Commit aktualisiert worden und wir haben ihn noch nicht lokal, weil wir weder `git fetch` noch `git pull` ausgeführt haben."],command:"git fakeTeamwork",beforeCommand:"git clone"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Du kannst auch angeben wie viele Commits oder auf welchem Branch sie gemacht werden sollen, indem du das an den Befehl anhängst."],afterMarkdowns:["Mit einem Befehlt haben wir simuliert, dass ein Kollege drei Commits auf den Branch `foo` gepackt hat."],command:"git fakeTeamwork foo 3",beforeCommand:"git branch foo; git clone"}},{type:"ModalAlert",options:{markdowns:["Die kommenden Level werden recht anspruchsvoll, daher verlangen wir auch in diesem Level schon etwas mehr.","","Leg los und erstelle ein Remote (mit `git clone`), simuliere ein paar Änderungen auf dem Server, committe lokal und dann zieh dir die Änderungen vom Server. Das ist wie mehrere Level in einem!"]}}]},ru_RU:{childViews:[{type:"ModalAlert",options:{markdowns:["## Симуляция совместной работы","","В данном уроке мы находимся в немного затруднительном положении - для выполнения ряда упражнений нам нужно обучить вас скачивать наработки и изменения, которые были сделаны в удалённом репозитории.","",'Это означает, что нам следует "сделать вид", как будто мы знаем о том, что наш удалённый репозиторий, с которым мы работаем, был изменён одним из ваших коллег / друзей / единомышленников. Это может быть какая-то ветка, либо же какой-то конкретный коммит.',"","Для того, чтобы добиться своих целей, нам предоставляется команда со звучным именем `git fakeTeamwork`! Имя команды однозначно даёт понять, что она выполняет. Давайте ознакомимся с демо..."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:['Поведение команды `fakeTeamwork` по умолчанию заключается в том, чтобы просто "инициировать" коммит на main-е'],afterMarkdowns:["Ну вот - удалённый репозиторий был изменён при помощи добавления нового коммита, и мы ещё не скачали этот коммит, потому что не запустили команду `git fetch`."],command:"git fakeTeamwork",beforeCommand:"git clone"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["В данной команде вам доступна возможность указать ветку и количество добавляемых коммитов"],afterMarkdowns:["С помощью одной лишь команды мы симулируем добавление трёх коммитов в ветку `foo` на удалённом репозитории"],command:"git fakeTeamwork foo 3",beforeCommand:"git branch foo; git clone"}},{type:"ModalAlert",options:{markdowns:["Последующие уровни будут довольно сложными, поэтому в этом упражнении от вас больше ничего не требуется.","",'Вперёд! Склонируйте удалённый репозиторий (с помощью `git clone`), симулируйте любые изменения на этом удалённом репозитории, сделайте какие-нибудь свои коммиты и затем скачайте "чужие" изменения. Это выглядит как несколько уроков в одном!']}}]},ja:{childViews:[{type:"ModalAlert",options:{markdowns:["## 連携のシミュレーション","","ここでは少し奇怪なものを取り扱います -- これは次回以降の幾つかのレッスンのためのもので、リモートセクションで変更点の反映方法を教えるのに必要なものです。","","つまり、私たちには時にはリモートの特定のブランチや特定の数のコミットを、同僚/友人/共同開発者の一人が更新した「ふりをする」ことが必要だというわけです。","","これを行うために、私たちは適切に選んだ名前のコマンド`git fakeTeamwork`を導入しました!とても明白でしょう?では、デモを見てみましょう。","","*注:もちろん、本当のgit上にこのようなコマンドは存在しません!変更は、「実在する」同僚や友人が行ってくれるでしょうから!ここではレッスンのために「擬似的に」導入しているにすぎません!*"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["`fakeTeamwork`のデフォルトの動作は、単にmainの上にコミットを乗っけるだけです"],afterMarkdowns:["ではいってみましょう -- リモートには新しいコミットが更新され、それはまだ私たちの手元にはダウンロードされていません。なぜなら、`git fetch`を走らせていませんからね。"],command:"git fakeTeamwork",beforeCommand:"git clone"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["さらに特定の数のコミット、または追加するブランチをコマンドで指定することもできます。"],afterMarkdowns:["一つのコマンドで、チームメイトが3個のコミットをリモートの`foo`ブランチにプッシュするという動作を再現することができました。"],command:"git fakeTeamwork foo 3",beforeCommand:"git branch foo; git clone"}},{type:"ModalAlert",options:{markdowns:["今後のレベルはどんどん難しくなっていくでしょうから、このレベルでも私たちはあなたに少々多くのことを求めます。","","先に行くには、リモートを作り(`git clone`で)、リモートに幾つかの変更を再現して、自身のリポジトリにコミットし、変更を取り込む必要があります。これは、このリモートのセクションでやった幾つかのレッスンの内容と似ていますね!"]}}]},uk:{childViews:[{type:"ModalAlert",options:{markdowns:["## Симулюємо співпрацю","","Зараз ми знаходимося в незручному становищі -- в деяких із наступних уроків нам потрібно буде пояснити як витягнути зміни з віддаленого репозиторію, що були туди додані іншим учасником.","",'Це означає, що нам треба "вдавати", що віддалений репозиторій був модифікований твоїм колегою / друзями / небайдужими, іноді на специфічній гілці чи коміті.',"","Щоб зробити це, ми додали влучно названу команду `git fakeTeamwork` (симуляціяКолективноїРоботи)! Насправді, з симуляцією колективної роботи стикався мабуть кожен, хто працював в колективі, тож перейдімо до прикладів..."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["За замовчуванням `fakeTeamwork` просто додасть коміт в гілку `main`."],afterMarkdowns:["Є -- до віддаленого репозиторію додався ще один коміт, проте ми ще його не звантажили, оскільки ще не виконали `git fetch`."],command:"git fakeTeamwork",beforeCommand:"git clone"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Ти також можеш вказати кількість комітів чи гілку, в яку потрібно додати коміти."],afterMarkdowns:["Виконавши одну команду ми симулювали колегу, що запушив три коміти в гілку `foo` на віддаленому репозиторії."],command:"git fakeTeamwork foo 3",beforeCommand:"git branch foo; git clone"}},{type:"ModalAlert",options:{markdowns:["Наступні рівні будуть доволі складними, тому, щоб підготуватись, на цьому рівні теж доведеться не солодко.","","Створи віддалений репозиторій (за допомогою `git clone`), зроби кілька фіктивних змін, зроби кілька комітів локально, й підвантаж віддалені зміни. Це як кілька уроків в одному!"]}}]},ko:{childViews:[{type:"ModalAlert",options:{markdowns:["## 협동 가장하기","","조금 곤란한일이 생겨버렸습니다 -- 앞으로 배울 레슨들에서 원격 저장소에서 일어난 변경들을 어떻게 로컬로 가져올것인지에 대해 배워 볼것입입니다.","",'그런데 여기서 우리는 불가피하게 그 _변경_들을 만들어야 되는데, 원격 저장소가 동료 / 친구 / 협력자등에 의해 특정 브랜치나 여러개의 커밋이 갱신되는 경우를 표현할 필요가 있습니다. 즉 우리는 팀워크를 "가장"할 필요가 있는것 입니다.',"","이런 문제를 해결하기 위해서 `git fakeTeamwork` 명령을 만들었습니다! 이름이 참 적절하죠? 예시를 통해 확인해봅시다..."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["`fakeTeamwork`의 기본 행동은 원격 main에 간단히 하나의 커밋을 하는것 입니다."],afterMarkdowns:["자, 됐습니다 -- 원격 저장소에 새로운 커밋이 갱신되었습니다. 아직 `git fetch`를 하지 않았기 때문에 로컬로 내려받아지지는 않았습니다."],command:"git fakeTeamwork",beforeCommand:"git clone"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["명령어에 추가할 커밋의 갯수나 어떤 브랜치에 추가할지 지정하는것도 가능합니다. 다음과 같이 명령어 뒤에 추가하면 됩니다."],afterMarkdowns:["하나의 명령어로 팀원이 원격저장소의 `foo` 브랜치에 세개의 커밋을 push한것처럼 가장했습니다."],command:"git fakeTeamwork foo 3",beforeCommand:"git branch foo; git clone"}},{type:"ModalAlert",options:{markdowns:["뒤의 레벨들이 조금 어렵기 때문에, 이번 레벨에서 여러분에게 조금 많은것을 요구하려고 합니다.","","원격 저장소를 하나 만들고(`git clone`), 원격 저장소에 몇가지 가짜 변경을 만들고 로컬에서 커밋하고 원격의 변경들을 가져오세요. Goal과 같은 결과가 나오면 됩니다. 몇개의 레슨이 하나에 있다고 보면 되겠네요! 도전해봅시다."]}}]},vi:{childViews:[{type:"ModalAlert",options:{markdowns:["## Mô phỏng hợp tác","","Bây giờ khó đây -- để chuẩn bị cho những bài học tới, chúng tôi cần chỉ bạn cách kéo về những cập nhật có trên kho chứa từ xa.","",'Có nghĩa là ta cần "giả vờ" kho chứa từ xa được cập nhật bởi đồng nghiệp / bạn / cộng tác viên của bạn, có khi là một nhánh xác định hoặc là một số commit.',"","Để làm điều này, chúng tôi sẽ giới thiệu cho bạn một lệnh tự tạo `git fakeTeamwork`! Cái tên nói lên tất cả, cùng xem thử bản giới thiệu..."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Hành xử mặc định của `fakeTeamwork` đơn giản là tạo ra một commit ở trên nhánh main từ xa."],afterMarkdowns:["Đó -- kho chứa từ xa đã được cập nhật thêm một commit, và ta chưa tải commit đó xuống vì ta chưa hề chạy lệnh `git fetch`."],command:"git fakeTeamwork",beforeCommand:"git clone"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Bạn cũng có thể chỉ định số lượng commit bằng cách thêm con số đằng sau câu lệnh."],afterMarkdowns:["Chỉ với một câu lệnh ta có thể giả lập tạo ra 3 commit trên nhánh `foo` từ xa của ta."],command:"git fakeTeamwork foo 3",beforeCommand:"git branch foo; git clone"}},{type:"ModalAlert",options:{markdowns:["Các cấp độ tới sẽ khá là khó, nên ở cấp độ này chúng tôi sẽ yêu cầu bạn thêm một chút.","","Sao chép một kho chứa từ xa (sử dụng `git clone`), sau đó mô phỏng một số thay đổi trong kho chứa từ xa mà bạn vừa tạo, sau đó thực hiện một số commit trên nhánh cục bộ của riêng bạn, sau đó kéo các thay đổi từ kho chứa từ xa. Nhiều bài học trong một bài."]}}]},sl_SI:{childViews:[{type:"ModalAlert",options:{markdowns:["## Simulacija sodelovanja","","Tule imamo izziv -- za nekaj naslednjih lekcij te moramo naučiti, kako potegniti dol spremembe, ki so bile narejene na oddaljenem repozitoriju.","",'To pomeni, da se moramo pravzaprav "pretvarjati", da je oddaljen branch posodobil kak sodelavec, včasih na določenem branchu ali določeno število commitov.',"","Da bi to lahko naredili, smo uvedli ukaz `git fakeTeamwork`! Poglejmo prikaz ..."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Privzeto delovanje `fakeTeamwork` je, da samo doda commit na main:"],afterMarkdowns:["Tako -- oddaljen repo je bil posodobljen z novim commitom, katerega še nismo potegnili k sebi, ker še nismo pognali ukaza `git fetch`."],command:"git fakeTeamwork",beforeCommand:"git clone"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Prav tako lahko določimo tudi število commitov ali ime brancha tako, da jih dodamo na koncu:"],afterMarkdowns:["Z enim ukazom smo simulirali sodelavca, ki je dodal tri commite na `foo` branch na našem oddaljnem repotu."],command:"git fakeTeamwork foo 3",beforeCommand:"git branch foo; git clone"}},{type:"ModalAlert",options:{markdowns:["Naslednje stopnje bodo precej težke, zato od tebe v tej stopnji zahtevamo še več.","","Naredi oddaljen repo (z `git clone`), simuliraj nekaj sprememb na tem repotu, sam commitaj, nato pa potegni dol spremembe. Kot da bi bilo več lekcij v eni!"]}}]},pl:{childViews:[{type:"ModalAlert",options:{markdowns:["## Symulacja pracy zespołowej","","Pora na małe oszustwo -- na potrzeby niektórych z nadchodzących lekcji musimy nauczyć cię, jak ściągać (pull) zmiany, które zostały wprowadzone na zdalnej gałęzi przez innych.","",'W zasadzie oznacza to, że musimy "udawać", że zdalne repozytorium zostało zaktualizowane przez jednego z twoich współpracowników / przyjaciół / współtwórców na jakiejś gałęzi lub kilku commitach.',"","Aby to zrobić, wprowadziliśmy polecenie `git fakeTeamwork`! Po polsku byłoby to symulujPracę :D -- zobaczmy, jak to działa..."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Domyślnym zachowaniem `fakeTeamwork` jest po prostu wrzucenie commita na gałąź main."],afterMarkdowns:["Proszę bardzo - zdalny serwer został zaktualizowany o nowy commit, a my jeszcze go nie pobraliśmy, ponieważ nie uruchomiliśmy `git fetch`."],command:"git fakeTeamwork",beforeCommand:"git clone"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Możesz również określić liczbę commitów lub gałąź poprzez dołączenie ich do polecenia."],afterMarkdowns:["Jednym poleceniem symulujemy, że kolega z zespołu wypycha trzy commity do gałęzi `foo` na zdalnym repozytorium."],command:"git fakeTeamwork foo 3",beforeCommand:"git branch foo; git clone"}},{type:"ModalAlert",options:{markdowns:["Kolejne poziomy będą dość trudne, więc tym razem twoje zadanie też jest bardziej wymagające.","","Nie bój się, stwórz zdalne repozytorium (używając `git clone`), zasymuluj na nim kilka zmian i zatwierdź je, a następnie ściągnij (pull) je. To jak kilka lekcji w jednej!"]}}]},it_IT:{childViews:[{type:"ModalAlert",options:{markdowns:["## Simulare la cooperazione","","La questione è la seguente -- per alcune delle prossime lezioni, dovremo insegnarti come recuperare delle modifiche effettuate al repository remoto.","",'Questo significa che dobbiamo essenzialmente "far finta" che quest\'ultimo sia stato aggiornato da uno dei nostri colleghi / amici / collaboratori, a volte in un certo ramo o per un certo numero di commit.',"","Per fare ciò, abbiamo introdotto un comando ad hoc: `git fakeTeamwork`. È abbastanza autoesplicativo, vediamo una demo..."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Il comportamento predefinito di `fakeTeamwork` consiste semplicemente nell'effettuare un commit sul main."],afterMarkdowns:["Ecco qua -- il repository remoto è stato aggiornato con un nuovo commit, e non lo abbiamo ancora scaricato in quanto non abbiamo eseguito `git fetch`."],command:"git fakeTeamwork",beforeCommand:"git clone"}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Puoi anche specificare il numero di commit o il ramo su cui effettuali specificandolo nel comando."],afterMarkdowns:["Con un comando abbiamo simulato un nostro collega che invia tre commit al ramo `foo` del repository remoto."],command:"git fakeTeamwork foo 3",beforeCommand:"git branch foo; git clone"}},{type:"ModalAlert",options:{markdowns:["I prossimi livelli saranno abbastanza tosti, quindi ti chiediamo un po' di più già da ora.","","Crea un repository remoto (con `git clone`), simula alcune modifiche su quel repository, effettua tu un commit, e poi recupera quelle modifiche. È come più lezioni in una!"]}}]}}}},{}],141:[function(e,t,o){o.level={goalTreeString:'{"branches":{"main":{"target":"C2","id":"main"},"bugFix":{"target":"C3","id":"bugFix"},"o/main":{"target":"C5","id":"o/main"},"o/bugFix":{"target":"C7","id":"o/bugFix"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C1"],"id":"C3"},"C4":{"parents":["C2"],"id":"C4"},"C6":{"parents":["C3"],"id":"C6"},"C5":{"parents":["C4"],"id":"C5"},"C7":{"parents":["C6"],"id":"C7"}},"HEAD":{"target":"bugFix","id":"HEAD"},"originTree":{"branches":{"main":{"target":"C5","id":"main"},"bugFix":{"target":"C7","id":"bugFix"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C1"],"id":"C3"},"C4":{"parents":["C2"],"id":"C4"},"C5":{"parents":["C4"],"id":"C5"},"C6":{"parents":["C3"],"id":"C6"},"C7":{"parents":["C6"],"id":"C7"}},"HEAD":{"target":"bugFix","id":"HEAD"}}}',solutionCommand:"git fetch",startTree:'{"branches":{"main":{"target":"C2","id":"main"},"bugFix":{"target":"C3","id":"bugFix"},"o/main":{"target":"C2","id":"o/main"},"o/bugFix":{"target":"C3","id":"o/bugFix"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C1"],"id":"C3"}},"HEAD":{"target":"bugFix","id":"HEAD"},"originTree":{"branches":{"main":{"target":"C5","id":"main"},"bugFix":{"target":"C7","id":"bugFix"}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C1"],"id":"C3"},"C4":{"parents":["C2"],"id":"C4"},"C5":{"parents":["C4"],"id":"C5"},"C6":{"parents":["C3"],"id":"C6"},"C7":{"parents":["C6"],"id":"C7"}},"HEAD":{"target":"bugFix","id":"HEAD"}}}',name:{en_US:"Git Fetchin'",fr_FR:"Git fetch",de_DE:"Git Fetch",ja:"Git Fetch",es_AR:"git fetch",es_MX:"Git fetch",es_ES:"git fetch",pt_BR:"Git Fetch",gl:"Git Fetch",zh_CN:"Git Fetch",zh_TW:"git fetch",ru_RU:"Git fetch",uk:"Git fetch",ko:"Git Fetch",vi:"Git Fetch",sl_SI:"Git Fetch",pl:"Git fetch",it_IT:"Git Fetch"},hint:{en_US:"just run git fetch!",fr_FR:"Exécuter juste git fetch",de_DE:"Einfach git fetch ausführen!",ja:"単にgit fetchを実行!",es_AR:"Simplemente ¡hacé git fetch!",es_MX:"Simplemente ¡escribe git fetch!",es_ES:"Simplemente ¡escribe git fetch!",pt_BR:"Simplesmente chame git fetch!",gl:"¡Sinxelamente fai git fetch!",zh_CN:"只需要运行 git fetch 命令!",zh_TW:"只要下 git fetch 指令",ru_RU:"Просто выполните git fetch!",uk:"Просто виконай git fetch!",ko:"그냥 git fetch를 하세요!",vi:"Gõ git fetch là được!",sl_SI:"Le izvedi git fetch!",pl:"Po prostu uruchom git fetch!",it_IT:"Semplicemente git fetch!"},startDialog:{en_US:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Fetch","","Working with git remotes really just boils down to transferring data _to_ and _from_ other repositories. As long as we can send commits back and forth, we can share any type of update that is tracked by git (and thus share work, new files, new ideas, love letters, etc.).","","In this lesson we will learn how to fetch data _from_ a remote repository -- the command for this is conveniently named `git fetch`.","","You'll notice that as we update our representation of the remote repository, our _remote_ branches will update to reflect that new representation. This ties into the previous lesson on remote branches."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Before getting into the details of `git fetch`, let's see it in action! Here we have a remote repository that contains two commits that our local repository does not have."],afterMarkdowns:["There we go! Commits `C2` and `C3` were downloaded to our local repository, and our remote branch `o/main` was updated to reflect this."],command:"git fetch",beforeCommand:"git clone; git fakeTeamwork 2"}},{type:"ModalAlert",options:{markdowns:["### What fetch does","","`git fetch` performs two main steps, and two main steps only. It:","","* downloads the commits that the remote has but are missing from our local repository, and...","* updates where our remote branches point (for instance, `o/main`)","","`git fetch` essentially brings our _local_ representation of the remote repository into synchronization with what the _actual_ remote repository looks like (right now).","","If you remember from the previous lesson, we said that remote branches reflect the state of the remote repositories _since_ you last talked to those remotes. `git fetch` is the way you talk to these remotes! Hopefully the connection between remote branches and `git fetch` is apparent now.","","`git fetch` usually talks to the remote repository through the Internet (via a protocol like `http://` or `git://`).",""]}},{type:"ModalAlert",options:{markdowns:["### What fetch doesn't do","","`git fetch`, however, does not change anything about _your_ local state. It will not update your `main` branch or change anything about how your file system looks right now.","","This is important to understand because a lot of developers think that running `git fetch` will make their local work reflect the state of the remote. It may download all the necessary data to do that, but it does _not_ actually change any of your local files. We will learn commands in later lessons to do just that :D","","So at the end of the day, you can think of running `git fetch` as a download step."]}},{type:"ModalAlert",options:{markdowns:["To finish the level, simply `git fetch` and download all the commits!"]}}]},fr_FR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Fetch","","Travailler avec les dépôts Git distants se résume en pratique à transférer nos données _depuis_ et _vers_ ces autres dépôts. Etant donné que nous pouvons envoyer des commits en avance et en retard, nous pouvons partager tous les types de mises à jour qui sont gérés par Git (et donc partager notre travail, de nouveaux fichiers, de nouvelles idées, des lettres d'amour, etc.).","","Dans cette leçon nous allons apprendre comment rapporter (fetch) des données _depuis_ un dépôt distant vers le nôtre : la commande pour cela est astucieusement dénommée `git fetch`.","","Vous allez remarquer qu'au moment où nous mettons à jour notre version du dépôt distant, nos branches _distantes_ vont se mettre à jour pour refléter cette nouvelle représentation. Cela est lié à la leçon précédente sur les branches distantes."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Avant d'entrer dans les détails de `git fetch`, voyons-le en action ! Ici nous avons un dépôt distant qui contient deux commits que notre dépôt local n'a pas."],afterMarkdowns:["Voilà ! Les commits `C2` et `C3` ont été téléchargés dans notre dépôt local, et notre branche distante `o/main` a été mise à jour pour refléter cela."],command:"git fetch",beforeCommand:"git clone; git fakeTeamwork 2"}},{type:"ModalAlert",options:{markdowns:["### Ce que fetch fait","","`git fetch` procède en deux étapes principales, ni plus ni moins. Cela :","","* télécharge les commits que le dépôt distant possède mais qui ne sont pas dans le nôtre, puis...","* met à jour nos branches distantes (par exemple, `o/main`).","","`git fetch` prend en fait notre représentation _locale_ du dépôt distant pour la synchroniser avec ce à quoi le dépôt distant ressemble _réellement_ (à ce moment-là).","","Si vous vous rappelez de la précédente leçon, nous avons dit que les branches distantes reflètent l'état du dépôt distant _depuis_ la dernière fois où vous avez parlé à ces branches distantes. `git fetch` est le moyen de parler à ces branches distantes ! La relation entre `git fetch` et les branches distantes devrait vous sembler claire maintenant.","","`git fetch` contacte le dépôt distant par Internet (via un protocole comme `http://` ou `git://`).",""]}},{type:"ModalAlert",options:{markdowns:["### Ce que fetch ne fait pas","","`git fetch`, cependant, ne change rien à _votre_ état local. Il ne met pas à jour votre branche `main` et ne va pas changer quelque chose aux fichiers qui se trouvent actuellement dans votre répertoire de travail.","","C'est important à comprendre car beaucoup de développeurs pensent qu'exécuter `git fetch` va mettre leur dépôt local dans le même état que le distant. Cela peut télécharger toutes les données nécessaires pour le faire, mais cela ne change en réalité _rien_ sur vos fichiers locaux. Les prochains niveaux seront justement dédiés aux commandes qui permettent de le faire :D","","Finalement, vous pouvez vous représenter `git fetch` comme une étape de téléchargement."]}},{type:"ModalAlert",options:{markdowns:["Pour finir ce niveau, exécuter simplement `git fetch` et téléchargez tous les commits !"]}}]},es_AR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Fetch","","Trabajar con remotos en git en realidad se reduce a transferir datos _de_ y _hacia_ otros repositorios. Mientras podamos mandar commits de un lado al otro, podemos compartir cualquier tipo de actualización registrada por git (y, por ende, compartir trabajo, archivos nuevos, ideas nuevas, cartas de amor, etc).","","En esta lección aprenderemos cómo traer (hacer `fetch`) datos _desde_ un repositorio remoto - el comando para esto se llama, convenientemente, `git fetch`).","","Vas a notar que a medida que actualicemos nuestra representación de nuestro repositorio remoto, nuestras ramas _remotas_ van a actualizarse para reflejar esa nueva representación. Esto está ligado a la lección anterior sobre ramas remotas."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Antes de entrar en los detalles de `git fetch`, veámoslo en acción. Acá tenemos un repositorio remoto que contiene dos commits que nuestro repositorio local no tiene."],afterMarkdowns:["¡Ahí vamos! Bajamos los commits `C2` y `C3` a nuestro repositorio local, y nuestra rama remota `o/main` fue actualizada para reflejar este cambio."],command:"git fetch",beforeCommand:"git clone; git fakeTeamwork 2"}},{type:"ModalAlert",options:{markdowns:["### ¿Qué hace fetch?","","`git fetch` hace dos simples pasos, y sólo dos simples pasos:","","* baja los commits que el remoto tiene pero no están en nuestro repositorio local, y...","* actualiza a dónde apuntan nuestras ramas remotas (por ejemplo, `o/main`)","","`git fetch` esencialmente sincroniza nuestra representación _local_ del repositorio remoto con el _verdadero_ estado del repositorio remoto (en este momento).","","Si recordás la lección anterior, dijimos que las ramas remotas reflejan el estado de los repositorios remotos _desde_ la última vez que hablaste con ellos. ¡`git fetch` es la manera en que hablás con esos remotos! Espero que ahora esté clara la conexión entre las ramas remotas y `git fetch`.","","Usualmente, `git fetch` habla con el repositorio a través de internet (usando un protocolo como `http://` o `git://`).",""]}},{type:"ModalAlert",options:{markdowns:["### ¿Qué *no* hace fetch?","","Sin embargo, `git fetch` no modifica en absoluto _tu_ estado local. No va a actualizar tu rama `main` ni va a cambiar nada sobre cómo se ve tu sistema de archivos en este momento.","","Es importante entender esto, porque un montón de desarrolladores piensan que correr `git fetch` hará que su estado local refleje el estado del remoto. `git fetch` puede descargar los datos necesarios para hacerlo, pero *no* cambia ninguno de tus archivos locales. Vamos a aprender otros comandos para hacer eso más adelante :D","","Entonces, después de todo, podés pensar a `git fetch` como un paso de descarga."]}},{type:"ModalAlert",options:{markdowns:["Para completar este nivel, simplemente corré `git fetch` y bajate todos los commits."]}}]},es_MX:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Fetch","","Trabajar con remotos en git en realidad se reduce a transferir datos _de_ y _hacia_ otros repositorios. Mientras podamos mandar commits de un lado a otro, podemos compartir cualquier tipo de actualización monitoreada por git (y, por lo tanto, compartir trabajo, archivos nuevos, ideas nuevas, cartas de amor, etc.).","","En esta lección vamos a aprender cómo traer datos _desde_ un repositorio remoto - el comando para esto se llama, `git fetch`.","","Vas a notar que a medida que actualicemos nuestra representación del repositorio remoto, nuestras ramas _remotas_ van a actualizarse para reflejar esa nueva representación. Esto va ligado a la lección anterior sobre ramas remotas."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Antes de entrar en los detalles de `git fetch`, veámoslo en acción. Aquí tenemos un repositorio remoto que contiene dos commits que nuestro repositorio local no tiene."],afterMarkdowns:["¡Ahí está! Descargamos los commits `C2` y `C3` a nuestro repositorio local, y nuestra rama remota `o/main` fue actualizada para reflejar este cambio."],command:"git fetch",beforeCommand:"git clone; git fakeTeamwork 2"}},{type:"ModalAlert",options:{markdowns:["### ¿Qué hace fetch?","","`git fetch` hace principalmente dos pasos, y sólo esos dos pasos:","","* descarga los commits que el remoto tiene pero no están en nuestro repositorio local, y...","* actualiza a dónde apuntan nuestras ramas remotas (por ejemplo, `o/main`)","","`git fetch` escencialmente pone nuestra representación _local_ del repositorio remoto en sincronía con el _verdadero_ estado del repositorio remoto (en ese momento).","","Si recuerdas la lección anterior, dijimos que las ramas remotas reflejan el estado de los repositorios remotos _desde_ la última vez que te comunicaste con ellos. ¡`git fetch` es la manera con la que te comunicas con esos remotos! Espero que la relación entre las ramas remotas y `git fetch` sea evidente ahora.","","`git fetch` usualmente habla con el repositorio remoto a través de internet (mediante un protocolo como `http://` o `git://`).",""]}},{type:"ModalAlert",options:{markdowns:["### ¿Qué *no* hace fetch?","","Sin embargo, `git fetch` no modifica en nada _tu_ estado local. No va a actualizar tu rama `main` ni va a cambiar nada sobre cómo se ve tu sistema de archivos en ese momento.","","Es importante entender esto, porque un montón de desarrolladores piensan que correr `git fetch` hará que su trabajo local refleje el estado del remoto. Puede que `git fetch` descargue los datos necesarios para hacerlo, pero realmente *no* cambia ninguno de tus archivos locales. Vamos a aprender otros comandos para hacer eso más adelante. :D","","Así que, a fin de cuentas, puedes imaginar a `git fetch` como un proceso de descarga."]}},{type:"ModalAlert",options:{markdowns:["Para completar este nivel, simplemente ejecuta `git fetch` y descarga todos los commits."]}}]},es_ES:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Fetch","","Trabajar con remotos en git en realidad se reduce a transferir datos _de_ y _hacia_ otros repositorios. Mientras podamos mandar commits de un lado al otro, podemos compartir cualquier tipo de actualización registrada por git (y, por ende, compartir trabajo, archivos nuevos, ideas nuevas, cartas de amor, etc).","","En esta lección aprenderemos cómo traer (hacer `fetch`) datos _desde_ un repositorio remoto - el comando para esto se llama, convenientemente, `git fetch`).","","Vas a notar que a medida que actualicemos nuestra representación de nuestro repositorio remoto, nuestras ramas _remotas_ van a actualizarse para reflejar esa nueva representación. Esto está ligado a la lección anterior sobre ramas remotas."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Antes de entrar en los detalles de `git fetch`, veámoslo en acción. Aquí tenemos un repositorio remoto que contiene dos commits que nuestro repositorio local no tiene."],afterMarkdowns:["¡Allá vamos! Bajamos los commits `C2` y `C3` a nuestro repositorio local, y nuestra rama remota `o/main` fue actualizada para reflejar este cambio."],command:"git fetch",beforeCommand:"git clone; git fakeTeamwork 2"}},{type:"ModalAlert",options:{markdowns:["### ¿Qué hace fetch?","","`git fetch` hace dos simples pasos, y sólo dos simples pasos:","","* baja los commits que el remoto tiene pero no están en nuestro repositorio local, y...","* actualiza a dónde apuntan nuestras ramas remotas (por ejemplo, `o/main`)","","`git fetch` escencialmente sincroniza nuestra representación _local_ del repositorio remoto con el _verdadero_ estado del repositorio remoto (en este momento).","","Si recuerdas la lección anterior, dijimos que las ramas remotas reflejan el estado de los repositorios remotos _desde_ la última vez que hablaste con ellos. ¡`git fetch` es la manera en la que hablas con esos remotos! Espero que ahora esté clara la conexión entre las ramas remotas y `git fetch`.","","Usualmente, `git fetch` habla con el repositorio a través de internet (usando un protocolo como `http://` o `git://`).",""]}},{type:"ModalAlert",options:{markdowns:["### ¿Qué *no* hace fetch?","","Sin embargo, `git fetch` no modifica en absoluto _tu_ estado local. No va a actualizar tu rama `main` ni va a cambiar nada sobre cómo se ve tu sistema de archivos en este momento.","","Es importante entender esto, porque un montón de desarrolladores piensan que correr `git fetch` hará que su estado local refleje el estado del remoto. `git fetch` puede descargar los datos necesarios para hacerlo, pero *no* cambia ninguno de tus archivos locales. Vamos a aprender otros comandos para hacer eso más adelante :D","","Entonces, después de todo, puedes pensar sobre `git fetch` como un proceso de descarga."]}},{type:"ModalAlert",options:{markdowns:["Para completar este nivel, simplemente ejecuta `git fetch` y bájate todos los commits."]}}]},pt_BR:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Fetch","","Trabalhar com remotos no Git, no final das contas, se resume a transferir dados _de_ e _para_ outros repositórios. Desde que possamos enviar commits para um lado e para o outro, poderemos compartilhar qualquer tipo de atualização que seja gerenciada pelo Git (e portanto compartilhar trabalho, novos arquivos, novas ideias, cartas de amor, etc).","","Nesta lição vamos aprender como baixar dados _de_ um repositório remoto -- o comando para isso é convenientemente chamado de `git fetch`.","","Você perceberá que conforme atualizarmos a representação do repositório remoto, nossos ramos _remotos_ atualizar-se-ão para refletir essa nova representação. Isso tem a ver com o que vimos na lição anterior sobre ramos remotos."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Antes de entrar nos detalhes do `git fetch`, vejamo-no em ação! Aqui temos um repositório remoto que contém dois commits que nosso repositório local não possui."],afterMarkdowns:["Lá vamos nós! Os commits `C2` e `C3` foram baixados para o nosso repositório local, e nosso ramo remoto `o/main` foi atualizado para refletir esse fato."],command:"git fetch",beforeCommand:"git clone; git fakeTeamwork 2"}},{type:"ModalAlert",options:{markdowns:["### O que o fetch faz","","O `git fetch` realiza dois passos principais, e somente estes dois passos principais. Ele:","","* Baixa os commits que o repositório remoto possui mas que estão faltando no repositório local, e...","* Atualiza a referência para a qual os ramos remotos (por exemplo, `o/main`) estão apontando","","O `git fetch` essencialmente faz com que nossa representação _local_ do repositório remoto fique sincronizada com a forma com que o repositório remoto _de fato_ se parece (naquele momento).","","Se você lembrar da lição anterior, nós dissemos que os ramos remotos refletem o estado dos repositórios remotos _desde a última vez_ na qual você falou com esses repositórios. O `git fetch` é a única forma de falar com esses repositórios remotos! Espero que a conexão entre os ramos remotos e o `git fetch` esteja clara agora.","","O `git fetch` geralmente conversa com o repositório remoto por meio da Internet (usando um protocolo como `http://` ou `git://`).",""]}},{type:"ModalAlert",options:{markdowns:["### O que o fetch NÃO faz","","O `git fetch`, no entanto, não muda nada do estado _local_ do repositório. Ele não atualiza o seu ramo `main` nem muda nada na forma como o seu sistema de arquivos está no momento.","","É importante entender isso, pois muitos desenvolvedores pensam que executar `git fetch` fará com que o trabalho local reflita o estado do repositório remoto. Ele pode até baixar todos os dados necessários para fazê-lo, mas ele _não_ muda de fato nenhum dos arquivos locais. Vamos aprender comandos para fazê-lo nas lições a seguir :D","","No final das contas, você pode pensar no `git fetch` como um passo de download."]}},{type:"ModalAlert",options:{markdowns:["Para terminar este nível, simplesmente execute `git fetch` e baixe todos os commits!"]}}]},gl:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Fetch","","Traballar con respositorios remotos en Git, a fin de contas, resúmese en transferir datos _dun_ repositorio _cara_ outros repositorios. Dende que podemos enviar commits dun lado cara o outro, poderemos compartir calquera tipo de actualización que sexa xerada por git (e polo tanto compartir o traballo, novos arquivos, novas ideas, cartas de amor, etc).","","Nesta lección imos aprender como baixar os cambios _dun_ repositorio remoto -- o comando para iso é `git fetch`.","","Percibirás que conforme atualizamos a representación do repositorio remoto, as nosas ramas _remotas_ actualizaranse para reflexar a nova representación. Iso ten que ver co que vimos na lección anterior sobre as ramas remotas."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Ántes de entrar nos detalles de `git fetch`, vexámolo en acción! Aquí temos un repositorio remoto que contén dous commits que o noso repositorio local non ten."],afterMarkdowns:["Alá imos! Os commits `C2` e `C3` baixáronse ó noso repositorio local, e a nosa rama `o/main` actualizouse para reflexar ese cambio."],command:"git fetch",beforeCommand:"git clone; git fakeTeamwork 2"}},{type:"ModalAlert",options:{markdowns:["### O que fai o fetch","","`git fetch` fai dous pasos pasos principais, e soamente estes dous pasos princpipais. Son:","","* Baixa os commits que o repositório remoto contén pero non temos nos no noso repositoiro local, e...","* Actualiza a referencia nas ramas remotas (por exemplo, `o/main`) nas que se está apuntando","","`git fetch` esencialmente fai que a nosa representación _local_ do repositorio remoto se sincronice ca forma que posúe o repositorio remoto, _de feito_ parecese (nese momento).","","Se ti lembras a lección anterior, nos dixemos que as ramas remotas reflexan o estado dos repositorios remotos _dende a última vez_ na que ti fixeches un commit dese repositorio. O `git fetch` é a única forma de falar con eses repositorios remotos! Agardo que a conexión entre as ramas remotas e o `git fetch` esté clara dabondo agora.","","`git fetch` xeralmente fala co repositorio remoto por medio da rede (usando un protocolo como `http://`, `git://` ou `ssh`).",""]}},{type:"ModalAlert",options:{markdowns:["### O que fetch NON fai","","`git fetch`, por agora, non cambia nada no estado _local_ do repositorio. El solo actualiza a rama `main` sen facer cambios na forma de cómo está o teu sistema de arquivos nese momento.","","É importante entender iso, xa que moitos desenvolvedores pensan que executar `git fetch` fará que o traballo local se vexa modificado polo repositorio remoto. El pode que baixara todos os cambios necesarios para facelo, pero, o comando _non_ cambia cómo están os teus arquivos locais. Imos aprender comandos para facer esas conexións :D","","A fin de contas, ti podes pensar en `git fetch` como unha descarga."]}},{type:"ModalAlert",options:{markdowns:["Para rematar este nivel, so executa `git fetch` e baixa todos os commits!"]}}]},zh_TW:{childViews:[{type:"ModalAlert",options:{markdowns:["## git fetch","","透過 git remote 其實就是把資料接收或傳送到其它的 repository,只要我們可以將資料傳進及傳出,我們就可以分享任何被 git 所追蹤的 repository 的更新(例如分享工作進度,新的檔案,新的想法,以及情書等等...)。","","在這個教學中,我們會學習到如何從 remote repository 來 fetch (抓取)資料,這個指令叫作 `git fetch`。","","你將會注意到當我們的 remote repository 更新的時候,相對應的 _remote_ branch 也會反映該更新,這個跟我們之前所提到的 remote branch 的特性是吻合的。"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["在講到 `git fetch` 的細節之前,我們要先來看一下例子!在這裡我們有一個新增了兩個 commit 的 remote repository,而且我們的 local repository 並沒有包含這兩個 commit。"],afterMarkdowns:["看吧!commit `C2` 以及 `C3` 已經被下載到我們的 local repository,而且我們的 remote branch `o/main` 也更新了。"],command:"git fetch",beforeCommand:"git clone; git fakeTeamwork 2"}},{type:"ModalAlert",options:{markdowns:["### fetch 做了什麼","","`git fetch` 只有執行了兩個主要步驟,包含:","","* 下載 remote 有的 commit,但是在我們的 local repository 是沒有該 commit。還有...","* 更新我們 remote branch 所指向的地方(例如, `o/main`)","","基本上,`git fetch` 同步了我們的 local repository 以及 remote repository 的最新狀態。","","假如你還記得之前的教學的話,我們說過 remote branch 反映了 remote repository 的狀態,原因在於說你最後接觸的是這些 remote repository,而你就是利用 `git fetch` 來接觸這些 remote repository!現在 remote branch 跟 `git fetch` 的關係已經很明顯了。","","`git fetch` 通常是透過網路來跟 remote 溝通(透過一個 protocol (協定),例如 `http://` 或者是 `git://`)。",""]}},{type:"ModalAlert",options:{markdowns:["### fetch 沒有做的事情","","然而,`git fetch` 並不會影響到在你的 local repository 中的 `main` branch,他並不會將你的 `main` branch 更新到最新的狀態。","","這個觀念很重要,因為很多程式設計師以為 `git fetch` 可以讓他們在 local repository 上面的工作跟 remote repository 的工作可以同步。它是會下載同步所需的資料,但是不會更新任何的檔案,我們會在後面的教學中提到如何做到這件事情。:D","","因此,你可以把 `git fetch` 想成是在下載資料。"]}},{type:"ModalAlert",options:{markdowns:["要完成這一關,只要透過 `git fetch` 並且下載全部的 commit 即可!"]}}]},zh_CN:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Fetch","","Git 远程仓库相当的操作实际可以归纳为两点:向远程仓库传输数据以及从远程仓库获取数据。既然我们能与远程仓库同步,那么就可以分享任何能被 Git 管理的更新(因此可以分享代码、文件、想法、情书等等)。","","本节课我们将学习如何从远程仓库获取数据 —— 命令如其名,它就是 `git fetch`。","","你会看到当我们从远程仓库获取数据时, 远程分支也会更新以反映最新的远程仓库。在上一节课程中我们已经提及过这一点了。"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["在解释 `git fetch` 前,我们先看看实例。这里我们有一个远程仓库, 它有两个我们本地仓库中没有的提交。"],afterMarkdowns:["就是这样了! `C2`,`C3` 被下载到了本地仓库,同时远程分支 `o/main` 也被更新,反映到了这一变化"],command:"git fetch",beforeCommand:"git clone; git fakeTeamwork 2"}},{type:"ModalAlert",options:{markdowns:["### git fetch 做了些什么","","`git fetch` 完成了仅有的但是很重要的两步:","","* 从远程仓库下载本地仓库中缺失的提交记录","* 更新远程分支指针(如 `o/main`)","","`git fetch` 实际上将本地仓库中的远程分支更新成了远程仓库相应分支最新的状态。","","如果你还记得上一节课程中我们说过的,远程分支反映了远程仓库在你**最后一次与它通信时**的状态,`git fetch` 就是你与远程仓库通信的方式了!希望我说的够明白了,你已经了解 `git fetch` 与远程分支之间的关系了吧。","","`git fetch` 通常通过互联网(使用 `http://` 或 `git://` 协议) 与远程仓库通信。",""]}},{type:"ModalAlert",options:{markdowns:["### git fetch 不会做的事","","`git fetch` 并不会改变你本地仓库的状态。它不会更新你的 `main` 分支,也不会修改你磁盘上的文件。","","理解这一点很重要,因为许多开发人员误以为执行了 `git fetch` 以后,他们本地仓库就与远程仓库同步了。它可能已经将进行这一操作所需的所有数据都下载了下来,但是**并没有**修改你本地的文件。我们在后面的课程中将会讲解能完成该操作的命令 :D","","所以, 你可以将 `git fetch` 的理解为单纯的下载操作。"]}},{type:"ModalAlert",options:{markdowns:["要完成本关,只需用 `git fetch` 下载所有的提交!"]}}]},de_DE:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Fetch","","In Git mit entfernten Repositorys zu arbeiten lässt sich wirklich auf das Hin- und Zurückübertragen von Daten reduzieren. Solange wir Commits hin und her schicken können, können wir jede Art Update teilen, das von Git getrackt wird (und somit Arbeit, neue Dateien, neue Ideen, Liebesbriefe etc. teilen).","","In diesem Level werden wir lernen, wie man Daten _von_ einem entfernten Repository holt -- der entsprechende Befehl heißt `git fetch`.","","Dir wird auffallen, dass mit der Aktualisierung unserer Darstellung des entfernten Repositorys die _Remote_ Branches auf den neuesten Stand gebracht werden. Das passt zum vorherigen Level über Remote Branches."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Bevor wir uns die Einzelheiten von `git fetch` ansehen wollen wir es mal in Aktion sehen. Wir haben hier ein entferntes Repository, das zwei Commits hat, die in unserem lokalen Repository fehlen."],afterMarkdowns:["Das war's! Die Commits `C2` und `C3` wurden zu unserem Repository heruntergeladen und unser Remote Branch `o/main` wurde aktualisiert."],command:"git fetch",beforeCommand:"git clone; git fakeTeamwork 2"}},{type:"ModalAlert",options:{markdowns:["### Was Fetch tut","","`git fetch` führt genau zwei Schritte aus:","","* Es lädt die Commits herunter, die im lokalen Repository fehlen, und ...","* aktualisiert die Remote Branches wo nötig (zum Beispiel `o/main`).","","`git fetch` synchronisiert im Prinzip unsere _lokale_ Abbildung des entfernten Repositorys mit dem, wie das entfernte Repository _tatsächlich_ aussieht (in diesem Moment).","","Wie du dich vielleicht erinnerst, haben wir im letzten Level gesagt, dass die Remote Branches den Zustand der Branches auf dem entfernten Repository darstellen _seit_ du das letzte Mal dieses Repository angesprochen hast. `git fetch` ist die Methode mit der du das Repository ansprichst! Der Zusammenhang zwischen Remote Branches und `git fetch` ist damit hoffentlich klar.","","`git fetch` kommuniziert mit dem entfernten Repository in der Regel über das Internet (über ein Protokoll wie `http://` oder `git://`).",""]}},{type:"ModalAlert",options:{markdowns:["### Was Fetch nicht tut","","`git fetch` ändert allerdings überhaupt nichts an _deinen_ lokalen Branches. Es aktualisiert nicht deinen `main` oder ändert irgendetwas an deinem Checkout.","","Das ist wichtig zu wissen, denn eine Menge Entwickler glauben, wenn sie `git fetch` ausführen, würden ihre lokalen Branches auf den Stand des entfernten Repositorys gebracht. Es lädt zwar alle Daten herunter, damit man diese Aktualisierung durchführen kann, aber es ändert _nichts_ an deinen lokalen Branches. Wir werden in späteren Level Befehle genau dafür kennenlernen. :D","","Am Ende des Tages kannst du dir `git fetch` also als den Download-Schritt vorstellen."]}},{type:"ModalAlert",options:{markdowns:["Um diesen Level zu schaffen musst du einfach nur `git fetch` ausführen, um alle Commits herunterzuladen!"]}}]},ja:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Fetch","","リモートGitを用いた作業は、本当にただ単なる他のリポジトリ_への_、または他のリポジトリ_からの_データの転送に集約されます。コミットを転送できる限り、Gitで管理されている全ての種類の更新が共有できます(例えば作業や、新しいファイル、新しいアイデア、ラブレターなどです)。","","このレベルでは、リモートリポジトリ_から_データを取ってくる方法を学びます -- このコマンドは`git fetch`と名付けられています。","","リモートリポジトリの情報を私たちが更新するように、_リモート_ブランチも情報を更新することができることが分かるでしょう。これは前のレッスンでのリモートブランチの働きに結びつきます。"]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["`git fetch`の説明に入る前に、その動作を見てみましょう。ここに、ローカルリポジトリにない二個のコミットを含んでいるリモートブランチがあります。"],afterMarkdowns:["やりました!`C2`、`C3`コミットがローカルリポジトリにダウンロードされ、`o/main`リモートブランチに反映されました。"],command:"git fetch",beforeCommand:"git clone; git fakeTeamwork 2"}},{type:"ModalAlert",options:{markdowns:["### fetchとはどのようなものか","","`git fetch`は、主に二つのステップだけで動作します。それは以下のようなものです:","","* リモートにあってローカルリポジトリにないコミットをダウンロードする","* リモートブランチの位置を更新する(例えば、`o/main`)","","`git fetch`は本質的には、_実際_のリモートリポジトリと同じように見えるような形でリモートリポジトリの_ローカル_の情報に同期します(ちょうど今のように)。","","前のレッスンでのことを覚えていると思いますが、リモートブランチはリモートと最後に同期した時点での状態を保持しているという話をしました。`git fetch`はそのリモートと同期する方法なのです!これでリモートブランチと`git fetch`の関係性は明らかになったでしょう?","","`git fetch`は、通常インターネットを通してリモートリポジトリと対話します(`http://`または`git://`プロトコル経由で)。",""]}},{type:"ModalAlert",options:{markdowns:["### fetchがしてくれないもの","","`git fetch`は、しかしながら、_あなたの_ローカルの状態は変更しません。あなたの`main`ブランチや他のもの、今現在のあなたのファイルシステムが見せているものを更新しないのです。","","これは理解する上で重要なことです。なぜなら、多くの技術者は`git fetch`がリモートの状態をローカルの作業場に反映してくれると思っているからです。必要なデータはダウンロードされるかもしれませんが、ローカルのファイルを実際に変更するというようなことは_してくれない_のです。私たちは、この後のレッスンでもこのようなコマンドを学びます :D","","なので、この1日が終わる頃には、あなたは`git fetch`のダウンロードステップの動作が分かるようになるでしょう。"]}},{type:"ModalAlert",options:{markdowns:["このレベルを終えるには、単に`git fetch`を実行し、全てのコミットをダウンロードしてください。"]}}]},ru_RU:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Fetch","","Работа с удалёнными git репозиториями сводится к передаче данных _в_ и _из_ других репозиториев. До тех пор, пока мы можем отправлять коммиты туда-обратно, мы можем делиться любыми изменениями, которые отслеживает git (следовательно, делиться новыми файлами, свежими идеями, любовными письмами и т.д.).","","В этом уроке вы научитесь тому, как извлекать данные _из_ удалённого репозитория - и для этого у нас есть соответствующая команда `git fetch`.","","Вы увидите, что как только мы изменим представление нашего удалённого репозитория, наши _удалённые_ ветки обновятся соответствующим образом и отобразят это представление. Это связывает воедино предыдущий урок про удалённые репозитории."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Прежде чем углубляться в детали команды `git fetch`, давайте взглянем на её визуализацию в действии! Здесь у нас имеется удалённый репозиторий, который содержит в себе два коммита, отсутствующих в нашем локальном репозитории."],afterMarkdowns:["Вот и всё! Коммиты `C2` и `C3` были успешно скачаны в наш локальный репозиторий, и наша удалённая ветка `o/main` отобразила эти изменения соответствующим образом."],command:"git fetch",beforeCommand:"git clone; git fakeTeamwork 2"}},{type:"ModalAlert",options:{markdowns:["### Что делает fetch","","`git fetch` выполняет две и только две основные операции. А именно:","","* связывается с указанным удалённым репозиторием и забирает все те данные проекта, которых у вас ещё нет, при этом...","* у вас должны появиться ссылки на все ветки из этого удалённого репозитория (например, `o/main`)","","Фактически, `git fetch` синхронизирует _локальное_ представление удалённых репозиториев с тем, что является _актуальным_ на текущий момент времени.","","Насколько вы помните, в предыдущем уроке мы сказали, что удалённые ветки отображают состояние удалённых репозиториев _на тот момент_ когда вы 'общались' с ними в последний раз. `git fetch` является тем механизмом, который даёт вам возможность общаться с удалёнными репозиториями! Надеюсь, что связь между удалёнными ветками и командой `git fetch` теперь прояснилась.","","`git fetch` обычно 'общается' с удалёнными репозиториями посредством Интернета (через такие протоколы, как `http://` или `git://`).",""]}},{type:"ModalAlert",options:{markdowns:["### Чего fetch не делает","","Важно отметить, что команда `git fetch` забирает данные в ваш _локальный_ репозиторий, но не сливает их с какими-либо вашими наработками и не модифицирует то, над чем вы работаете в данный момент.","","Важно это помнить и понимать, потому что многие разработчики думают, что, запустив команду `git fetch`, они приведут всю свою локальную работу к такому же виду, как и на удалённом репозитории. Команда всего лишь скачивает все необходимые данные, но вам потребуется вручную слить эти данные с вашими, когда вы будете готовы. В следующих уроках мы научимся это делать :D","","Одним словом, вы можете относиться к `git fetch` как к процедуре скачивания."]}},{type:"ModalAlert",options:{markdowns:["Чтобы выполнить уровень, просто запустите `git fetch` и скачайте все коммиты!"]}}]},uk:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Fetch","","Робота з віддаленими git-репозиторіями зводиться до передачі данних _до_ та _з_ інших репозиторіїв. Можливість передавати коміти дозволяє нам ділитися будь-якою інформацією, що відслідковується gitом (а отже, виконаною роботою, новими файлами, ідеями, листами, тощо).","","На цьому уроці ми навчимося витягати дані _з_ віддаленого репозиторію -- команда, що відповідає за це, зручно називається `git fetch` (fetch - англ. витягнути чи дістати).","","Зауваж, що коли ми оновлюємо наш віддалений репозиторій, наші _віддалені_ гілки теж оновляться. Про це ми говорили на попередньому уроці."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Перед тим, як почати розбиратися з `git fetch`, спробуймо його в дії! Тут ми маємо віддалений репозиторій, що містить два коміти, яких немає в нашому локальному сховищі."],afterMarkdowns:["Ось, маєш! Коміти `C2` та `C3` було завантажено до нашого локального сховища й наша віддалена гілка `o/main` була відповідно оновлена."],command:"git fetch",beforeCommand:"git clone; git fakeTeamwork 2"}},{type:"ModalAlert",options:{markdowns:["### Що робить fetch","","`git fetch` виконує дві основні дії, і тільки дві дії. Він:","","* звантажує коміти, які містить віддалене сховище, але яких немає в локальному сховищі, та...","* оновлює посилання віддаленого бранчу (наприклад, `o/main`)","","Якщо коротко, `git fetch` приводить репрезентацію віддаленого репозиторію в локальному сховищі до _актуального_ стану справжнього віддаленого репозиторію.","","Якщо ти пам’ятаєш з попереднього уроку, ми тоді зауважили, що віддалені гілки відображають стан віддаленого репозиторію _від_ останнього разу, коли ми синхронізувались з віддаленим репозиторієм. `git fetch` якраз і відповідає за синхронізацію з віддаленим сховищем! Сподіваюсь, що зв’язок між віддаленими гілками `git fetch` тепер є очевидним.","","Як правило, `git fetch` працює з віддаленими сховищами через інтернет (через протоколи `http://` чи `git://`).",""]}},{type:"ModalAlert",options:{markdowns:["### Чого не робить fetch","","Тим не менш, `git fetch` нічого не змінює в _твоєму_ локальному стані. Він не оновить твою гілку `main` і не змінить того, як наразі виглядає локальна файлова система.","","Це важливо зрозуміти, тому що багато розробників думають, що `git fetch` оновить їхні локальні данні до стану віддаленого репозиторію. Він дійсно звантажить всі потрібні дані, щоб це зробити, але він _не змінить_ автоматично жодних локальних файлів. Ми вивчимо команди, які це роблять, в наступних уроках :D","","Отже, зрештою, ти можеш вважати що `git fetch` просто звантажує нову інформацію з віддаленого сховища."]}},{type:"ModalAlert",options:{markdowns:["Щоб пройти цей рівень просто виконай `git fetch` і звантаж всі коміти!"]}}]},ko:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Fetch","","git 원격 작업들은 결국 서로다른 저장소에서 데이터를 _주고_ _받는_것에 불과하다는것을 알 수 있습니다. 우리가 커밋들을 주고 받을수 있는 한, git을 바탕으로하는 모든 종류의 업데이트를 공유할 수 있습니다(작업, 새로운 파일들, 새로운 아이디어, 러브레터 등...).","","이번 레슨에서는 원격 저장소_에서_ 데이터를 가져오는 방법을 배워볼 것입니다 -- 이를 위한 명령어는 `git fetch`라고 불립니다.","","먼저 알아두고 넘어갈것이 있는데 우리가 원격 저장소와 작업을 해서 상태가 변하면 _원격_브랜치들 또한 그 변경들을 반영합니다. 원격 브랜치에대한 이전 레슨을 참고하세요."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["`git fetch`의 세부사항을 알아보기 전에 일단 눈으로 먼저 확인해 봅시다! 여기 로컬 저장소에는 없는 두개의 커밋이 있는 원격 저장소가 있습니다."],afterMarkdowns:["됐습니다! 커밋 `C2` 와 `C3`가 우리의 로컬 저장소로 다운로드 되었고, 원격 브랜치 `o/main`가 이것을 반영하기 위해 업데이트 되었습니다."],command:"git fetch",beforeCommand:"git clone; git fakeTeamwork 2"}},{type:"ModalAlert",options:{markdowns:["### fetch는 무엇을 하는가","","`git fetch`는 두가지의 중요한 단계를 수행합니다. 사실 이 두 단계만을 진행합니다. 그것은 :","","* 원격 저장소에는 있지만 로컬에는 없는 커밋들을 다운로드 받습니다. 그리고... ","* 우리의 원격 브랜치가 가리키는곳을 업데이트합니다 (예를들어, `o/main`)","","`git fetch`는 본질적으로 _로컬_에서 나타내는 원격 저장소의 상태를 _실제_ 원격 저장소의 (지금)상태와 동기화합니다.","","이전 레슨을 기억한다면, 원격 브랜치는 가장 최근 원격 원격저장소와 작업을 했을때를 기준으로 원격 저장소의 상태를 반영한다고 했습니다. `git fetch`가 그러한 작업중에 하나입니다!(역: 원문에서는 talk with remote라고 표현합니다. 원격 저장소와 대화한다고 번역하기 어색해서 의역했습니다.) 원격 브랜치와 `git fetch`의 관계를 분명하게 알게되셨으면 좋겠습니다.","","`git fetch`는 일반적으로 원격 저장소와 인터넷을 통해 접근합니다(`http://` 또는 `git://`와같은 프로토콜로).",""]}},{type:"ModalAlert",options:{markdowns:["### fetch는 무엇을 하지 않는가","","`git fetch`는 그러나, _여러분의_ 로컬 상태는 전혀 바꾸지 않습니다. 여러분의 `main` 브랜치도 업데이트하지 않고 파일 시스템의 모습이던 그 어떤것도 바꾸지 않습니다.","","이것을 이해하는게 아주 중요한데, 왜냐하면 수 많은 개발자들이 `git fetch`를 하면 자신의 로컬 작업이 변경되어 원격 저장소의 모습을 반영해 업데이트 될것이라고 생각하기 때문입니다. 앞의 과정에 필요한 데이터를 다운로드는 하지만, 실제로 로컬 파일들이나 브랜치를 변경하지는 않습니다. 이것을 하기위한 명령어들은 뒤에서 배우겠습니다 :D","","간단하게 `git fetch`를 다운로드 단계로 생각할 수 있습니다."]}},{type:"ModalAlert",options:{markdowns:["레벨을 마치기 위해, `git fetch`를 수행하고 모든 커밋들을 내려 받으세요!"]}}]},vi:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Fetch","","Làm việc với git remote về căn bản là chuyển giao dữ liệu qua và lại giữa các kho chứa. Miễn là ta có thể chia sẻ qua lại các commit, ta có thể chia sẻ bất kỳ cập nhật gì được theo dõi bở Git (và từ đó chia sẻ thành quả, tập tin mới, ý tưởng mới, thư tình, các kiểu con đà điểu.).","","Ở bài học này ta sẽ học cách lấy dữ liệu về từ một kho chứa từ xa -- lệnh đó là `git fetch`.","","Bạn sẽ nhận thấy rằng khi ta cập nhật đại điện kho chứa từ xa, nhánh _từ xa_ của ta cũng được cập nhật để phản ánh đại diện đó. Điều này liên quan đến bài học trước về nhánh từ xa."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Trước khi đi vào chi tiết về `git fetch`, hãy xem cách nó hoạt động! Ở đây ta có một kho chứa từ xa trong đó chứa 2 commit mà kho chứa cục bộ của ta không có."],afterMarkdowns:["Đó! Commit `C2` và `C3` đã được tải xuống kho chứa cục bộ của ta, và nhánh từ xa `o/main` của ta đã được cập nhật để phản ánh điều này."],command:"git fetch",beforeCommand:"git clone; git fakeTeamwork 2"}},{type:"ModalAlert",options:{markdowns:["### Fetch làm gì","","`git fetch` thực hiện 2 bước chính, và chỉ 2 bước chính. Nó:","","* tải xuống commit có trên kho chứa từ xa mà kho chứa cục bộ của ta không có, và...","* cập nhật nơi mà nhánh từ xa của ta trỏ tới (ví dụ nhánh `o/main`)","","Về căn bản thì `git fetch` đưa đại diện _cục bộ_ của kho chứa từ xa của ta về trạng thái đồng bộ với trạng thái _thực tế_ của kho chứa từ xa (ngay lúc này).","","Nếu bạn còn nhớ thì trong bài học trước, chúng tôi có đề cập rằng nhánh từ xa phản ánh trạng thái của kho chứa từ xa kể từ lần cuối bạn tương tác với các nhánh từ xa đó. `git fetch` chính là cách để tương tác với các nhánh từ xa! Hy vọng chúng tôi đã làm sáng tỏ sự liên kết giữa nhánh từ xa và `git fetch`.","","`git fetch` thường tương tác với kho chứa từ xa bằng Internet (thông qua các giao thức như `http://` hoặc `git://`).",""]}},{type:"ModalAlert",options:{markdowns:["### Fetch không làm gì","","Tuy nhiên, `git fetch` không hề thay đổi trạng thái kho chứa _cục bộ_ của bạn. Nó sẽ không cập nhật nhánh `main` hay thay đổi bất kỳ điều gì trong hệ thống tập tin hiện tại của bạn.","","Điều này rất quan trọng, vì nhiều nhà phát triển nghĩ rằng `git fetch` sẽ làm kho chứa cục bộ của họ phản ánh trạng thái của kho chứa từ xa. Nó có thể tải xuống tất cả dữ liệu cần thiết, nhưng nó thực tế không thay đổi bất cứ thứ gì trên tập tin cục bộ của bạn. Ta sẽ học lệnh để làm điều đó sau :D","","Nói tóm lại, bạn có thể coi `git fetch` thuần túy như một bước tải xuống."]}},{type:"ModalAlert",options:{markdowns:["Để hoàn thành cấp độ này, đơn giản hãy gõ `git fetch` để tải xuống tất cả commit!"]}}]},sl_SI:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Fetch","","Delanje z git oddaljnemi repoti je v bistvu le premikanje podatkov na in z drugih repozitorijev. Dokler lahko pošiljamo commite naprej in nazaj, lahko delimo bilokakšno posodobitev, kateri git sledi (in posledično delimo delo, nove datoteke, nove ideje, ljubezenska pisma, itd.).","","V tej lekciji se bomo naučili kako fetchat (prenesti) podatke iz oddaljenega repozitorija -- ukaz za to je poimenovan `git fetch`.","","Opazil boš, da ko posodobimo našo predstavitev oddaljenega repota, se bo naš oddaljen branch posodobil in imel nove spremembe. To se navezuje na prejšnjo lekcijo o oddaljenih repozitorijih."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Preden se spustimo v podrobnosti `git fetch` ga poglejmo v akciji! Tu imamo oddaljen repozitorij, ki vsebuje dva commita, ki jih naš lokalen repozitorij nima."],afterMarkdowns:["Tako! Commita `C2` in `C3` sta bila prenesena v naš lokalen repozitorij in naš oddaljen branch `o/main` je bil posodobljen, da to odraža."],command:"git fetch",beforeCommand:"git clone; git fakeTeamwork 2"}},{type:"ModalAlert",options:{markdowns:["### Kaj fetch naredi","","`git fetch` naredi dve stvari. In sicer:","","* prenese commite, ki jih ima oddaljeni repo ampak manjkajo v našem lokalnem in ...","* posodobi, kam kaže naš oddaljeni branch (naprimer `o/main`)","","`git fetch` v bistvu našo lokalno predstavitev oddaljenega repozitorija uskladi z dejanskim stanjem na oddaljenem repozitoriju.","","Če se spomneš še iz prejšnje lekcije smo rekli, da oddaljeni branchi odsevajo stanje na oddaljenih repozitorijih, odkar si komuniciral z njimi. `git fetch` je način, da komuniciraš z njimi! Upam, da je sedaj povezava med oddaljenimi repozitoriji in `git fetch` jasna.","","`git fetch` ponavadi komunicira z oddaljenimi repozitoriji preko interneta (s protokolom kot sta `http://` ali `git://`).",""]}},{type:"ModalAlert",options:{markdowns:["### Kaj fetch ne naredi","","`git fetch` ne spremeni ničesar glede tvojega lokalnega stanja. Ne bo posodobil tvojega `main` brancha ali spremenil česarkoli v tvojih datotekah.","","To je pomembno razumeti, ker veliko razvijalcev misli, da bo `git fetch` posodobil njihovo lokalno stanje s stanjem na oddaljenem repozitoriju. Lahko bo prenesel vse potrebne podatke, da to izvede, ampak v bistvu _ne_ spremeni tvojih datotek. V kasnejših lekcijah se bomo naučili ukaze, ki pa naredijo točno to. :D","","Torej na koncu dneva, izvajanje `git fetch` si lahko predstavljate kot korak za prenašanje."]}},{type:"ModalAlert",options:{markdowns:["Za dokončanje te stopnje uporabi `git fetch` in prenesi vse commite!"]}}]},pl:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git fetch","","Praca ze zdalnymi Gitami tak naprawdę sprowadza się do przesyłania danych _do_ i _z_ innych repozytoriów. Tak długo jak możemy przesyłać zatwierdzenia tam i z powrotem, możemy udostępniać wszelkiego rodzaju aktualizacje śledzone przez Git (a tym samym dzielić się pracą, nowymi plikami, pomysłami, listami miłosnymi itp.).","","W tej lekcji nauczymy się, jak pobierać dane _ze_ zdalnego repozytorium -- polecenie to nosi nazwę `git fetch`.","","Zauważysz, że gdy aktualizujemy reprezentację zdalnego repozytorium, nasze _zdalne_ gałęzie zostaną zaktualizowane, aby odzwierciedlić tę nową reprezentację. Wiąże się to z poprzednią lekcją dotyczącą zdalnych gałęzi."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Zanim przejdziemy do szczegółów polecenia `git fetch`, zobaczmy, jak działa! Mamy tu zdalne repozytorium, zawierające dwa commity, których nie ma w naszym lokalnym repozytorium."],afterMarkdowns:["No to jedziemy! Commity `C2` i `C3` zostały pobrane do naszego lokalnego repozytorium, a zdalna gałąź `o/main` została zaktualizowana, aby to odzwierciedlić."],command:"git fetch",beforeCommand:"git clone; git fakeTeamwork 2"}},{type:"ModalAlert",options:{markdowns:["### Co robi fetch","","`git fetch` wykonuje dwie rzeczy:","","* pobiera commity, które są w zdalnym repozytorium, ale których brakuje w naszym lokalnym repozytorium i...","* aktualizuje miejsca, które wskazują nasze zdalne gałęzie (na przykład `o/main`)","","`git fetch` zasadniczo synchronizuje _lokalną_ reprezentację zdalnego repozytorium z tym, jak w _rzeczywistości_ zdalne repozytorium wygląda (w danej chwili).","","Jak pamiętasz z poprzedniej lekcji, powiedzieliśmy, że zdalne gałęzie odzwierciedlają stan zdalnych repozytoriów od czasu ostatniej komunikacji nimi. `git fetch` to sposób, w jaki rozmiawiasz z tymi repozytoriami! Mamy nadzieję, że związek między zdalnymi gałęziami a `git fetch` jest teraz jasny.","","`git fetch` zwykle komunikuje się ze zdalnym repozytorium przez internet (za pośrednictwem protokołu takiego jak `http://` lub `git://`).",""]}},{type:"ModalAlert",options:{markdowns:["### Czego fetch nie robi","","Zauważ, że `git fetch` nie zmienia nic w _twoim_ stanie lokalnym. Nie zaktualizuje twojej gałęzi `main` ani nie zmieni niczego w wyglądzie twojego systemu plików.","","Zrozumienie tego to ważna sprawa! Wielu programistów uważa, że uruchomienie `git fetch` spowoduje, że ich lokalna praca będzie odzwierciedlać stan zdalny. Mimo że `git fetch` pobiera wszystkie niezbędne do tego dane, _nie zmienia_ żadnego z plików lokalnych. Poleceń, które służą właśnie do tego celu, nauczymy się później. :D","","Dlatego, podsumowując to wszystko, możesz myśleć o `git fetch` jako pobieraniu."]}},{type:"ModalAlert",options:{markdowns:["Aby ukończyć ten poziom, po prostu użyj polecenia `git fetch` i pobierz wszystkie commity!"]}}]},it_IT:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git Fetch","","Lavorare con git remoto consiste essenzialmente nel trasferimento di dati _verso_ e _da_ altri repository. Fino a che possiamo inviare commit avanti e indietro, possiamo condividere qualsiasi tipo di aggiornamento tracciabile da git (e quindi condividere lavoro, nuovi file, nuove idee, letterine d'amore, etc.).","","In questa lezione vedremo come recuperare dati _da_ un repository remoto -- il comando per fare ciò è `git fetch`.","","Man mano che aggiorneremo la nostra rappresentazione del repository remoto, noterai che i nostri rami _remoti_ si aggiorneranno per riflettere quella nuova rappresentazione. Questo si collega alla lezione precedente sui rami remoti."]}},{type:"GitDemonstrationView",options:{beforeMarkdowns:["Prima di addentrarci nei dettagli di `git fetch`, vediamolo in azione! Qui abbiamo un repository remoto contenente due commit che il nostro repository locale non ha."],afterMarkdowns:["Ecco fatto! I commit `C2` e `C3` sono stati scaricati nel nostro repository locale, e il nostro ramo remoto `o/main` è stato aggiornato per riflettere questo cambiamento."],command:"git fetch",beforeCommand:"git clone; git fakeTeamwork 2"}},{type:"ModalAlert",options:{markdowns:["### Cosa fa git fetch","","`git fetch` compie unicamente queste due azioni:","","* scarica i commit presenti in remoto ma assenti dal nostro repository locale, e...","* aggiorna dove puntano i nostri rami remoti (ad esempio, `o/main`)","","`git fetch` essenzialmente porta la nostra rappresentazione _locale_ del repository remoto al pari con lo stato _attuale_ dello stesso (in questo momento).","","Se ti ricordi, nella lezione precedente abbiamo visto che i rami remoti riflettono lo stato del repository remoto dall'_ultima volta_ in cui hai comunicato con esso. `git fetch` è il modo per comunicare con i repository remoti! Ora il legame tra i rami remoti e `git fetch` dovrebbe essere più chiaro.","","`git fetch` generalmente comunica con il repository remoto attraverso Internet (tramite un protocollo come `http://` o `git://`).",""]}},{type:"ModalAlert",options:{markdowns:["### Cosa non fa git fetch","","`git fetch`, però, non effettua modifiche a ciò che è già presente in locale sul _tuo_ sistema. Non aggiornerà il tuo ramo `main` e non apporterà modifiche ai tuoi file.","","Questo è importante da comprendere in quanto molti sviluppatori pensano che eseguire `git fetch` porterà il loro lavoro a riflettere lo stato del repository remoto. Va a scaricare tutti i dati necessari per farlo, ma _non_ va a modificare effettivamente alcun file locale. Impareremo nelle prossime lezioni i comandi per fare proprio questo :D","","In fin dei conti, puoi considerare `git fetch` come una fase di download di dati."]}},{type:"ModalAlert",options:{markdowns:["Per completare il livello, digita `git fetch` per scaricare tutti i commit!"]}}]}}}},{}],142:[function(e,t,o){o.level={goalTreeString:'{"branches":{"main":{"target":"C6","id":"main","remoteTrackingBranchID":"o/main"},"foo":{"target":"C7","id":"foo","remoteTrackingBranchID":"o/foo"},"o/main":{"target":"C1","id":"o/main","remoteTrackingBranchID":null},"o/foo":{"target":"C1","id":"o/foo","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C2"],"id":"C3"},"C5":{"parents":["C1"],"id":"C5"},"C6":{"parents":["C5"],"id":"C6"},"C7":{"parents":["C3","C6"],"id":"C7"}},"HEAD":{"target":"foo","id":"HEAD"},"originTree":{"branches":{"main":{"target":"C4","id":"main","remoteTrackingBranchID":null},"foo":{"target":"C6","id":"foo","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C2"],"id":"C3"},"C4":{"parents":["C3"],"id":"C4"},"C5":{"parents":["C1"],"id":"C5"},"C6":{"parents":["C5"],"id":"C6"}},"HEAD":{"target":"foo","id":"HEAD"}}}',solutionCommand:"git fetch origin main~1:foo;git fetch origin foo:main;git checkout foo;git merge main",startTree:'{"branches":{"main":{"target":"C1","id":"main","remoteTrackingBranchID":"o/main"},"foo":{"target":"C1","id":"foo","remoteTrackingBranchID":"o/foo"},"o/main":{"target":"C1","id":"o/main","remoteTrackingBranchID":null},"o/foo":{"target":"C1","id":"o/foo","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"}},"HEAD":{"target":"C1","id":"HEAD"},"originTree":{"branches":{"main":{"target":"C4","id":"main","remoteTrackingBranchID":null},"foo":{"target":"C6","id":"foo","remoteTrackingBranchID":null}},"commits":{"C0":{"parents":[],"id":"C0","rootCommit":true},"C1":{"parents":["C0"],"id":"C1"},"C2":{"parents":["C1"],"id":"C2"},"C3":{"parents":["C2"],"id":"C3"},"C4":{"parents":["C3"],"id":"C4"},"C5":{"parents":["C1"],"id":"C5"},"C6":{"parents":["C5"],"id":"C6"}},"HEAD":{"target":"foo","id":"HEAD"}}}',name:{en_US:"Fetch arguments",fr_FR:"Arguments de fetch",zh_CN:"Git fetch 的参数",zh_TW:"fetch 的參數",es_AR:"Parámetros de fetch",es_ES:"Parámetros de fetch",pt_BR:"Parâmetros do fetch",gl:"Parámetros de fetch",de_DE:"Optionen für Fetch",ja:"Fetchの引数",ru_RU:"Аргументы для fetch",ko:"Fetch의 인자들",uk:"Аргументи для fetch",vi:"Tham số fetch",sl_SI:"Fetch argumenti",pl:"Argumenty fetch",it_IT:"Parametri di git fetch"},hint:{en_US:'Pay attention how the commit ids may have swapped! You can read slides again with "help level"',fr_FR:'Faites attention à la façon dont les ids des commits ont été intervertis ! Vous pouvez relire les slides avec "help level"',zh_CN:"注意下提交对象的 id 是如何交换的! 你可以通过 `help level` 重新阅读本关卡的所有对话框!",zh_TW:"注意 commit 的 id 是怎麼被交換的!你可以透過 `help level` 來閱讀對話視窗!",es_AR:'¡Prestá atención a cómo podrían haberse invertido los ids de los commits! Podés volver a leer toda la lección usando "help level"',es_ES:'¡Presta atención a cómo podrían haberse invertido los ids de los commits! Puedes volver a leer toda la lección usando "help level"',pt_BR:'Preste atenção em como os identificadores dos commits podem ter trocado! Você pode ler os slides novamente com "help level"',gl:'Preste atención en como poderían invertirse os ids dos commits! Podes volver ler toda a lección usando "help level"',de_DE:'Beachte wie die Commit IDs getauscht wurden! Du kannst den Einführungsdialog mit "help level" erneut anzeigen',ja:"コミットIDの入れ替わりに注意!スライドを復習するには`help level`を実行",ru_RU:'Обратите внимание на то, как номера коммитов могут меняться! Вы можете прочесть слайды вновь, воспользовавшись командой "help level"',ko:'커밋 ID가 바뀔수도있으니 주의하세요! "help level"을 입력하면 슬라이드들을 다시 읽어볼수 있습니다.',uk:'Зверни увагу на те, що номери комітів можуть змінюватися! Слайди уроку можна переглянути ще раз командою "help level"',vi:'Lưu ý id của các commit bị tráo đổi, bạn có thể dùng "help level" để đọc lại hộp thoại',sl_SI:'Bodi pozoren kako so se commit id-ji morda zamenjali! Ponovno lahko prebereš navodila z "help level".',pl:'Zauważ, że identyfikatory commitów mogły zostać zamienione! Slajdy możesz przeczytać jeszcze raz po wpisaniu: "help level"',it_IT:'Fai attenzione, alcuni ID dei commit potrebbero essere invertiti! Puoi leggere nuovamente le slide con "help level"'},startDialog:{en_US:{childViews:[{type:"ModalAlert",options:{markdowns:["## Git fetch arguments","","So we've just learned all about git push arguments, this cool `` parameter, and even colon refspecs (`