git从特定的分支历史和提交创建新的分支

时间:2012-06-22 06:40:16

标签: git version-control

我基本上想做:

git checkout branchA
git checkout -b branchB <commit_id>

branchB上的<commit_id>创建新的branchA分支。

问题:

我在这里详细介绍,但我要问的原因是为了帮助理解git历史如何工作并节省一些打字。 (上面的命令可能是四个命令而不是两个......)如何将其与一个具有本机git函数的命令一起使用?问题:

是否有更简单/一行的方式与上述相同?

我在考虑简单地执行git checkout -b branchB <commit_id>,但如果我在branchC中可能无效,因为branchC的日志/历史可能与{branchA不一致1}}。

背景

我对这种特定情况的意图是在生成错误的情况下快速恢复到先前的提交。然而,我仍然希望保留我的新代码,然后丢弃旧分支,旧代码被推回服务器。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

这些命令

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

表示我想基于分支(或提交)Y 创建一个分支X,因此您不必在Y中就可以工作。

你需要先移动到基础分支的情况是:

git checkout branchA
git checkout -b branchB

看到我没有在第二行提到基本分支。

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