来自Sourcesafe,我主要使用git作为主要的撤消功能.我倾向于在主分支中工作,代码愉快地离开一段时间,在这里和那里提交并继续前进.
当我正在编写我的大脑时,我有时希望放弃我正在做的事情并开始研究另一个功能.我知道我现在可以开始另一个分支,但我们假设我想继续研究硕士.当我开始研究上一个功能时,我应该分支,但这需要我提前计划(我很可怕).
我非常有信心,我需要的是git,但我无法理解它.如图所示,超过千言万语,原则上这就是我想做的事情:
0--1 master
0--1--2 master
0--1--2--3 master
0--1--2--3 aBranch
\-4 master
0--1--2--3 aBranch
\-4--5 master
Run Code Online (Sandbox Code Playgroud)
编辑:我应该清楚每个号码都是提交.
是的,这是可能的,并不难.简短版本:git branch aBranch创建新分支,git stash保存任何未提交的更改,并git reset --hard 1重置master为您希望的提交,并可选择git stash pop将这些未提交的更改应用于当前工作副本(如果它们是用于新master分支).
这是一个完整的解释,有图表所以你可以跟随.在下文中,我将用a表示当前分支(HEAD)*.
0--1 *master 0--1--2 *master 0--1--2--3 *master
创建aBranch指向当前提交的新分支:
$ git branch aBranch
Run Code Online (Sandbox Code Playgroud)
0--1--2--3 *master aBranch
如果您对尚未提交的工作副本进行任何更改,请使用存储保存它们(这很重要,因为git reset --hard将删除您所拥有的任何未提交的更改):
$ git stash
Run Code Online (Sandbox Code Playgroud)
0--1--2--3 *master aBranch
\- 4 stash
现在重置master回您想要的修订版本.我在1下面用作占位符; 你可能想要使用SHA-1,或类似的东西,origin/master如果你想master在进行提交之前将它重置为上游分支所在的版本:
$ git reset --hard 1
Run Code Online (Sandbox Code Playgroud)
0--1--2--3 aBranch
\ \- 4 stash
\- *master
如果你在工作副本中有未提交的更改,并且你想要将它们应用到master,你可以使用git stash apply或git stash pop(apply将存储记录为提交; pop将清理存储).
$ git stash pop
Run Code Online (Sandbox Code Playgroud)
0--1--2--3 aBranch \- *master (with stashed changes now back in your working copy)
现在你已经开启master,并重置为提交1,完全按照你想要的方式.新的提交将进入master分支机构.
0--1--2--3 aBranch
\-4 *master
0--1--2--3 aBranch
\-4--5 *master
请注意,如果您的工作副本是干净的(没有报告git status),则不需要该git stash命令.如果您想应用更改aBranch而不是master,则只需git stash pop在下次切换回aBranch并再次开始处理时使用.
需要记住的一点是,您应该只在自己的私有存储库中编辑这样的分支历史记录,而不是其他人可以从中获取的公共记录.如果你把它推到一个人们正在拉动的公共存储库中,那么他们就必须改变他们所有的变化,除非绝对必要,否则最好不要让他们这样做.
| 归档时间: |
|
| 查看次数: |
433 次 |
| 最近记录: |