2017-06-12 43 views
0

这里是我下面从我的本地推/提交我的file.txt改变我的上演分支步骤:推进文件在GitHub上,而不是整个分支

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

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

+1

你不要逼*文件*,你推*提交*。请详细解释你希望完成的事情。 –

+0

git对于整个目录来说是很重要的频闪快照。 –

+0

@MeriemBen:为什么你认为使用'commit '(这是我的经验,很少见的语法)是解决方法?你建议使用它的过程没有什么意义 - 你说你需要对索引进行更改,然后使用'commit'命令忽略索引。当你说“staged branch”时,我还会混淆你的意思,因为这不是典型的git术语。所有这些都可能看起来很挑剔,但如果你把基本概念混淆了(似乎你可能会这样做),那么继续而不回退重新学习是有风险的 –

回答

1

这不是git的工作方式。 Push用于发送远程分支没有的所有更改。如果你想扔掉你的所有其他变化除了提交名为“我的文件被修改”,你可以做

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 

如果需要然后取出单从原分公司提交,只需要执行我列出了单个提交的,而不是其他人的第一个命令和下降。

+0

有没有办法为一个具体的提交?因为当我执行拉取请求时,我的提交的整个历史记录都会出现,而我只希望对一个特定提交发出请求 –

+0

@MeriemBen拉取请求在分支级别上运行。为了使其对一个特定的提交有效,该提交应该是您的源分支和目标分支之间唯一不同的提交。根据您是否想要保留其他更改,上述两种方法中的任何一种都可以满足您的需求。但是,由于基于您的其他评论,您已经推送了当前分支,因此我会建议第二种方法,并且不要修改原始分支。 – Lunyx

0

当dev为您的远程分支,尝试

git push origin HEAD:refs/for/dev 
相关问题