来自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
编辑:我应该清楚每个号码都是提交。
答案 0 :(得分:6)
是的,这是可能的,并不难。简短版本:git branch aBranch
用于创建新分支,git stash
用于保存任何未提交的更改,git reset --hard 1
用于将master
重置为您想要的提交,并可选{{3}} 1}}将这些未提交的更改应用于当前工作副本(如果它们是用于新的git stash pop
分支。
这是一个完整的解释,有图表,所以你可以跟随。在下文中,我将使用master
来表示当前分支(HEAD)。
0--1 *master 0--1--2 *master 0--1--2--3 *master
创建指向当前提交的新分支*
:
aBranch
0--1--2--3 *master aBranch
如果您对尚未提交的工作副本进行了任何更改,请使用存储保存它们(这很重要,因为$ git branch aBranch
将删除您拥有的任何未提交的更改):
git reset --hard
0--1--2--3 *master aBranch \- 4 stash
现在将$ git stash
重置为您想要的版本。我在下面使用master
作为占位符;如果要在提交之前将其重置为上游1
分支所在的修订版,您可能希望使用SHA-1或类似origin/master
的内容:
master
0--1--2--3 aBranch \ \- 4 stash \- *master
如果您隐藏了工作副本中的未提交更改,并且您希望将其应用于$ git reset --hard 1
,则可以使用master
或git stash apply
(git stash pop
将保存记录为提交; apply
将清理存储。)
pop
0--1--2--3 aBranch \- *master (with stashed changes now back in your working copy)
现在你正在$ git stash pop
,并重置为提交1,完全按照你想要的那样。新提交将转到master
分支。
0--1--2--3 aBranch \-4 *master 0--1--2--3 aBranch \-4--5 *master
请注意,如果您的工作副本是干净的(master
没有报告),则不需要git status
命令。如果您要将更改应用于git stash
而不是aBranch
,则只需在下次切换回master
时使用git stash pop
并再次开始处理。< / p>
要记住的一点是,您应该只在自己的私有存储库中编辑这样的分支历史记录,而不是其他人可以从中获取的公共记录。如果你把它推到一个人们正在撤离的公共存储库中,那么他们就必须改变他们所有的变化,除非绝对必要,否则最好不要让他们这样做。
答案 1 :(得分:3)
当然,此时:
0--1--2--3 master
运行以下命令:
git branch aBranch
git reset --hard 1
git branch
命令在当前HEAD处创建一个分支(所以“master”和“aBranch”指向同一个点,但“master”仍然是当前分支),git reset
命令将所有内容都返回到当前分支(“master”)上以提交1.然后您将在此处:
0--1--2--3 aBranch
\ master
此时提交“4”将给出:
0--1--2--3 aBranch
\-4 master
答案 2 :(得分:3)
是的,这在git中很容易做到。
当您在master上进行提交3并且您意识到它应该在另一个分支上时,您可以根据当前位置创建一个新分支。
git branch aBranch
然后你可以将主人回到提交1
git reset --hard <sha1_of_1>
继续工作,像往常一样进行提交4和5。他们从提交1分叉,从aBranch
创建一个单独的分支。
答案 3 :(得分:1)
查看git-stash。
编辑:如果你需要比HEAD更进一步,你可以随时指定一个git checkout指定起点,从主站中的任何给定提交开始获取新分支。
答案 4 :(得分:0)
我对git知之甚少,每次我必须做任何远程非常重要的事情时都会挣扎。我使用Mercurial,你想要的很容易:
http://stevelosh.com/blog/2009/08/a-guide-to-branching-in-mercurial/#branching-anonymously
答案 5 :(得分:0)
每次开始使用新功能时,您都需要养成分支的习惯。
那就是说,你可以这样做:
0 - 1 - 2 - 3主人 - 4 - 5 aBranch
你不想乱用分支的历史 - 这会让你感到很头疼。
始终在分支上开发,然后合并回master并从那里提交到SourceSafe。