我和其他开发人员一起在一个项目上使用Git几个月了.我有几年的SVN经验,所以我想我给这段关系带来了很多包袱.
我听说Git非常适合分支和合并,到目前为止,我只是没有看到它.当然,分支很简单,但是当我尝试合并时,一切都变得很糟糕.现在,我已经习惯了SVN,但在我看来,我只是将一个低于标准的版本系统换成了另一个.
我的搭档告诉我,我的问题源于我不顾一切地合并,并且我应该在很多情况下使用rebase而不是合并.例如,这是他所规定的工作流程:
clone the remote repository
git checkout -b my_new_feature
..work and commit some stuff
git rebase master
..work and commit some stuff
git rebase master
..finish the feature
git checkout master
git merge my_new_feature
Run Code Online (Sandbox Code Playgroud)
基本上,创建一个功能分支,始终从主分支到分支,并从分支合并回主分支.需要注意的重要一点是,分支始终保持在本地.
这是我开始的工作流程
clone remote repository
create my_new_feature branch on remote repository
git checkout -b --track my_new_feature origin/my_new_feature
..work, commit, push to origin/my_new_feature
git merge master (to get some changes that my partner added)
..work, commit, push to origin/my_new_feature
git merge master
..finish …Run Code Online (Sandbox Code Playgroud) 用例:同一存储库 A、B、B2 的三个 git 克隆。Repos A 和 B 是正常的,B2 是裸的(用 --bare 制作)。一切都在我的控制之下,即只有一个用户。
在站点 B,我工作(几次 git 提交),然后 git push B2。
我可以:
但这并不完全正确。在 git pull B2 之后,站点 B 工作目录将有一个奇怪的历史记录。
我需要一些不使用 --force 的方法。我想扔掉 B2 上的 xx..HEAD,然后从 A 正常推送。也许:
在 B2(裸回购)
不确定这是否足够。我可以通过从站点 A 重新克隆来实现(删除 B2,git init --bare,从 A 推送),但这似乎有点矫枉过正。该如何推/拉的Git重订后似乎有关,但我希望除了“不这样做”的一些答案。
最重要的是,我如何真正彻底地丢弃 B2 上的提交,以便 A 的重新调整历史记录将被接受为新提交?