我从GitHub克隆了一个git存储库,进行了一些更改和一些提交;我做了很多,都很肮脏,所以不适合拉请求。现在我从origin/master
创建了分支cleanchanges
,所以它很干净,我想在一个提交很好的提交评论时提交我的更改。切换到另一个分支而不更改工作区文件
当我在本地主人,我想切换到我的cleanchanges
,但没有更改文件。然后我能够承诺。
如何在不更改文件的情况下切换分支?
我想说清楚:我有在当地master
承诺的所有更改。没有未提交的更改。
我从GitHub克隆了一个git存储库,进行了一些更改和一些提交;我做了很多,都很肮脏,所以不适合拉请求。现在我从origin/master
创建了分支cleanchanges
,所以它很干净,我想在一个提交很好的提交评论时提交我的更改。切换到另一个分支而不更改工作区文件
当我在本地主人,我想切换到我的cleanchanges
,但没有更改文件。然后我能够承诺。
如何在不更改文件的情况下切换分支?
我想说清楚:我有在当地master
承诺的所有更改。没有未提交的更改。
编辑:我刚刚注意到,你说你已经创建了一些提交。在这种情况下,使用git merge --squash
使单个提交:
git checkout cleanchanges
git merge --squash master
git commit -m "nice commit comment for all my changes"
(编辑:如果你有未提交变化以下的答案必须适用)
只需切换分支与git checkout cleanchanges
。如果分支引用相同的参考,那么当您切换时,所有未提交的更改将保留在您的工作目录中。
唯一会发生冲突的是如果存储库中的某个文件在origin/master
和cleanchanges
之间有所不同。如果你刚创建分支,那么没问题。
一如既往,如果您对所有失去工作感到担忧,请先备份一份备份。 Git的目的不是为了不先要求你而放弃工作。
听起来您已经做出了更改,将它们提交给主程序,现在您希望将它们组合为单个提交。
如果是这样,你想rebase你的提交,挤压他们到一个单一的承诺。
我不完全确定你到底想要什么,所以我不会用脚本来诱惑你。但我建议你阅读git rebase
和“压扁”的选项,并尝试一些事情。
另一种方式,如果你想创建一个新的提交,而不是在执行合并:
git checkout cleanchanges
git reset --hard master
git reset cleanchanges
git status
git add .
git commit
第(硬)重置将你的工作树设置为相同的最后一次提交的master
。
第二次重置会将您的HEAD放回原来的位置,指向cleanchanges
分支的顶端,但不更改任何文件。所以现在你可以添加和提交它们。
之后,如果要删除脏的提交你master
制成(并假设您尚未将他们推),你可以:
git checkout master
git reset --hard origin/master
这会舍弃你的所有新的提交,将您的本地master
分支返回到与存储库中相同的提交。
Git。切换到另一个分支
git checkout branch_name
这将改变工作区文件,除了未跟踪的文件 – SMR 2016-02-05 11:43:01
aregato gonsaymasu。谢谢。 – 2018-02-09 07:59:06
我已提交所有更改。 – amorfis 2011-12-27 23:39:56
在这种情况下,请参阅我更新的答案。 – 2011-12-27 23:40:51