gitの履歴から特定のコミット以降の履歴だけを残してクリアする

個人で開発しているアプリケーションのgitリポジトリで履歴がグチャグチャしてしまったので、
コミット履歴をちょっと弄った時のメモです。

====================================
※注意※
gitの履歴は過去に何があったかを調べる際の手がかりになるので、
削除する理由がないのであれば残しておきましょう。
特に、他人と共同で修正しているリポジトリであれば尚更です。

====================================

履歴を残し始める直前のバージョンの状態を作る

# git clone  tmpRepo1
# cd tmpRepo1
# git checkout {残し始めたいコミットの直前のコミット番号}
# rm -rf .git
# cd ../

作業用のリポジトリを作る

# git clone  tmpRepo2
# cd tmpRepo2
# git checkout --orphan tmpBr

初期状態をコミットする

# rm -rf <.git以外の全て>
# cp -r ../tmpRepo1/* .
# git add .
# git commit -m "Initialization"

残したいコミット履歴に対して、次の処理を過去から順に繰り返し実施する

# git cherry-pick {残したいコミット}

なお、残したいコミット履歴がマージ履歴の場合は以下の手順となる

# git cherry-pick -m 1 {残したいマージコミット}
# git commit --allow-empty

コメントの編集画面が出るが、そのまま:wqして抜ける

意図した履歴が生成されたか確認

# git log

masterにプッシュする

# git checkout -B master
# git push --force

一時的に作ったブランチを削除

# git branch -d tmpBr
Share

【git】gitコマンドチートシート

自分が使うgitコマンドを整理しました。

■環境
OS X El Capitan 10.11.6
git 2.10.1

【設定について】
グローバルコンフィグの設定
(全リポジトリの共通設定)

$ git config --global user.name "jester"
$ git config --global user.email "jester@sample.co.jp"

リポジトリ別コンフィグの設定

(対象リポジトリのディレクトリにて)
$ git config user.name "master"
$ git config user.email "master@sample.co.jp"

【リポジトリの作成・リモート設定について】
リモートのリポジトリをクローンする

$ git clone {リモートリポジトリの指定} {生成するディレクトリ}

※生成するディレクトリを省略すると、リモートリポジトリと同じ名前でディレクトリが生成される

ローカルで新規にリポジトリを作成する

$ mkdir SampleProject
$ cd SampleProject
$ git init

ローカルで作成したリポジトリを後からリモートに紐付ける

(対象のリポジトリディレクトリにて)
$ git remote add {名前、originなど} {リモートリポジトリの指定}

リモートリポジトリの変更する

(対象のリポジトリディレクトリにて)
$ git remote set-url {名前、originなど} {リモートリポジトリの指定}

リモートとの紐付けを解除する

(対象のリポジトリディレクトリにて)
$ git remote rm {名前、originなど}
Share

SVNサーバ(svn+ssh)のリポジトリをgitサーバに移行する

■前提条件
gitはサーバ&クライアントのどちらも既に使える環境であること

①gitサーバで空のリポジトリを作成する。
作成方法は各Gitサーバでの手法に従えば良いと思います。
(コマンドだったり、gitlabで作成したり)

②ローカルにSVNリポジトリを読み込んだgitリポジトリを作成する。

$ git svn clone --prefix svn/ svn+ssh://svn.sample.com/home/svn/svnhoge githoge
以下、読み替えてください。
【svn.sample.com】 SVNサーバのホスト名(IPアドレス)
【/home/svn/svnhoge】 移行対象のリポジトリのパス
  ※上記2つはSVNを使っていた頃に指定していたものと同じです
【githoge】 作成するgitリポジトリのディレクトリ名

③ローカルにリポジトリができるので、gitサーバと紐付けする
$ cd githoge
$ git remote add origin gituser@git.sample.com:git/githoge.git

以下、読み替えてください。
【gituser】 gitを利用する際のアカウント
【git.sample.com】 gitサーバのホスト名(IPアドレス)
【git/githoge.git】 ①で作成したgitリポジトリ

以上で完了です。

Share