代码之家  ›  专栏  ›  技术社区  ›  iconoclast

跳过(完整)暂存区域并直接提交文件或修补程序?

  •  2
  • iconoclast  · 技术社区  · 7 年前

    想象一下这个场景:你正在开发一个需要接触大量文件的功能,你已经有很多东西被暂存,还有很多东西没有被暂存(比如调试代码、临时注释,让你自己记住做/撤销某些事情,不要忘记添加你还没有时间添加的位),然后您会看到一个简单的单行更改,您必须进行更改,但它属于它自己的提交。

    有没有什么方法可以简单地做到这一点,而不需要把你精心添加的所有东西都从临时区域中抽出来,不需要隐藏(并冒着失去你对准备上演什么和不准备上演什么的谨慎选择的风险)和 就写那一行 ?

    我意识到 multiple staging areas 可能会使这成为可能,但我希望有一个更简单的解决方案。一些开关,让我跳过暂存区将比闲逛更方便 GIT_INDEX_FILE 有两个。

    git commit --skip-stage --patch ./app/models/whatever.rb
    

    如果这是 --index 当我将其弹出时,希望我没有在隐藏和弹出之间意外地做一些事情,从而破坏了干净地恢复索引的能力。

    具有 git stash pop ,你为什么问这个问题?因为它不仅是为了解决一个实际问题,而且是为了推进我可以用Git做的事情。仅仅因为一个问题的解决方案存在并不意味着它是最好的解决方案,也不意味着人们应该停止寻找替代方案。这适用于所有人,而不仅仅是吉特。

    1 回复  |  直到 7 年前
        1
  •  1
  •   torek    7 年前

    有一个 -a 旗帜 git commit -a --only --include 标志(可缩短为 -o -i

    git commit --only file1 file2
    

    git commit --include file3
    

    但这些都起作用了 通过 创建一个新的临时索引,正如我在回答您的链接问题时所述。

    它们的作用有点神奇,可能是也可能不是你想要的。特别是,这些创建的临时索引文件包括 .git/index.lock 刚出现的 索引,如果提交成功,它将成为 这个 --只有 变体很接近您想要的,有时可能 你想要什么,但有时可能会毁掉一些有价值的东西。

    git commit --only file1 file2

    首先创建一个新的临时索引,从 HEAD file1 file2 从工作树上,好像 git add file1 file2 . 现在这个临时索引匹配了

    Git还创建 .git/index.lock 临时索引,Git副本 文件1 文件2 和以前一样。所以 文件1 文件2

    第一 临时索引主要匹配的索引 ,但这两个文件除外。如果提交成功,Git会像往常一样更新当前分支,然后删除第一个临时索引,并通过重命名 第二 临时索引, .git/index . 所以现在的正常指数和以前一样 除了 文件1 文件2 已经被它取代了,好像被 .

    如果你精心策划了一场 不同的 版本 ,它们(当然)现在不在您的工作树中,因为工作树版本是您正在提交的版本 那个特别的版本是 ,被 git add

    git commit --include file3

    git添加 预计起飞时间 文件1 早些时候也许有点不同 属于 文件1 现在在你的工作树中,所以 在实际/常规索引中,与 在里面 .

    .git/index.lock ,从实际/常规索引复制。然后,Git拷贝 file3 git add file3

    现在Git使用临时 .git/index.lock 指数如果此提交成功,Git会像往常一样更新当前分支,然后从中重命名临时索引 .git/index.lock .git/索引 . 因此,现在实际/常规索引仍然具有 您先前添加的(可能与 文件1 在工作树中,但与旧的提交不同 文件1 ),加上 你通过 git commit --include .

    推荐文章