如何只提交部分文件?

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

如何只提交这些文件?

608422 次浏览

我猜想您希望将更改提交到一个分支,然后使这些更改在另一个分支中可见。在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 reset HEAD [file-name-A.ext] [file-name-B.ext]

然后一点一点地把它们放回去。

获取你想要提交的文件列表

$ 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 commit file1 file2 file5 -m "commit message"

有些内容似乎“不完整”

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

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

其他答案(s)显示等,你有时会想这样做

假设你对多个文件做了修改,比如:

  • File1
  • File2
  • File3
  • File4
  • File5

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

有两种方法:

1.只运行这两个文件,使用:

git add file1 file3

然后,提交

git commit -m "your message"

然后推,

git push

2.直接提交

git commit file1 file3 -m "your message"

然后推,

git push

实际上是第一种方法是有用的,如果我们定期修改文件并暂存它们——>大型项目,通常是活动项目 但是如果我们正在修改文件,而不是暂存它们,那么我们可以直接提交—>小型项目< / >强

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

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步中需要的代码,新应用的存储中的diff和untracked就是在第3步中提交之前删除的代码。

因此,第6步是你不想提交的代码,因为你可能真的不想失去这些更改,对吗?因此,第6步中的新stash现在可以通过在正确的分支上执行git stash apply并提交来提交到这个或任何其他分支。

显然,这假设你在一个流程中执行这些步骤,如果你在这些步骤的任何其他点上进行隐藏,你需要注意上面每个步骤的隐藏引用(而不仅仅是基本的隐藏并应用最近的隐藏)。

我认为你也可以使用命令行:

git add -p

这允许您逐一查看所有未提交的文件,并选择是否提交它们。

然后你就有了一些修改的选项:对于“是的,我想添加这个文件”;而&;n"“不,我以后再做这件事”。

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

至于其他选项(q,a,d,K,g,/,e,?),我不知道他们是做什么的,但我猜"?如果你想深入了解细节,也许能帮到你。

这样做的好处是,您可以推动您的工作,然后创建一个新的分支,所有未提交的工作将跟随您在那个新分支上。非常有用,如果你已经编写了许多不同的东西,你实际上想要在github上重新组织你的工作。

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