如何仅提交一些文件?


259

我有两个项目。第一个是“官方”项目,第二个是轻量级修改(添加了一些文件)。我创建了新分支,并向它们添加了新文件。但是在开发过程中,两个分支共用的一些文件已更改。

如何仅提交这些文件?


那两个项目是否连接到相同的git仓库?
Oleksandr

是的,它是相同的存储库,但我不想将自己的分支放到服务器上
Nips

那么,为什么不合并新分支到主分支(或其他官方分支)
Oleksandr

Answers:


261

我想您想将更改提交到一个分支,然后在另一分支中使这些更改可见。在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

22
要按字面意义提交那些文件,即使已经进行了其他更改git commit [some files],也--only应该使用第二个示例(,表示切换)。第一个示例(git add [some files]后跟git commit)还将提交已进行的任何其他更改。
Lexikos

4
我将为提供git commit [某些文件]的示例提供帮助。例如您应该如何替换[某些文件],逗号,空格?
Claudiu Creanga 2015年

2
@claudiu通常外壳程序是用空格分隔的。如果你下潜够深你可以改变任何东西
亚历克斯

如果您可以添加一些示例,那么此答案将非常有用。
Yamur

154

获取您要提交的文件列表

$ 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


30

其中一些似乎“不完整”

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

同时添加 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)

其他答案显示您有时想做的藏匿处


11

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

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

然后将它们一点一点地添加回去。


11

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

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

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

有两种方法可以执行此操作:

1.仅使用以下两个步骤处理这两个文件:

git add file1 file2

然后,提交

git commit -m "your message"

然后推

git push

2.直接提交

git commit file1 file3 -m "my 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
用户

0

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

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应用到正确的分支并进行提交,将步骤6中的新存储存储提交到此分支或任何其他分支。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.