git将文件与先前的提交合并

时间:2011-08-12 19:29:07

标签: git merge

我是一个git新手,对不起,如果这是一个绝对的初学者问题。有没有办法将文件与先前的提交合并。

我想要实现的是,我有一个设置文件,保持,以及设置。当我扩展时,我改变了例如数据库设置,以便能够尝试一些东西。现在我将该分支与master合并。现在我不想检查以前版本的设置文件,因为我对它进行了一些调整,这是新功能所要求的。所以我想将文件与之前的提交合并。

3 个答案:

答案 0 :(得分:1)

让我们先得到一些术语。当您将分支合并回master时,您的设置文件也会合并,将您在分支中所做的更改与分支后master中所做的任何其他更改相结合。如果我理解正确,您想撤消在分支中所做的一些更改,但不是所有更改。用git的说法,这称为还原更改。

要执行此操作,请使用git log查找引入要还原的更改的提交。如果除了你要删除的内容之外没有其他任何更改,那么你需要做的就是运行git revert <commit>并且你很好。这就是为什么我总是把我知道的任何调试代码放在后面的自己的提交中的主要原因。

如果它不是提交中唯一的变化,那么一切都不会丢失,但它有点复杂。运行:

git revert --no-commit <commit>
git reset HEAD
git add --patch
git commit
git reset --hard

前两个命令撤消给定提交中的所有更改,但尚未提交撤消。 --patch的{​​{1}}选项可让您以交互方式选择要逐个保留的更改。然后你提交更改,git add摆脱你不想保留的更改。

这个答案假设改变是一次性交易。如果您希望始终在本地保留不同的设置文件而不是将其推送到服务器,请使用其他答案之一。

答案 1 :(得分:0)

合并时,不应从文件中删除新功能。如果你想要旧的数据库设置,请在合并之前检查文件的版本(合并后HEAD^)并修改你的最后一次提交。如果您的新功能已添加到分支中,则必须手动更改数据库设置。

为了避免将来出现此类问题,请创建一个由git跟踪并包含空设置的模板文件(settings.template)。将您的真实设置文件放入.gitignore并将模板复制到真实姓名,然后进行编辑。

答案 2 :(得分:-1)

有三种情况需要不同的数据库设置:

  1. 使用相同分支的不同开发
  2. 使用相同分支的不同环境(即QA,分期或生产)
  3. 使用不同分支来访问不同的环境。
  4. 我会看看: 1.如果可能,仅为连接字符串单独配置 2.使用涂抹/清理脚本转换可在该环境上工作的设置文件 3.使用git属性管理合并,以便在任何配置更改时显式失败。一种方法是告诉git将配置文件视为二进制文件。

    阅读git attributesgit smudge/clean scripts