在我的本地存储库中,我对代码进行了很多更改。在这样做时我拉了好几次,创建了不同的分支,多次提交,合并等等。然而,好处是我所做的一切,我只在当地做过。我从来没有推到远程存储库。所以,尽管我已经执行了git的所有复杂操作,但我仍然有一个非常简单的心理图:(1)远程存储库上有代码,(2)我有本地代码。现在,我想通过执行以下操作来清理所有内容:
可以用git做到吗?而且,如果是这样的话,我怎么能这样做?
答案 0 :(得分:1)
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做的很简单:从远程存储库获取最新更改,并将您对本地更改进行比较。假设master是您要比较的分支。
2更复杂。它会根据您的本地更改创建一个新分支,然后删除您的本地主数据(再次,假设这是您的工作分支)。之后,它会再次检出master,它会为您提供远程存储库主分支的副本。然后,git merge --squash结合new-master
的所有更改并将其添加到master
关于3.我建议你阅读git rebase
答案 1 :(得分:1)
假设您处于以下情况:
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]
将您的新分支推送到远程存储库,或发出拉取请求,或项目的任何工作流程。
答案 2 :(得分:0)
git rebase
会帮助你。
要拆分最近的提交,请先:
$ git reset HEAD~
然后你可以提交你想要的不同部分。
对于加入不同的提交,您可以使用压缩找到要压缩的提交哈希,然后使用:
git reset *mentioned_hash*