2017-06-12 49 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 
相關問題