在我的本地存储库中,我对代码进行了许多更改。在这样做的过程中,我拉了几次,创建了不同的分支,犯了很多次,合并等等。但是,好事是我所做的一切,我只在本地做。我从来没有推到远程存储库。因此,尽管我执行的GIT的所有复杂动作都存在,但我仍然有一个非常简单的心理图片:(1)远程存储库上有代码,(2)我本地有代码。现在,我想通过以下内容清理所有内容:
- 我想看看遥控器和本地存储库上的代码有什么区别。
- 我想打包我拥有的所有更改,以便它们看起来像是来自一个提交(带一个提交消息)。我不希望我到目前为止生成的所有提交消息都可以转到远程存储库。
- 我可能还想将我的更改分为两个或三个部分(每个部分都以相应的提交消息为单独的提交)。
可以使用git做到吗?而且,如果是这样,我该怎么做?
-
git fetch --all && git diff master origin/master
-
git checkout -b new-master && git branch -D master && git checkout master && git merge --squash new-master
- 与上面相同,但是在返回主人之前,您应该使用
git rebase -i
重写new-master
的历史
1的工作很简单:从远程存储库中获取最新更改,并将您的本地更改与之进行比较。假设主是您要比较的分支。
2的作用更为复杂。它从您的本地更改中创建一个新的分支,然后删除您的本地主(再次假设这是您的工作分支)。之后,它再次检查了主,这为您提供了远程存储库的主分支的副本。然后,git合并 - 平方合并了您从new-master
的所有更改,并将它们添加到master
关于3。我建议您阅读git rebase
假设您处于以下情况:
o--o--o--o--o--o--o [remote branch]
o--o (... lots of commits ...) o--o [your branch]
要找出本地分支和远程分支之间的差异,请使用
$ git diff <your branch> <remote branch>
创建一个或多个提交,将您的作品应用于远程分支的顶部,请执行以下操作:
创建并切换到远程分支已经指向的同一提交的新分支:
$ git checkout -b <new branch> <remote branch>
这将导致:
o--o--o--o--o--o--o [remote branch] [new branch] o--o (... lots of commits ...) o--o [your branch]
将新分支与您现有分支之间的差异复制到索引,准备新提交:
$ git checkout -p <your branch>
一旦满意,创建一个提交:
$ git commit
导致:
o [new branch] / o--o--o--o--o--o--o [remote branch] o--o (... lots of commits ...) o--o [your branch]
重复
git checkout -p
和git commit
,直到新分支和现有本地分支之间没有更多差异:o--o--o--o [new branch] / o--o--o--o--o--o--o [remote branch] o--o (... lots of commits ...) o--o [your branch]
将您的新分支推向遥控存储库,或提出拉动请求,或者项目的工作流程是什么。
git rebase
将帮助您。
将您最近的提交分开,首先:
$ git reset HEAD~
您可以提交您想要的不同作品。
为了加入不同的提交,您可以使用壁板查找要在顶部壁板的提交哈希,然后使用:
git reset *mentioned_hash*