我一直在使用 Git 进行一些项目,并希望为此改进我的工作流程。我想知道在团队中工作时保持自己的差异的好方法。例如,我想添加一些适合我并在使用它们时工作的调试实用程序,但不想将这些更改引入团队(远程(存储库。使用我自己的配置文件等也是如此。
我曾考虑过在不同的分支上工作,但在这种情况下,每次我将自己的分支合并到主分支中时,我都必须撤消我的"个人"更改。
有没有更好的方法来做同样的事情?
编辑:
所以,在使用 Git 嬉戏之后,我能够想出这个:
从我的"主"分支,我输入
git checkout -b local
然后我在那里做了一些更改。我首先对我的配置文件进行了更改,我想将其排他性,然后完成推送到远程存储库的工作。因此,我一开始有一个独占提交,然后是我将推送到远程存储库的提交。然后我签出我的主分支,并在一段时间后输入了最新的代码。
git checkout master
git pull
过了一会儿又到我当地的分行办理了检查。然后我从那里签出了另一个分支
git checkout -b commit-work
然后
git rebase --onto master commit-work~3
其中提交工作~3 指的是我想推送的最后一个提交。
然后我把这个分支合并到我的主分支中,我就准备好了!
但是,我仍然希望有一个分支机构,在那里我可以再次恢复工作。目前,当我检查我的本地时,我有我所做的提交,但我无法弄清楚如何引入对主节点所做的更改。希望有人能帮忙。
编辑2:
所以,我自己回答了这个话题,但我觉得它仍然可以改进很多。这种方法的问题是,首先我需要分别引入主分支和本地分支的更改。在这里处理这个问题的最佳方法是什么?此外,这种方法在创建"私有"提交和单独组中的正常提交时效果很好。以何种方式处理所有提交都是无序的情况。
编辑3:
看起来我现在有一个令人满意的工作流程。但是,如果可以的话,请提出任何改进建议。
所以经过一番乱搞,我现在已经解决了这个工作流程。
从主分支(配置了源/远程分支(中,假设它是主分支,do
git checkout -b local
这将按本地名称创建一个新分支并签出相同的分支。
然后可以在那里进行一些个人更改并为此进行提交。现在让我们假设在这个分支上做了两个不被推送到上游的提交(E&F(,然后是另外三个必须被推送的提交(G,H和I(,如下图所示:
A - B - C - D [主]
E - F - G - H - I [local]
现在需要签出主分支
git checkout master
然后简单地做
git rebase --onto master F local
可以推断,git rebase 命令的第一个参数是您希望所有提交最终所在的分支,在本例中是主分支。第二个参数是最后一个提交,您希望将其保留到您自己的代码库中,而最后一个参数是需要将更改推送到上游的提交的引用。本地此处是指本地分支中的最后一次提交。
这样,就可以从主分支推送提交。然后,为了执行任何工作,签出本地分支,从远程拉入更改,并迭代该过程。此外,使用 --rebase
选项拉入还将确保私有提交保留在分支之上。
编辑:
看来我终于有答案了。我可以轻松地继续在我的个人分支上工作,在推送到远程然后通过以下方式拉入我的主分支后,
要继续在个人部门工作,首先要做
git push
git pull
git co local
然后简单地用,
git rebase master
这必须完成工作。
,我肯定会使用私有分支,定期重新调整我的工作(这会自动撤消我的更改,引入遥控器的更改并在此之上应用我的补丁(。
当您想要交付某些更改时,可以从专用分支重定主分支的基址(例如特定的提交 - 假设您不想交付所有更改(。然后将更改推送到上游主分支。
编辑:
变基基本上会删除您的本地提交,从远程提取所有更改(快进更改。无需进行任何合并,因为您的提交已被删除(。然后,它会在存储库顶部应用您的本地提交。此时,git 将尝试将您的更改与您刚刚提取的代码合并。
因此,例如,如果要维护对 Github 存储库的本地更改:
git clone https://github.com/rails/turbolinks.git
添加本地更改
git add my-changed-file
git commit -m "local changes"
现在,每当远程仓库获得更多提交时,您只需将提交重新定位到它们之上:
git pull --rebase
如果您有一些更改要推送到远程存储库,而一些要保留的本地更改,则会稍微复杂一些。在这种情况下,我建议您保留另一个分支,并仅将要推送到远程的更改拉入主分支。
如果你想在开发中使用修改后的配置文件,你可以使用 git update-index --assume-unchanged <file>
让 git 忽略你对给定文件的本地更改。在整个本地存储库中,文件更改将被忽略,就像将给定文件添加到.gitignore
一样。
更多: man git-update-index
如果您知道不打算将它们添加到主存储库中,为什么要将它们保留在项目存储库的本地副本中?创建一个新的存储库,将工具保留在那里,然后使用PATH
(或任何适合您的环境的工具(来访问您的工具。有关对主存储库中的配置文件的本地更改,请参阅@ciastek中的答案。