2012-06-22 36 views
2

我基本上要做到:混帐从一个特定的分支历史创造新分支然后提交

git checkout branchA 
git checkout -b branchB <commit_id> 

<commit_id>branchA创建新branchB分支。

问:

我进入细节在这里,但我问的原因是为了帮助理解历史是如何git的作品和节省一点打字。 (上面的命令可能是四个命令而不是两个...)我如何将它与具有本机git功能的一个相提并论?问:

是否有这样做上述相同的更简单/一个行的方式?

我想的只是做git checkout -b branchB <commit_id>但如果我在branchC我,可能将无法正常工作引起的branchC日志/历史可能不一样branchA

背景:

我给这家的具体情况内涵将迅速恢复到以前的承诺的情况下,错误被引入到生产。然而,我仍然想保留我的新代码,然后丢弃新分支,旧代码被推回服务器。

回答

4

只是

git checkout -b branchB <commit> 

的提交的哈希值是整个版本库中是唯一的,因此没有理由改变对branchA之前,因为结果是完全一样的。

而且这仅仅是

git checkout <commit> 
git branch branchB 
git checkout branchB 

快捷正如你所看到的第一个命令是一个正常的结算,这将取代你的git checkout branchA反正。

我想的只是做git checkout -b branchB <commit_id>但如果我在branchC我,可能将无法正常工作造成branchC的日志/历史可能不一样branchA。

有一个仓库只有一个历史。

对于这种特定情况,我的意图是快速恢复到以前的提交,以防将错误引入生产。然而,我仍然想保留我的新代码,然后丢弃新分支,旧代码被推回服务器。

听起来tags;)

git tag -a -m "Release 1.2.3" v1.2.3 
# Deploy 1.2.3 
#something broken! 
git checkout v1.2.2 
# Deploy 1.2.2 
2

这些命令

git checkout -b branchB <commit_id> 
git checkout -b branchB branchA 

意味着我想创建一个基于分支的分支X(或承诺)Y,因此你不必须在Y中才能工作。

的情况下,是你将需要移动的基层支部第一是:

git checkout branchA 
git checkout -b branchB 

见我没有提到基地分支在第二行。

另外,请记住,提交不是特定于分支,它只是一个指针而已,仅此而已。一个分支可以被删除,移动,重命名等,但是提交不会改变。

相关问题