【问题标题】:How to commit the staged files and excluding modified files如何提交暂存文件并排除修改后的文件
【发布时间】:2014-02-04 23:18:02
【问题描述】:

我以为 git commit 只会将暂存文件提交到 repo,

git ci a.txt

然后将修改后的a.txt(内容:b)提交到repo,而不是暂存的a.txt(内容:a)

那么什么命令可以 git 将暂存文件提交到 repo ,并像往常一样保留修改后的文件。

谢谢。

【问题讨论】:

    标签: git


    【解决方案1】:

    当您执行git commit(没有路径规范)时,您只会提交分阶段的更改。因此,为了不提交新的更改到a.txt,而不是执行git ci a.txt,只需执行git commit,这不会提交新的未暂存更改。

    【讨论】:

    • 但是有两个文件a.txtvimrc,如果我输入git ci那两个暂存文件将被提交,如何只提交暂存的a.txt?谢谢
    • 在这种情况下,您应该取消暂存vimrc 文件。 git reset HEAD vimrc 会为你做这件事,检查当你做 git status 时显示的帮助消息是否准确地说明了这一点。
    • 所以没有办法提交部分STAGED FILES,对吧?
    • 一旦你上演了它们,那么我认为没有办法做到这一点。但是您可以部分暂存文件。如果你做git add -p a.txt,它会遍历每一个大块,让你决定是否上演。
    • @newBike 解决方法是git stash --keep-index && git commit a.txt && git stash pop。请注意,stash 将以当前的 HEAD 作为父级,git stash pop 将导致包含暂存和未暂存行的文件发生合并冲突
    【解决方案2】:
    $git add a.txt
    

    这会将一个文件添加到 git,这意味着 git 将开始跟踪该文件的任何更改。此操作仅对创建的新文件执行。 $git add . 将添加该文件夹级别中存在的所有文件。

    现在 git commit -m "Initial commit.

    这会提交当前文件并将其推送到暂存区。如果您有旧文件,请说 b.txt and c.txt,其中包含更改并且已经被 git 跟踪。您需要单独提交它们

    `git commit -m "Issues fixed /path/b.txt /path/c.txt`
    

    如果远程仓库已更改 $git pull$git push,现在进行拉取。推送会将所有三个文件a.txt, b.txt and c.txt 发送到远程仓库。

    【讨论】:

      【解决方案3】:

      您对已暂存文件所做的任何更改都不会自行暂存。你必须明确地暂存它们。

      【讨论】:

        【解决方案4】:

        git commit -- PATHSPEC 创建一个提交,其中包含与 REFSPEC 匹配的文件的当前签出版本(即:暂存和未暂存)。

        这有点违反直觉,因为 reglar git commit 创建分阶段更改的提交,而人们可能期望 git commit -- PATHSPEC 也这样做,但只包含某些文件。

        一种解决方法是先git stash --keep-index,然后git commit -- a.txt,然后git stash pop。这将导致合并冲突,但是在(不常见的)同一行同时被暂存和未暂存的情况下。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-04-24
          • 1970-01-01
          • 2020-11-04
          • 2019-05-06
          • 2018-02-05
          • 2020-07-18
          • 2016-07-05
          相关资源
          最近更新 更多