我有一个分支,我做了一些更改,但我最初错了并从错误的分支创建它,所以我有很多不同的变化,我不想在其中。那么我该怎样才能清理它,所以我只做了一些改变,从主分支改变了?
答案 0 :(得分:2)
您可以从master创建一个新分支,然后挑选您在新分支中所做的更改。
查找要保存的每个提交的提交哈希值。然后:
git checkout master
git checkout -b <new branch name>
git cherry-pick <commit hash> # for every commit you want to save
cherry-pick
单一提交可能很乏味,当你有很多时。由于git 1.7.2+ cherry-pick
可以处理提交范围。
git cherry-pick <first commit to save>^..<last commit to save>
正如EOL在评论中指出的那样,如果存在冲突,cherry-pick依次应用每个补丁并等待用户提交。在这种情况下,解决冲突并执行git cherry-pick --continue
以自动移动到下一个提交。或者使用git cherry-pick --abort
中止整个操作。
现在检查你当前的分支。如果一切正常,您可以删除之前混乱的分支:
git branch -D <old messed up branch name>
有关详细信息,请参阅git cherry-pick manual page。
修改包含了有关git cherry-pick --continue
的信息,EOL在评论中提到了这些信息。
<强>更新强>
你提到你想要挑选你创建的那些提交。这可以通过这个小的bash脚本来完成:
author_name="Your Git Author Name"
start_commit="earliest commit hash to cherry-pick"
end_commit="latest commit hash to cherry-pick"
git rev-list --reverse --topo-order "$start_commit^..$end_commit" | while read rev
do
commit_author_name=`git log --pretty=format:"%an%n" -n 1 $rev`
if [[ $commit_author_name == *"$author_name"* ]]; then
git cherry-pick $rev || break
fi
done
答案 1 :(得分:1)
如果您的更改都是在上游分支之上进行的(即您没有任何来自上游的合并提交与您的更改混合在一起),您可以在主服务器上重新进行更改。
git branch backup#始终先备份;)
git rebase --onto master&lt;来自错误的上游分支的最新提交&gt;
假设你的分支是关于上游的最新的,那就是
git rebase --onto master&lt;错误的上游分支&gt;
之后,您可能希望将当前分支的跟踪分支更改为master:
git branch --set-upstream&lt; your branch&gt;原点/主
(或者只是git branch -u origin / master with git&gt; = 1.8)