在github上推送文件,而不是整个分支

在github上推送文件,而不是整个分支,git,push,commit,pull,Git,Push,Commit,Pull,以下是将我对file.txt的更改从我的本地分支推送/提交到我的暂存分支的步骤: git add file.txt git commit-m“我的文件已更改” git推送 问题是,整个分支被推送和合并,而不仅仅是文件中的更改。我如何避免这种情况?我如何从我提交的历史记录中删除这个特定的?所以我可以向主机发送一个干净的pull请求。这不是git的工作方式。推送用于发送远程分支没有的所有更改。如果您想放弃除了名为“my file is changed”的提交之外的所有其他更改,您可以这样做 git

以下是将我对
file.txt
的更改从我的本地分支推送/提交到我的暂存分支的步骤:

  • git add file.txt
  • git commit-m“我的文件已更改”
  • git推送

  • 问题是,整个分支被推送和合并,而不仅仅是文件中的更改。我如何避免这种情况?我如何从我提交的历史记录中删除这个特定的?所以我可以向主机发送一个干净的pull请求。

    这不是git的工作方式。推送用于发送远程分支没有的所有更改。如果您想放弃除了名为“my file is changed”的提交之外的所有其他更改,您可以这样做

    git rebase -i $(git rev-parse origin/branch_name)
    
    将除“我的文件已更改”之外的所有其他提交设置为“d”以便删除。这将删除所有其他提交,您现在可以只推一次提交

    但是,如果您的目标是保持这些其他提交,我建议您从远程分支的头部签出一个新分支,并在那里选择您的单个提交,从这个新分支创建拉请求

    git checkout -b new_branch_name origin/branch_name
    git cherry-pick commit_sha
    git push -u origin new_branch_name
    

    如果需要从原始分支中删除单一提交,只需执行我列出的第一个命令,并删除该单一提交而不是其他提交。

    当dev是您的远程分支时,请尝试

    git push origin HEAD:refs/for/dev
    

    您不推送文件,而是推送提交。请详细说明您希望实现的目标。git对于目录的许多频闪快照是必不可少的。@MeriemBen:为什么您认为使用
    commit
    (以我的经验,这是非常罕见的语法)是解决方法?您建议使用它的过程没有多大意义-您是说需要对索引进行阶段性更改,然后使用忽略索引的
    commit
    命令。另外,当您说“staged branch”时,我还不明白您的意思,因为这不是典型的git术语。所有这些可能看起来都很挑剔,但是如果你把基本概念搞混了(看起来你可能会这样),那么不后退一步就继续重新学习是否有风险?有没有一种方法可以为一个特定的提交发出请求?因为当我做一个拉请求时,我提交的整个历史记录都会出现,我只希望在一个特定的位置上放置一个请求commit@MeriemBen拉取请求在分支级别上操作。为了使它对一个特定的提交有效,该提交应该是源分支和目标分支之间唯一不同的提交。我上面概述的两种方法中的任何一种都可以满足您的需要,这取决于您是否希望保留其他更改。但是,由于基于您的其他评论,您已经推送了当前分支,因此我建议使用第二种方法,而不修改原始分支。