使用git维护个人差异

时间:2014-12-19 12:20:57

标签: 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

其中commit-work~3引用了我想要推送的最后一次提交。

然后我将这个分支合并到我的主分支中,我已经完成了设置!

但是,我仍然希望有一个分支,我可以重新开始工作。目前,当我查看我的本地时,我有我所做的提交,但我无法弄清楚如何引入对主人所做的更改。希望有人可以提供帮助。

编辑2:

所以,我自己已经回答了这个问题,但我觉得它还可以改进很多。这种方法的问题是,首先我需要分别为主分支和本地分支引入更改。在这里处理这个问题的最佳方法是什么?此外,这种方法可以正常工作,如果一个人创建'私有'提交和正常提交在不同的组中。以何种方式可以处理所有提交都是 disorderly 的情况。

编辑3:

看起来我现在有一个令人满意的工作流程。但如果可以的话,请提出任何改进建议。

4 个答案:

答案 0 :(得分:2)

因此,经过一番讨论,我现在已经解决了这个工作流程。

分支(配置了原始/远程的分支),让我们说它是分支,执行

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命令的第一个参数是您希望最终提交所有提交的分支,在本例中是主分支。第二个参数是最后一次提交,您希望保留给自己的代码库,而最后一个参数是提交的引用,需要将更改推送到上游。 local 此处指的是本地分支中的最后一次提交。

然后,可以从主分支推送提交。然后,为了完成任何工作,请检查本地分支,从远程引入更改,然后迭代该过程。 此外,使用--rebase选项拉入也将确保私有提交保留在分支之上。

编辑:

看起来我终于得到了答案。我可以轻松地继续在我的个人分支上工作,然后推送到遥控器,然后拉入我的主分支,

要继续在个人分支机构工作,请先执行

git push
git pull
git co local

然后使用

简化本地分支
git rebase master

这必须做好工作。

答案 1 :(得分:0)

在这种情况下,我肯定会使用私有分支,定期重新调整我的工作(这将自动撤消我的更改,将远程的更改添加到其中并在其上应用我的补丁)。

当您想要提供一些更改时,可以从私有分支重新绑定主分支(比如特定提交 - 假设您不想提供所有更改)。然后将更改推送到上游主分支。

编辑:

Rebasing基本上删除了您的本地提交,从远程提取所有更改(快速转发更改。无需进行任何合并,因为您的提交已被删除)。然后,它将您的本地提交应用于存储库之上。此时,git会尝试将您的更改与您刚刚提取的代码合并。

因此,例如,如果您想维护对Github存储库的本地更改:

git clone https://github.com/rails/turbolinks.git

添加您的本地更改

git add my-changed-file
git commit -m "local changes"

现在,只要远程存储库获得更多提交,您就可以在它们之上重新设置:

git pull --rebase

如果您要将某些更改推送到远程存储库以及您希望保留的某些本地更改,则会稍微复杂一些。在这种情况下,我建议您保留另一个分支,并将只需要推送到遥控器的更改拉入主分支。

答案 2 :(得分:0)

如果要在开发中使用修改后的配置文件,可以使用git update-index --assume-unchanged <file>使git忽略对给定文件的本地更改。整个本地仓库中的文件更改将被忽略,就像您将给定文件添加到.gitignore一样。

更多:man git-update-index

答案 3 :(得分:0)

如果您知道不打算将它们添加到主存储库,为什么要将它们保存在项目存储库的本地副本中?创建一个新的存储库,将工具保留在那里,然后使用PATH(或任何适合您环境的工具)访问您的工具。有关主存储库中配置文件的本地更改,请参阅the answer from @ciastek