【问题标题】:How do I commit only some files?我如何只提交一些文件?
【发布时间】:2011-11-06 13:10:06
【问题描述】:

我有两个项目。一是“官方”项目,二是轻微修改(添加了一些文件)。我创建了新分支并将新文件放入其中。但在开发过程中,两个分支共有的一些文件发生了变化。

如何只提交这些文件?

【问题讨论】:

标签: git git-branch git-commit


【解决方案1】:

我想您想将更改提交到一个分支,然后使这些更改在另一个分支中可见。在 git 中,更改分支时不应在 HEAD 顶部进行任何更改。

您仅通过以下方式提交更改的文件:

git commit [some files]

或者,如果你确定你有一个干净的暂存区,你可以

git add [some files]       # add [some files] to staging area
git add [some more files]  # add [some more files] to staging area
git commit                 # commit [some files] and [some more files]

如果你想让这个提交在两个分支上都可用

git stash                     # remove all changes from HEAD and save them somewhere else
git checkout <other-project>  # change branches
git cherry-pick <commit-id>   # pick a commit from ANY branch and apply it to the current
git checkout <first-project>  # change to the other branch
git stash pop                 # restore all changes again

【讨论】:

  • 要逐字提交这些文件,即使已暂存其他更改,也应使用第二个示例(git commit [some files],这意味着--only 开关)。第一个示例(git add [some files] 后跟 git commit)也将提交已暂存的任何其他更改。
  • 我会帮助提供 git commit [一些文件] 的示例。比如你应该如何替换[一些文件]、逗号、空格?
  • @claudiu 通常外壳的东西是用空格分隔的。如果您潜得足够深,您可以将其更改为任何内容
  • 如果你可以添加一些例子,这个答案会很棒。
【解决方案2】:

获取要提交的文件列表

$ git status

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

modified:   file1
modified:   file2
modified:   file3
modified:   file4

将文件添加到暂存

$ git add file1 file2

检查你的承诺

$ git status

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    modified:   file1
    modified:   file2

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   file3
    modified:   file4

使用提交消息提交文件

$ git commit -m "Fixed files 1 and 2"

如果您不小心提交了错误的文件

$ git reset --soft HEAD~1

如果您想取消暂存文件并重新开始

$ git reset

Unstaged changes after reset:
M file1
M file2
M file3
M file4

【讨论】:

  • 这是错误的。我做了git add file1 file2,然后git commit -m "Fixed files 1 and 2",它提交了ALL文件。
  • @BinarWeb 因为您已暂存(添加)所有这些文件。但值得一提的是答案绝对清楚。在你的情况下,什么会起作用:git commit file1 file2 -m "Fixed files 1 and 2"
【解决方案3】:

你可以提交一些更新的文件,像这样:

git commit file1 file2 file5 -m "commit message"

【讨论】:

    【解决方案4】:

    其中一些似乎“不完整”

    一群人不会知道他们是否应该使用引号等。

    添加 1个显示位置路径的特定文件

    git add JobManager/Controllers/APIs/ProfileApiController.cs
    

    提交(记住,提交只是本地的,不会影响任何其他系统)

    git commit -m "your message"  
    

    推送到远程仓库

    git push  (this is after the commit and this attempts to Merge INTO the remote location you have instructed it to merge into)
    

    其他答案显示您有时想要做的 stash

    【讨论】:

      【解决方案5】:

      假设您对多个文件进行了更改,例如:

      • 文件1
      • 文件2
      • 文件3
      • 文件4
      • 文件5

      但您只想提交 File1 和 File3 的更改。

      有两种方法可以做到这一点:

      1.仅暂存这两个文件,使用:

      git add file1 file3
      

      然后,提交

      git commit -m "your message"
      

      然后推,

      git push
      

      2.直接提交

      git commit file1 file3 -m "your message"
      

      然后推,

      git push
      

      实际上第一种方法很有用,如果我们定期修改文件并暂存它们 --> 大型项目,通常是 Live 项目。
      但如果我们正在修改文件而不是暂存它们,然后我们可以直接提交 --> 小项目

      【讨论】:

      • 当你没有像第二个例子建议的那样指定文件名时,git假定这些参数的命令标志是--only。然后,它将与git commit --only file1 --only file3 -m "my message" 使用相同的命令或使用git commit -o file1 -o file3 -m "my message" 的快捷方式参考:git-scm.com/docs/git-commit
      【解决方案6】:

      如果您已经暂存文件,只需取消暂存它们:

      git reset HEAD [file-name-A.ext] [file-name-B.ext]
      

      然后一点一点的添加进去。

      【讨论】:

        【解决方案7】:

        我想你也可以使用命令行:

        git add -p
        

        这使您可以逐个查看所有未提交的文件,并选择是否要提交。

        然后你有一些选项会出现在每次修改中:我使用“y”表示“是的,我想添加这个文件”,“n”表示“不,我稍后会提交这个”。

        Stage this hunk [y,n,q,a,d,K,g,/,e,?]?
        

        至于其他选项( q,a,d,K,g,/,e,? ),我不确定它们是做什么的,但我猜是“?”如果您需要更深入地了解细节,可能会对您有所帮助。

        这样做的好处是您可以推送您的工作,然后创建一个新分支,所有未提交的工作都将跟随您在该新分支上。如果您编写了许多不同的代码并且您确实想在推送之前在 github 上重新组织您的工作,这将非常有用。

        希望这会有所帮助,我之前没有看到它说(如果被提及,我的错)

        【讨论】:

          【解决方案8】:

          如果您没有太多代码更改,这是一种简单的方法:

          1. git stash
          2. git stash apply
          3. remove the files/code you don't want to commit
          4. commit the remaining files/code you do want
          

          然后,如果您希望将已删除的代码(未提交的位)放在单独的提交或另一个分支中,那么仍然在此分支上:

          5. git stash apply
          6. git stash
          

          在第 5 步中,您已经应用了存储并提交了您在第 4 步中确实想要的代码,新应用的存储中的差异和未跟踪只是您在第 4 步中提交之前在第 3 步中删除的代码。

          因此,第 6 步是您不想 [想要] 提交的代码的存储,因为您可能真的不想丢失这些更改,对吧?因此,现在可以通过在正确的分支上执行 git stash apply 并提交来将步骤 6 中的新存储提交到此分支或任何其他分支。

          显然,这假定您在一个流程中执行这些步骤,如果您在这些步骤中的任何其他点进行存储,则需要注意上述每个步骤的存储引用(而不仅仅是基本存储并应用最近的存储) .

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-04-24
            • 2018-10-19
            • 2020-01-27
            • 1970-01-01
            • 1970-01-01
            • 2021-05-04
            • 1970-01-01
            • 2010-10-10
            相关资源
            最近更新 更多