使用git维护个人差异化

4
我一直在使用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:

所以,我自己回答了这个线程,但我觉得它仍然可以得到改进。这种方法的问题首先是我需要单独为主分支和本地分支拉取更改。在这里,处理这种情况的最佳方法是什么?此外,如果所有提交都是无序的,该如何处理?

编辑3:

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

4个回答

2

经过一些摸索和调整,我已经现在采用了这样的工作流程...

从主分支(即配置了origin/remote的分支),假设它是master分支,请执行以下操作

git checkout -b local

这将创建一个名为local的新分支并切换到该分支。

然后可以在该分支上进行个人更改,并对其进行提交。

现在假设已经在该分支上进行了两次提交,这些提交不需要推送到上游(E和F),然后是三个必须要推送的提交(G,H和I),如下所示:

A-B-C-D [master]

         \

          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

这一定要做好。


维护 Git 的差异性 - ciastek

0

在这种情况下,我肯定会使用私有分支,定期地将我的工作进行rebase(这样会自动撤销我的更改,将远程的更改带入并在其之上应用我的补丁)。

当您想要提交部分更改时,您可以将主分支从您的私有分支rebase(例如特定的提交 - 假设您不想提交所有更改)。然后将更改推送到上游主分支。

编辑:

Rebase基本上是删除您的本地提交,拉取来自远程的所有更改(快进更改。由于您的提交已被删除,所以无需进行任何合并)。然后它将您的本地提交应用在仓库之上。此时,git将尝试将您的更改与刚刚拉取的代码进行合并。

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

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

添加您的本地更改

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

现在,每当远程仓库有更多的提交时,您只需将自己的提交变基到它们之上即可:
git pull --rebase

如果您有一些更改需要推送到远程存储库,同时又希望保留一些本地更改,那么情况会稍微复杂一些。在这种情况下,我建议您保留另一个分支,并仅将要推送到远程的更改拉入主分支。


嘿,谢谢你的解决方案。但是你能详细说明一下吗?我在使用“rebase”命令时出了点问题。 - purezen

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

我想维护我个人对某些文件的更改(我希望这些更改可以与远程仓库同步更新)。不要将它们从Git中排除。例如,Rails环境下的Gemfile,我想添加我的更改,并拉取远程的更改。但同时,保留一些更改(例如一些调试/测试gem和其他初始化文件,它们的安装将为我的本地设置创建) 。 - purezen

0

如果您知道不会将它们添加到主存储库中,为什么要将它们保留在项目存储库的本地副本中?创建一个新存储库,将您的工具保存在那里,然后使用 PATH(或适合您环境的任何内容)来访问您的工具。有关位于主存储库中的配置文件的本地更改,请参见{{link1:@ciastek的答案}}。


我打算保留一些更改,而不是文件,如果这是你的问题。我已经在@ciastek的答案中进行了评论。 - purezen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接