我和我的伙伴正在开展一个团队项目。 我们的项目目录应该如下所示:
PERSON __|____________________ | | INSERT_PERSON DELETE_PERSON
Where" Person"是一个相关功能的文件夹和" Insert_Person"和" Delete_Person"是代码的文件夹。我重新推动并推动了#34; Insert_Person"稳定,然后我的伙伴重新定位" Delete_Person"但尚未推出它。 我们意识到忘记了父文件夹," Person"。
| | INSERT_PERSON DELETE_PERSON
我们如何在此处放置Parent文件夹?在他推动之前他可以把它放进去吗?我需要撤消我的rebase吗?
这个问题复杂化,因为我们都不知道如何可视化rebase。 任何帮助表示赞赏。
答案 0 :(得分:0)
您有两种选择:简单解决方案和重写历史解决方案。
最简单的解决方案就是按照您的意愿继续,并在事后解决问题。在您的合作伙伴合并"删除人员"分支,你可以这样做:
git checkout master # or whatever your stable branch is
git pull
mkdir PERSON
git mv INSERT_PERSON PERSON/
git mv DELETE_PERSON PERSON/
git commit -m "Fix folder structure"
git push
这将创建一个新的提交,将两个文件夹移动到公共文件夹中。这不应该导致任何问题,因为即使跨文件重命名,Git通常也非常适合跟踪更改。
您可能更愿意不创建额外提交,并且您可能希望您的历史记录看起来像您从未犯过错误。有了Git,你也可以这样做。
首先,做:
git log --all --oneline --graph --decorate
这会给你一些看起来像这样的输出:
* eba40bf (delete-person) Improve error checking
* 18d630d Implement main delete person functionality
* ffdf79f (HEAD, master) Merge branch 'insert-person'
|\
| * d0b6dbb Add more features for person inserting
| * 95312ee Implement main insert person functionality
|/
* a65c0f4 ...
如果您已经删除了插入分支,则需要撤消该分支。为此,请查找插入分支的最后一次提交,在本例中为d0b6dbb
。然后做:
git branch insert-person d0b6dbb
接下来,重置master
,并启动insert-person
的交互式rebase:
git checkout master
git reset --hard HEAD^
git checkout insert-person
git rebase -i master
将第一次提交从pick
更改为edit
,因此您的rebase-todo文件看起来像这样:
edit 95312ee Implement main insert person functionality
pick d0b6dbb Add more features for person inserting
然后修复文件夹结构并继续使用rebase:
mkdir PERSON
git mv INSERT_PERSON PERSON/
git commit --amend
git rebase --continue
此时,Git非常聪明,它应该应用所有其他提交而不会出现问题,并且任何其他更改都应该应用于正确文件夹中的新位置。
然后你可以合并:
git checkout master
git merge --no-ff insert-person
如果delete-person
分支还没有被重新定位,那么你可以为它做同样的事情。但是,由于它已被重新定位,因此您必须这样做:
git rebase -i --onto master ffdf79f delete-person
然后继续使用之前的rebase。
这将为您提供一个漂亮的干净历史记录,它看起来好像文件夹结构从一开始就是正确的。
* 0aa9452 (HEAD, master) Merge branch 'delete-person'
|\
| * ebcbf01 (delete-person) Improve error checking
| * 1a6ae32 Implement main delete person functionality
|/
* 8591d39 Merge branch 'insert-person'
|\
| * ca85ff3 (insert-person) Add more features for person inserting
| * 790f60f Implement main insert person functionality
|/
* a65c0f4 ...
对于Git来说,很难弄得太糟糕,以至于你丢失了数据,特别是在你自己拥有多个repo副本的情况下。因此,只要您远离--force
/ -f
等论点,那么可以尝试使用不同的解决方案来查看您更喜欢的内容。