タグ付けされた質問 「git-rebase」

git-rebaseコマンドを使用すると、1つのブランチから変更を取得し、別のブランチの上でそれらを再生できます。

8
git / GitHubの履歴からフォルダーとその内容を削除する
私はGitHubアカウントのリポジトリで作業していましたが、これは私が偶然見つけた問題です。 いくつかのnpmパッケージがインストールされたフォルダーを持つNode.jsプロジェクト パッケージはnode_modulesフォルダーにありました そのフォルダーをgitリポジトリーに追加し、コードをgithubにプッシュしました(そのときのnpm部分については考えていませんでした) そのフォルダーがコードの一部である必要はないことに気づきました そのフォルダを削除してプッシュしました その場合、gitリポジトリの合計サイズは約6 MBでしたが、実際のコード(そのフォルダーを除くすべて)は約300 KBでした。 最後に私が探しているのは、gitの履歴からそのパッケージフォルダーの詳細を取り除く方法です。そのため、誰かがそれをクローンした場合、実際のファイルのみが取得される6MBの履歴をダウンロードする必要はありません。最後のコミットの時点で300KBになります。 私はこれの可能な解決策を調べ、これらの2つの方法を試しました gitリポジトリ(履歴)からファイルを削除する http://help.github.com/remove-sensitive-data/ https://gist.github.com/1588371 Gistは、スクリプトを実行した後、そのフォルダーを削除したことを示し、その後、50の異なるコミットが変更されたことを示したように機能するように見えました。しかし、そのコードをプッシュすることはできませんでした。私がそれをプッシュしようとしたとき、それは言いましBranch up to dateたが、50のコミットがに変更されたことを示しましたgit status。他の2つの方法も役に立ちませんでした。 そのフォルダーの履歴が削除されたことが示されていても、ローカルホストでそのリポジトリのサイズを確認したところ、まだ約6MBでした。(私もrefs/originalフォルダーを削除しましたが、リポジトリのサイズの変更を確認できませんでした)。 私が明確にしたいのは、コミット履歴(これが私が起こったと思う唯一のことです)だけでなく、gitがロールバックしたいと仮定しているそれらのファイルを取り除く方法があるかどうかです。 これに対する解決策が提示され、私のローカルホストに適用されているが、そのGitHubリポジトリに複製できない場合、そのリポジトリを複製し、最初のコミットにロールバックしてトリックを実行し、それをプッシュすることができます(つまり、gitがまだこれらすべてのコミットの履歴がありますか?-別名6MB)。 私のここでの最終目標は、基本的にgitからフォルダーの内容を削除する最良の方法を見つけることです。これにより、ユーザーは6MB相当のものをダウンロードする必要がなく、モジュールフォルダーに触れたことのない他のコミットも可能です(これはかなり良いことです)それらのほとんどすべて)gitの歴史の中で。 これどうやってするの?
318 git  github  rebase  git-rebase 

3
機能ブランチを別の機能ブランチにリベースする
私が取り組んでいる(プライベート)機能ブランチが2つあります。 a -- b -- c <-- Master \ \ \ d -- e <-- Branch1 \ f -- g <-- Branch2 これらのブランチで作業した後、Branch1のBranch2からの変更が必要であることを発見しました。Branch2の変更をBranch1にリベースしたいのですが。最終的には次のようになります。 a -- b -- c <-- Master \ d -- e -- f -- g <-- Branch1 私は2番目のブランチを最初のブランチにリベースする必要があると確信していますが、正しい構文とどのブランチをチェックアウトする必要があるかは完全にはわかりません。 このコマンドは望ましい結果を生成しますか? (Branch1)$ git rebase --onto Branch1 Branch2


15
Gitのルートコミットの前にコミットを挿入しますか?
前に、gitリポジトリで最初の2つのコミットを押しつぶす方法について尋ねました。 ソリューションはかなり興味深いものであり、gitの他のいくつかのものほど心をゆがめるものではありませんが、プロジェクトの開発に沿って何度も手順を繰り返す必要がある場合、これらのソリューションはまだよくある痛ましいことです。 したがって、私はむしろ苦痛を一度だけ経験し、それから標準のインタラクティブなリベースを永遠に使用できるようにしたいと思います。 私がやりたいことは、最初の目的のためだけに存在する空の初期コミットを作成することです。コードも、何もありません。スペースを確保するだけで、リベースのベースになります。 私の質問は、既存のリポジトリがある場合、最初のコミットの前に新しい空のコミットを挿入し、他の全員を前にシフトするにはどうすればよいですか?

5
「最適なパフォーマンスを得るためのリポジトリの自動パッキング」とはどういう意味ですか?
gitリポジトリに問題があります。この2日間、サーバーにプッシュするたびに、「最適なパフォーマンスを得るためにリポジトリを自動パッキングしています」というメッセージが表示されます。 また、新しいブランチにチェックアウトしてから、前のブランチでリベースを実行してgit gcから、未使用の履歴オブジェクトを削除してからプッシュを実行しましたが、それでもこのメッセージが表示されます。私のリポジトリで何が起こっているのか教えてください。
225 git  git-rebase  git-push 

3
特定のファイル(「ours」、「mine」、「theirs」)のGitマージ戦略を選択します
私はリベースの最中ですgit pull --rebase。マージの競合があるファイルがいくつかあります。特定のファイルの「自分の」変更または「自分の」変更をどのように受け入れることができますか? $ git status # Not currently on any branch. # You are currently rebasing. # (fix conflicts and then run "git rebase --continue") # (use "git rebase --skip" to skip this patch) # (use "git rebase --abort" to check out the original branch) # # Changes to …

8
Gitリポジトリの最初の2つのコミットを結合しますか?
3つのコミットA、B、Cを含む履歴があるとします。 A-B-C 2つのコミットAとBを1つのコミットABに結合したいと思います。 AB-C 私は試した git rebase -i A 次の内容でエディターが開きます。 pick e97a17b B pick asd314f C これを次のように変更します squash e97a17b B pick asd314f C それからGit 1.6.0.4は言う: Cannot 'squash' without a previous commit 方法はありますか、これは単に不可能ですか?

18
Git-「破損した」インタラクティブなリベースを修正する方法
私はなんとかローカルのgitリポジトリに少し混乱を作成しました。次の手順を使用して、壊れたコミットを修正しようとしました。「git commit --amend」を実行する前(およびgit rebase --interactiveの実行後)に、変更が正しくないと判断したため、「git reset HEAD --hard」を実行しました。良い考えではありません、私はあなたに言います。 現在、インタラクティブなリベースは「スタック」しているようです。Gitは現在のブランチを(| REBASE-m)として表示します。リポジトリ内のすべてのコマンド(cd ..、ls、git rebase ...)で次のエラーが発生します。 cat:.git / rebase-merge / head-name:そのようなファイルやディレクトリはありません git rebase --abortは次のようになります。 $ git rebase --abort cat: c:/_work/project/src/git/.git/rebase-merge/quiet: No such file or directory cat: c:/_work/project/src/git/.git/rebase-merge/head-name: No such file or directory cat: c:/_work/project/src/git/.git/rebase-merge/orig-head: No such file or directory HEAD is now at …
184 git  msysgit  git-rebase 

5
連続しない2つのコミットをどのように押しつぶすのですか?
私はgit内のリベース機能全体に少し慣れていません。私が次のコミットをしたとしましょう: A -> B -> C -> D その後、にD追加されたいくつかの新しいコードに依存する修正が含まれていることA、およびこれらのコミットが一緒に属していることに気付きました。どのように私はつぶすんA&D一緒に休暇B&C一人で?
183 git  git-rebase 

5
Gitマージコミットのリベース
次のケースを考えてみましょう: 私はトピックブランチでいくつかの作業をしており、マスターにマージする準備ができています: * eb3b733 3 [master] [origin/master] | * b62cae6 2 [topic] |/ * 38abeae 1 マスターからマージを実行し、競合を解決すると、次のようになります。 * 8101fe3 Merge branch 'topic' [master] |\ | * b62cae6 2 [topic] * | eb3b733 3 [origin/master] |/ * 38abeae 1 マージには少し時間がかかったので、別のフェッチを実行すると、リモートマスターブランチに新しい変更が加えられています。 * 8101fe3 Merge branch 'topic' [master] |\ | * b62cae6 2 …

7
git rebase --ontoの動作を理解できません
次のgitコマンドの2つのブロックの動作が異なることに気づきましたが、その理由がわかりません。 私は1つと分岐AするBブランチとcommit ---COMMIT--- (A) \ --- (B) 最後にBブランチをリベースしたいA(そしてBブランチでコミットしたい) ---COMMIT--- (A) \ --- (B) 私がそうすれば問題ありません: checkout B rebase A しかし、私がするなら: checkout B rebase --onto B A まったく機能しません。何も起こりません。2つの動作が異なる理由がわかりません。 Phpstorm git clientは2番目の構文を使用しているため、完全に壊れているように見えるので、この構文の問題を尋ねます。
169 git  git-rebase 

4
コミットのタイムスタンプを変更せずにgit rebase
git rebaseコミットのタイムスタンプを保持しながら実行することは理にかなっていますか? 結果は、新しいブランチが必ずしも日付順でコミット日付になるとは限らないということになると私は思います。それは理論的には可能ですか?(例えば、配管コマンドを使用します。ここでは興味があります) 理論的に可能であれば、タイムスタンプを変更せずに実際にリベースを使用することは可能ですか? たとえば、次のツリーがあるとします。 master <jun 2010> | : : : oldbranch <feb 1984> : / oldcommit <jan 1984> さて、私がリベースoldbranchするmasterと、コミットの日付が1984年2月から2010年6月に変わります。コミットのタイムスタンプが変更されないようにその動作を変更することはできますか?最終的に私はこうして得ます: oldbranch <feb 1984> / master <jun 2010> | : それはまったく理にかなっていますか?古いコミットに親としてより最近のコミットがある履歴をgitで許可することさえできますか?


3
git rebaseのマージ戦略を選択するにはどうすればよいですか?
git-rebasemanページの言及-X<option>をに渡すことができますgit-merge。いつ/どのように正確に? 私はパッチを適用することにより、リベースしたいのですが、再帰的な戦略と彼らオプション(全体ではなく、競合のコミットをスキップするよりも、何でもスティックを適用します)。マージしたくない、履歴を線形にしたい。 私はもう試した: git rebase -Xtheirs そして git rebase -s 'recursive -Xtheirs' しかしgitは-Xどちらの場合も拒否します。 git rebase -Xtheirsツリーの競合を手動で解決する必要があることを除いて、最近のバージョンで動作します。これらの競合を解決した後、git rebase -Xtheirs --continue(-X繰り返して)実行する必要があります。
147 git  git-rebase 

6
コミットを押しつぶしているだけなのに、git-rebaseでマージの競合が発生するのはなぜですか?
Gitリポジトリには400以上のコミットがあり、最初の数十は試行錯誤を繰り返しました。これらのコミットをクリーンアップして、多くを1つのコミットにまとめます。当然、git-rebaseを使用する方法のようです。私の問題は、マージの競合が発生し、これらの競合を簡単に解決できないことです。コミットを押しつぶしているだけなので(削除や並べ替えではないため)、なぜ競合が発生するのか理解できません。おそらく、これはgit-rebaseがどのように押しつぶされるかを完全には理解していないことを示しています。 これが私が使用しているスクリプトの修正版です。 repo_squash.sh(これは実際に実行されるスクリプトです): rm -rf repo_squash git clone repo repo_squash cd repo_squash/ GIT_EDITOR=../repo_squash_helper.sh git rebase --strategy theirs -i bd6a09a484b8230d0810e6689cf08a24f26f287a repo_squash_helper.sh(このスクリプトはrepo_squash.shでのみ使用されます): if grep -q "pick " $1 then # cp $1 ../repo_squash_history.txt # emacs -nw $1 sed -f ../repo_squash_list.txt < $1 > $1.tmp mv $1.tmp $1 else if grep -q "initial …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.