[英]Git clean branch to save only my changes and changes from master
我有一个分支,我做了一些更改,但我最初错了并从错误的分支创建它,所以我有许多不同的变化,我不想在其中。 那么我怎样才能清理它,所以我只做了一些改变,并且从主分支改变了?
您可以从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手册页 。
编辑:包含关于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
如果您的更改都是在上游分支之上进行的(即您没有任何来自上游的合并提交与您的更改混合在一起),您可以在master之上重新定义它。
git branch backup#总是先备份;)
git rebase --onto master <来自错误的上游分支的最新提交>
假设您的分支机构与上游相关,那就是最新的
git rebase --onto master <错误的上游分支>
之后,您可能希望将当前分支的跟踪分支更改为master:
git branch --set-upstream <你的分支> origin / master
(或者只是git branch -u origin / master with git> = 1.8)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.