我如何只提交一些文件?

时间:2011-08-30 06:12:08

标签: git git-branch git-commit

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

如何只提交这些文件?

8 个答案:

答案 0 :(得分:220)

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

答案 1 :(得分:120)

获取您要提交的文件列表

$ 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

答案 2 :(得分:64)

您可以提交一些更新的文件,如下所示:

git commit file1 file2 file5 -m "commit message"

答案 3 :(得分:18)

其中一些似乎&#34;不完整&#34;

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

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

其他答案显示您有时会想要的藏匿

答案 4 :(得分:10)

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

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

然后一点一点地添加它们。

答案 5 :(得分:8)

假设您对多个文件进行了更改,例如: 文件1 文件2 文件3 FILE4 File5

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

有两种方法可以做到这一点: 1 GT;仅使用以下两个文件进行分阶段: git add file1 file2

然后,提交 git commit -m&#34;您的消息&#34;

然后推 git push

2 - ; 直接提交

git commit file1 file3 -m&#34;我的消息&#34;

然后推, git push

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

答案 6 :(得分:1)

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

git add -p

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

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

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

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

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

希望这有帮助,我之前没有看到它说过(如果提到了,我的错)

答案 7 :(得分:0)

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

::-webkit-scrollbar {
    width: 12px;
}

::-webkit-scrollbar-track {
    -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3); 
    border-radius: 10px;
}

::-webkit-scrollbar-thumb {
    border-radius: 10px;
    -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.5); 
}

然后,如果要在单独的提交或另一个分支中删除代码(未提交的位),则在该分支上执行以下操作:

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步中,您已经应用了存储并提交了在步骤4中想要的代码,新应用的存储中的差异和未跟踪只是在第4步中提交之前在第3步中删除的代码。

由于第6步是您[不想]提交的代码的存储库,因为您可能真的不想丢失那些更改,对吗?因此,通过将git stash应用到正确的分支上并提交,现在可以将第6步中的新存储提交到该分支或任何其他分支。

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