git 如何只提交部分文件?

w6mmgewl  于 2023-08-01  发布在  Git
关注(0)|答案(8)|浏览(319)

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

b1payxdu

b1payxdu1#

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

s3fp2yjn

s3fp2yjn2#

获取要提交的文件列表

$ 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" -- file1 file2

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

$ git reset --soft HEAD~1

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

$ git reset

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

wmtdaxz3

wmtdaxz33#

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

git commit file1 file2 file5 -m "commit message"

字符串

qzlgjiam

qzlgjiam4#

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

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

但是您只想提交File 1和File 3的更改。
有两种方法可以做到这一点:
1.仅暂存这两个文件,使用:

git add file1 file3

字符串
然后,提交

git commit -m "your message"


然后推,

git push


2.直接提交

git commit file1 file3 -m "your message"


然后推,

git push


实际上,第一种方法是有用的,如果我们定期修改文件并暂存它们-->大型项目,通常是Live项目。

但是如果我们修改文件而不是暂存它们,那么我们可以直接提交-->小项目

6jjcrrmo

6jjcrrmo5#

其中一些似乎“不完整”
一群人不会知道他们是否应该使用引号等。

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


其他答案显示藏匿等。有时候你会想这么做

vaqhlq81

vaqhlq816#

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

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

字符串
然后把它们一点一点地加回去。

7gs2gvoe

7gs2gvoe7#

你也可以使用命令行:

git add -p

字符串
这允许您逐个查看所有未提交的文件,并选择是否要提交它们。
然后你有一些选项,将出现在每一个修改:我用“y”表示“是的,我想添加这个文件”,用“n”表示“不,我稍后会提交这个文件”。

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


至于其他选项是(q,a,d,K,g,f,e,?),我不确定他们做什么,但我猜“?“如果你需要深入了解细节的话可能会对你有所帮助
这样做的好处是,你可以推动你的工作,然后创建一个新的分支,所有未提交的工作将跟随你在这个新分支上。如果你已经编写了很多不同的东西,并且你真的想在推送之前在github上重新组织你的工作,这是非常有用的。
希望这有帮助,我没有看到它说以前(如果它被提到,我的坏)

xfb7svmp

xfb7svmp8#

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

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中,由于您已经应用了stash并提交了您在步骤4中确实想要的代码,因此新应用的stash中的diff和未跟踪的代码只是您在步骤4中提交之前在步骤3中删除的代码。
因此,第6步是您不想提交的代码的一个隐藏,因为您可能真的不想丢失这些更改,对吗?所以步骤6中的新stash现在可以通过在正确的分支上执行git stash apply并提交来提交到这个分支或任何其他分支。
显然,这假设你在一个流中执行这些步骤,如果你在这些步骤中的任何其他点进行stash,你需要注意上面每个步骤的stash引用(而不仅仅是基本的stash和应用最新的stash)。

相关问题