Git と Visual Studio 2017 その 7 : チェリーピックで他のブランチから特定のコミットを反映

前回の記事ではリベースについて説明しました。今回は他のブランチにあるコミットのうち、任意のものだけを反映する方法として、チェリーピックを見ていきます。 チェリーピック : Git まずは Git のチェリーピックがどのように動作するか確認します。 1. 現状確認のため ‘git log –oneline –graph –all’ を実行。前回記事の処理により、リベース完了時点であることを確認。 2. まず dev ブランチをリベース前に戻す。’git reflog’ よりリベース前のコミット ID を検索。 3. ‘git reset –hard 5df97d2’ 実行後 ‘git log –oneline –graph –all’ でリベース前に戻ったことを確認。 4. 今回はマージやリベースではなく、master の Patch1.cs コミットを dev に適用するため、‘git cherry-pick ac2b093’ を dev ブランチで実行。競合発生を確認。 5. ‘git mergetool’ で競合を解消。 6. 競合解消後、‘git commit -am… Read more

Git と Visual Studio 2017 その 6 : リベースで他のブランチからコミットを反映

前回の記事ではブランチ間のマージを紹介しました。今回は似て非なる機能としてリベースを見ていきます。 リベース : Git リベースはマージと何が違うのでしょうか。例えば dev を切ってコミットを追加した後、何かしらの事情で master にもコミットが作成された場合を考えます。 マージ: dev から master をマージすると master のコミットが、現在の dev のコミットの後に適用されます。 リベース: master のコミットが dev のコミットの前に入るため、あたかも master でが作成された後に dev を切ったような状態となります。 実際にやってみましょう。 1. ‘git log –oneline –graph’ を実行して現在の状況を確認。前回の記事の直後のためマージコミットが最後に存在。 2. マージ前に戻すため、‘git reset –hard c79adb2’ を実行し、再度 ’git log –oneline –graph –all’ を実行。 3. この時点で Visual Studio 2017 より Patch1.cs を追加。全て保存。 4…. Read more

Git と Visual Studio 2017 その 5 : マージで他のブランチからコミットを反映

前回の記事ではブランチについて紹介しました。今回はブランチの変更を取り入れる、マージについて見ていきます。 マージ : Git ブランチを作る理由は、機能追加や修正など色々ありますが、変更はいずれ反映する必要があり、Git では merge コマンドを使います。 1. ‘git branch’ を実行。master と dev ブランチがあり、現在 dev ブランチにチェックアウト中。 2. ‘git log –oneline –graph’ を実行。master より新しいコミットがあることを確認。 3. マージをする際、マージを受け入れる側のブランチで作業を行うため、master ブランチに移動。その後 ‘git merge dev’ を実行。結果として “fast-forwad” と出ていることを確認。 4. ‘git log –oneline –graph’ を実行。master が dev と同じコミットをポイントしている。つまり今回のマージで新しいコミットは作成されておらず、ref\heads\master ファイルがさしているコミットの情報が変わっただけ。この場合 dev ブランチがどこから作成されたかなどの情報が失われている。 5. マージをやり直すため、‘git reset –hard c79adb2’ を実行。’git log –oneline –graph –all’… Read more

Git と Visual Studio 2017 その 4 : ブランチ

前回の記事ではコミットのリセットについて紹介しました。今回の記事ではブランチを見ていきます。 ブランチ : Git ブランチは、現在のコードには手を加えることなく変更をする際に切る(作成する)もので、レポジトリの完全なコピーを持つイメージでした。コピーであれば何をしても安心ですよね。しかしプロジェクトの規模が大きい場合、レポジトリ全体をコピーするのは無理があり、この点 Git はうまく処理します。ではどのように動作するか見ていきましょう。 1. ブランチを切る前に現在の .git ディレクトリのプロパティより、サイズおよびファイル/フォルダ数を確認。 2. ‘git branch dev’ を実行して dev ブランチを作成。 3. 再度 .git ディレクトリのプロパティを確認。ファイル数が 2 つ増加。これらのファイルは .git\refs\heads および .git\logs\refs\heads ディレクトリに dev ファイルが作成されたため。 4. 作成されたファイルを type で表示。 5. 一方 .git\refs\heads\master を見た場合も同じ SHA1 ハッシュ値を持っている。つまりブランチを作成した際、Git はレポジトリーをコピーすることはなく、新しいブランチ名と同じファイルが作成しコミットのハッシュ値をコピーするだけのため、高速に完了する模様。 6. 現在 master ブランチにいるため、‘git checkout dev’ で dev ブランチに移動(チェックアウト)。HEAD を確認するとポイントしている先が dev ファイルになっているため、ブランチの移動は HEAD の書き換と同等。… Read more

Git と Visual Studio 2017 その 3 : 変更のリセット

前回の記事ではコミットによるソリューションの保存を紹介しましたが、今回は保存済のコミットをリセットする方法を紹介します。 リセット : Git Git の reset コマンドを使うとコミットをキャンセルできますが、実際にはどのように動いているのでしょうか。 1. ‘git log –oneline’ で現在の状況を確認。oneline で結果を 1 行表示可能。 2. 現在の HEAD ファイルの情報を確認。最新のコミットをポイントしている。 3. ‘git reset –soft HEAD~1’ または ‘git reset –soft c25c9d8’ を実行して直前のコミットにリセット。HEAD~1 は HEAD がポイントするコミットの親コミットを指す。soft オプションはコミットはリセットするが、ステージングエリアは保持する場合に利用。実行後 ‘git log’ と ‘git status’ で現状確認。コミット 3fd99cb は表示されていない。 4. エクスプローラーから見た場合には、まだ Git オブジェクトは存在する。 5. 再度 HEAD 情報を確認すると、現在最新である c25c9d8 をポイントしている。 6. 他のオプションも試すため… Read more

Git と Visual Studio 2017 その 2 : ソリューションの保存

前回の記事ではレポジトリの作成を行いました。今回は Visual Studio 2017 でアイテムを追加して、コミットしていきます。 アイテムの追加 クラスファイルなど新規にアイテムを追加した場合、Visual Studio と Git 観点からどうなるか見てみましょう。 1. プロジェクトに新しく “Class1.cs” ファイルを追加。 2. 追加したファイルおよびプロジェクトファイルのアイコンが、新規追加と変更アイコンであることを確認。プロジェクトが変更になるのは、追加したファイルの情報を新規に含むため。 3. ‘git status’ を実行。Class1.cs は期待通り未トラック状態になっているが、プロジェクトファイルが表示されていない。これはまだプロジェクトファイルが保存されていないため。 4. Visual Studio ですべて保存を行ってから再度 ‘git status’、今度は期待通り両ファイルが表示。プロジェクトファイル (.csproj) はすでにコミットしたアイテムであるため追跡済となっている。 ステージエリアに追加 この時点では作業ディレクトリでの変更であるため、次にアイテムをステージエリアに追加します。Git では ‘git add’ で追加しましたが今回は Visual Studio 2017 で追加します。 1. プロジェクトを右クリック | ソース管理 | コミットをクリック。この操作では実際にコミットはされず、変更メニューに移動される。 2. 2 つの変更アイテムがあることを確認。1 つは [追加] 表記。 3. [+] ボタンをクリックするか、アイテムごとに右クリック… Read more

Git と Visual Studio 2017 その 1 : レポジトリの作成

Git や Visual Studio 2017 の Git サポートは既に情報が多くある為、自分が書く意味が無いと思いましたが、Visual Studio で Git を使い始めた頃は結構不安であった事を思い出しました。このシリーズでは Visual Studio 2017 でソース管理をした場合、裏ではどのように Git が動いているのかという観点で情報をまとめます。英語ではすでに書き終わっているので、お急ぎの場合はそちらをどうぞ。 Git の仕組み まずは Git の根本的な仕組みを知ることが大事。様々な情報がありますが、個人的には以下のビデオがおすすめです。 Advanced Git Tutorial [video] GOTO 2015 • Deep Dive into Git • Edward Thomson [video] 英語ですがとてもよく説明されています。是非一度見てください。入門的なものはこちらをどうぞ。 しばらくローカル実行 中央管理システムと違い、Git は分散型のソースコード管理システムです。そのためサーバーがなくても動作するため、しばらくはローカルでのみ作業します。 コンソールアプリプロジェクト作成 Git を使うにあたりまずプロジェクトを作ります。 1. Visual Studio で C# のコンソールアプリプロジェクトを作成。「新しい Git リポジトリの作成」にはチェックをいれない。 2. [OK]… Read more

Git and Visual Studio 2017 part 16 : Find out who introduced the issue and when

In previous article, I explain how to revise local commits afterwards via Git. In this article, I explain how to find the commit which causes the issue when something went wrong. Sometimes, I find that one function stop working all of sudden, but I don’t know when it’s broken. If I am the only developer,… Read more

Git and Visual Studio 2017 part 15 : Revise local commits

In previous article, I explained how to undo the commit you shared with others by using “revise”. In this article, I show you how to revise local commits before sharing with others. I couldn’t find a way to make this happen in Visual Studio 2017 though. Revise commits in Git If I simply want to… Read more

Git and Visual Studio 2017 part 14 : Resetting the changes after sharing code with others

In previous article, I explained how to compare item versions by using Visual Studio 2017. In this article, I share how to reset your change after you already shared your code. Reset vs. Revert As we already see in part 3 of this series, we know how to “reset”. But why this is not good… Read more