git branch -f和git checkout一步到位

时间:2016-10-06 14:12:20

标签: git git-branch git-checkout

有时我需要将分支移动到当前的提交。我有两种方法可以做到:

git checkout foo
git reset --hard HEAD@{1}

我不喜欢这个,因为这样我必须两次更改工作目录。更好的选择是:

git branch -f foo
git checkout foo

这样更好,但我想一步完成,就像我切换到新分支git checkout -b一样。不幸的是,git checkout -f -b foo不起作用。

3 个答案:

答案 0 :(得分:4)

别名方法很好,但请注意git checkout -B与单个原子事务的作用相同:

  

如果给出了-B,则< new_branch>如果它不存在则被创建;    否则,它被重置。这是

的交易等价物
    $ git branch -f <branch> [<start point>]
    $ git checkout <branch>
     

也就是说,除非“git,否则不会重置/创建分支    结帐“成功。

(目前尚不清楚为何具体拼写为-B而不是-f -b,但关键是此 内置于git checkout。)< / p>

答案 1 :(得分:2)

您可以像Scott Weldon所建议的那样,通过编辑您的Git配置文件来创建别名,但您也可以添加git config的别名:

git config alias.branchout "! git branch -f $1; git checkout $1; true"

然后以同样的方式使用它:

git branchout foo

请注意,您始终可以将命令名称branchout更改为您想要的任何内容,以使其更短一些。

答案 2 :(得分:1)

您可以使用别名。将其添加到您的Git配置文件:

[alias]
  branchout = "! git branch -f $1; git checkout $1; true"

然后使用:

git branchout foo