(滥用?)git工作流程

时间:2010-01-19 19:23:30

标签: git workflow

来自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

编辑:我应该清楚每个号码都是提交。

6 个答案:

答案 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 ,则可以使用mastergit stash applygit 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。