同一提交中的多个分支

And*_*boy 1 git git-log git-branch

我有一个包含多个(不需要的)分支的提交,通过 git log --graph 我得到了这个:

commit 417bb7dfd7d7230fd1c859414d2aa231e72e24e6 (HEAD -> Feature1, master, Feature2)
Run Code Online (Sandbox Code Playgroud)

如何将Feature1、Feature2分支从提交417bb7dfd7d7230fd1c859414d2aa231e72e24e6移动到不同的提交?

感谢您的帮助。

Rom*_*eri 5

这似乎是基于一种误解。

这些分支不在提交中

在 git 中,分支是指向提交的标签。一次提交可以有任意数量(零、四、一千等)的分支指向它。

A---B---C---D
     \   \   \
      \   \   master
       \   \
        \   branch-abc
         \
          branch-xyz
Run Code Online (Sandbox Code Playgroud)

上面的 、masterbranch-abc恰好branch-xyz指向不同的提交,但如果你这样做了

git checkout branch-abc
git merge master
Run Code Online (Sandbox Code Playgroud)

然后你会得到

A---B---C---D
     \       \
      \       master, branch-abc
       \    
        branch-xyz
Run Code Online (Sandbox Code Playgroud)

...其中,是的,master并且branch-abc 确实指向相同的提交。


如果出于任何原因,您确实需要移动或删除分支,这很容易(但话又说回来,我必须强调重要的部分,即了解分支的用途)

# move a branch to commit abc123 (when the branch is NOT checked out)
git branch -f my_branch abc123

# or if the branch IS checked out
git reset --hard abc123

# delete a branch
git branch -d my_branch

# ...which will complain in case the branch isn't fully merged yet
# in which case you can then force it
git branch -D my_branch
Run Code Online (Sandbox Code Playgroud)