使用 git 维护个人差异

  • 本文关键字:git 维护 使用 git workflow
  • 更新时间 :
  • 英文 :


我一直在使用 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中的答案。

最新更新