切换到另一个分支而不更改工作区文件

我从GitHub克隆了一个git仓库,做了一些更改和一些提交; 我做了很多,都很肮脏,所以他们不适合拉请求。 现在我从origin/master创build了分支cleanchanges ,所以它是干净的,我想提交我的更改作为一个提交一个很好的提交评论。

当我在本地主,我想切换到我的cleanchanges但不更改文件。 然后我能够承诺。

如何切换分支而不更改文件?

我想说清楚一点,我有本地master所做的一切变化。 没有未提交的更改。

编辑:我只是注意到,你说你已经创build了一些提交。 在这种情况下,使用git merge --squash进行一次提交:

 git checkout cleanchanges git merge --squash master git commit -m "nice commit comment for all my changes" 

编辑:如果您有未提交的更改,则以下答案适用。)

只需使用git checkout cleanchanges切换分支。 如果分支引用相同的引用,那么当您切换时,所有未提交的更改将保留在您的工作目录中。

唯一一次发生冲突的情况是,存储库中的某个文件在origin/mastercleanchanges之间是不同的。 如果你刚刚创build了分支,那么没问题。

与往常一样,如果您担心失去工作,请先备份备份。 Git的目的不是为了不先不问就罢工。

Git的。 切换到另一个分支

  git checkout branch_name 

最好的select是隐藏更改并切换分支。 要切换分支,您需要一个干净的状态。 所以把它们藏起来,签出一个新的分支,并在新的分支上应用这些更改并提交

这听起来像是你做出了改变,让他们一路高手,现在你想把它们组合成一个单一的提交。

如果是这样,你想重新提交你的提交,把它们压缩成一个提交。

我不完全确定你想要什么,所以我不会用脚本来诱惑你。 但是我build议你阅读git rebase和“squash”的选项,并尝试一些东西。

另一种方法是,如果你想创build一个新的提交,而不是执行合并:

 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分支返回到与存储库中相同的提交。