3

我基本上想做:

git checkout branchA
git checkout -b branchB <commit_id>

它从on创建新branchB分支。<commit_id>branchA

问题:

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

是否有一种更简单/单行的方式来做与上述相同的事情?

我只是想简单地做git checkout -b branchB <commit_id>,但如果我在branchC其中可能不会工作,因为日志/历史branchC可能与branchA.

背景:

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

4

2 回答 2

5

只是

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 不同。

一个存储库中只有一个历史记录。

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

听起来像标签;)

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
于 2012-06-22T06:54:04.180 回答
2

这些命令

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

意思是我想基于分支(或提交) Y 创建一个分支 X,因此您不必在 Y 中即可。

您首先需要移动到基本分支的情况是:

git checkout branchA
git checkout -b branchB

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

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

于 2012-06-22T06:58:36.133 回答