我在Git中使用rebase遇到了一些麻烦,这里是对情况,我想要的以及我做了什么的“画面”。
Repo state (initial) --- C1 --- C5 --- C6 --- C7 (master & origin/master) \ \--- C2 --- C3 --- C4 (my-branch & origin/my-branch)
Repo state (wanted) --- C1 --- C5 --- C6 --- C7 --- C2 --- C3 --- C4 (my-branch & origin/my-branch) | (master & origin/master)
所以,在这种情况下,我这样做了:
$ git checkout my-branch
$ git rebase origin/master
但是回购变成了这种状态:
--- C1 --- C5 --- C6 --- C7 --- C2 --- C3 --- C4 (my-branch) \ | \ (master & origin/master) \ \--- C2 --- C3 --- C4 (origin/my-branch)
所以,当我试图推“my-branch”时,git告诉我一个错误告诉我,我的分支有些没有被改变所以我无法推动。
我做了什么(我知道这是糟糕解决方案):
$ git push origin --delete my-branch
$ git push
因此,远程分支被删除并重新创建。
我确实还有另一种解决方案,但我无法找到我的想法。
提前感谢您的帮助。
答案 0 :(得分:1)
将来您只需使用git-merge:
git-merge - 一起加入两个或多个开发历史
合并来自命名提交的更改(因为 他们的历史时间从现在的分支分歧进入 目前的分支。 git pull使用此命令进行合并 来自另一个存储库的更改和可以手动用于合并 从一个分支变为另一个分支。
例如:
git checkout my-branch
git merge master
这会将master
的提交带到my-branch
,而不会更改master
中的任何内容。
一个非常有用的提示是学习如何使用git-reflog和git-reset撤消您可能已经执行过的不受欢迎的rebase。由于您已经删除了远程仓库,因此这样做没有意义,但如果您再次需要它,这是一个示例:
git reflog
# This will print a history of repository changes.
# Pick the latest ref before the rebase - let's suppose it's HEAD@{3}
# CAUTION: Be sure you understand what git-reset --hard does
git reset --hard HEAD@{3}
现在你的存储库应该回到你做rebase之前的状态。
注意 - 关于git-reset使用的--hard
标志:
- hard重置索引和工作树。 自< commit>以来对工作树中跟踪文件的任何更改被丢弃。