2017-02-16 11 views
1

ある時点で、私が作業していたブランチ(問題)とは無関係のファイルを編集したことがあります。私は誤ってGithubにプッシュし、プルリクエストを作成したときにそれを見ました。Git:ブランチから単一のファイルを削除して、プロジェクトに残しておきます。

私のブランチからファイルを削除したいのですが、プロジェクトから削除しません。つまり、ファイルを削除してコミットすることができません。

私が試してみた:

git reset HEAD^ path/file.ext

をしかし、(何も起こらなかった - エラーおよびファイルのdidntの復帰を)運がなかったです。

誰もがこれについて正しい方法を知っていますか?

+0

はい、そのブランチからファイルを削除するだけで済みます。ブランチをマージしない限り、プロジェクトの残りの部分には影響しません。 – Schwern

+0

@Schwernしかし、私は最終的にブランチをマージしたいと思います。それは私のコミットで削除されたファイルとして表示されませんか? – MeltingDog

+0

はい、最終的なマージにはなりません。それが敏感でなければ、それほど重要ではありません。 – Schwern

答えて

3

基本的には、マージ要求でファイルのすべての変更を削除する必要があります。最初に行うことは、ファイルのクリーンコピーをチェックアウトしてブランチに追加することです。

git checkout master -- <the file> 

これらの変更をコミットして、新しいコミットをリモートにプッシュします。プル要求は、このファイルを変更しないように更新する必要があります。

ブランチを使用している唯一の人は、最新のコミットが履歴になくなるように、コミットをリベースすることができます(実際は大きな問題ではありません)。そのためには、git rebase -i masterとし、コミットを「スカッシュ」にすることを選択します。プルリクエストのコミットを更新するには、git push -f <your branch>を実行する必要があります。新しいコミットが上書きされるように、古いものは上書きされます。このステップは完全にオプションです。

+0

はい!ありがとう!申し訳ありませんが、私はおそらくそのような私の質問を表現している必要があります – MeltingDog

0

重要なファイルでない場合は、それを削除して新しいコミットをプッシュすることができます。

git rm that_file 
git commit 
git push 

ファイルはまだ履歴に残っていますが、最終的なマージでは表示されません。

機密ファイルの場合は、パスワードや個人情報が入っているようです。または、クリーナーの履歴を提供したい場合は、git rebase -i master(またはブランチから分岐したブランチ)を使用して、履歴から履歴を削除することができます。これにより、誤ってそのファイルをインクルードしたコミットを書き直す機会が与えられます。コミットを書き直して、git push --forceにブランチ履歴の新しいバージョンを送信してください。

詳しくは、Rewriting History chapter of Pro Gitを参照してください。

1

この1つのファイルにはいくつのコミットがありますか?最も簡単な方法は、このように、マスターからリベースし、それらのコミットを編集することです:

git rebase -i master 
# find the relevant commits and use `edit` instead of `pick` 
git reset --soft HEAD~1 -- file # makes the changed file staged to be commit (but we don't want that) 
git checkout -- file # revert the changes staged again in the previous command 
git commit --amend 
git rebase --continue 
git push --force origin <your-branch-name> 

あなたは今、特定のファイルを変更することなくきれいなコミットの歴史を持っている必要があります。

関連する問題