【问题标题】:Pushing a file on github, not the whole branch在 github 上推送文件,而不是整个分支
【发布时间】:2017-11-14 05:43:04
【问题描述】:

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

  1. git add file.txt
  2. git commit -m "my file is changed"
  3. git push <my-remote> <my-branch>

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

【问题讨论】:

  • 你不推送文件,你推送提交。请详细说明您希望完成的工作。
  • git 是整个目录的许多频闪快照必不可少的。
  • @MeriemBen:您为什么认为使用commit <myfile.txt>(根据我的经验,这是一种相当罕见的语法)是解决办法?您建议使用它的过程没有多大意义 - 您是说您需要暂存对索引的更改,然后使用忽略索引的commit 命令。当你说“分阶段分支”时,我也很困惑你的意思,因为这不是典型的 git 术语。所有这些似乎都很挑剔,但如果你把基本概念混在一起(你可能会这样做),那么继续不退一步重新学习是有风险的

标签: git push commit pull


【解决方案1】:

当 dev 是你的远程分支时,试试

git push origin HEAD:refs/for/dev

【讨论】:

    【解决方案2】:

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

    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
    

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

    【讨论】:

    • 有没有办法为一个特定的提交发出拉取请求?因为当我提出拉取请求时,我的提交的整个历史都会出现,我只想对一个特定的提交提出请求
    • @MeriemBen 拉取请求在分支级别操作。为了使它对一个特定的提交有效,该提交应该是源分支和目标分支之间唯一不同的提交。我上面概述的两种方法中的任何一种都可以满足您的需求,具体取决于您是否要保留其他更改。但是,由于根据您的其他评论,您已经推送了当前分支,所以我建议第二种方法,并且不修改您的原始分支。
    猜你喜欢
    • 1970-01-01
    • 2016-01-14
    • 2016-12-24
    • 2022-01-13
    • 2013-12-23
    • 2021-05-18
    • 2021-06-11
    • 1970-01-01
    • 2016-01-09
    相关资源
    最近更新 更多