Visual Studioでは、GitHubとの連携や様々なGit操作をGUI上で行うことができます。
今回は開発でよく使うGit操作をまとめました。対応するGitコマンドも併記しているので参考にしてみてください。
前提
- Visual Studio 2022 インストール済み
※本記事はVersion 17.6.5で作成しているため、バージョンが異なる場合はGUIや動作が若干異なる可能性があります。 - Git インストール済み
- GitHub アカウント作成済み
基本操作
Visual StudioでのGit操作は基本的に「Git変更」メニューで行います。
※もし「Git変更」メニューが表示されていない場合は、メニューバーの「表示」→「Git変更」を選択すると常時表示されるようになります。
![](https://hirahira.blog/wp-content/uploads/2023/07/image-70.png)
ステージ
変更を行ったファイルは「変更」欄に表示されます。
ファイルの横にある「+」(ステージ)ボタンをクリックすると、対象のファイルをステージングすることができます。(対応コマンド:git add <ファイル名>
)
![](https://hirahira.blog/wp-content/uploads/2023/07/image-33.png)
全てのファイルをステージングしたい場合は、「変更」欄の右にある「+」(すべてをステージ)をクリックします。(対応コマンド:git add .
)
![](https://hirahira.blog/wp-content/uploads/2023/07/image-34.png)
ステージを取り消したい場合は、「-」(アンステージ)をクリックすればOKです。
(対応コマンド:git reset
)
![](https://hirahira.blog/wp-content/uploads/2023/07/image-35.png)
コミット
ステージングされているファイルがある状態でコミットメッセージを入力し、「ステージング済みをコミット」をクリックすると、対象の変更をコミットすることができます。
(対応コマンド:git commit -m "コミットメッセー
)ジ"
![](https://hirahira.blog/wp-content/uploads/2023/07/image-36.png)
ステージングを省略して、ワークツリーのファイルをすべてコミットすることも可能です。
ステージされた変更がない状態で「すべてをコミット」をクリックします。
(対応コマンド:git commit -a
)
![](https://hirahira.blog/wp-content/uploads/2023/07/image-37.png)
コミット履歴は「送信数 X / 受信数 X」の部分をクリックすると確認できます。
(対応コマンド:git log --oneline --graph
)
![](https://hirahira.blog/wp-content/uploads/2023/07/image-38-1024x533.png)
フェッチ・プル・プッシュ・同期
リモートリポジトリへのデータの送受信は赤枠内のアイコンを選択します。
左からフェッチ、プル、プッシュ、同期です。
![](https://hirahira.blog/wp-content/uploads/2023/07/image-39.png)
同期は最新の状態をプルしてからプッシュするという一連の操作をワンクリックで行うことができます。(同期の対応コマンド:git pull
& git push origin main
)
マージ
現在のブランチに他のブランチをマージするには下記の手順で行います。
(対応コマンド:git checkout <現在のブランチ>
→git merge <マージするブランチ>
)
右下のブランチ名が表示されている欄をクリックするとブランチの一覧が表示されます。
![](https://hirahira.blog/wp-content/uploads/2023/07/image-54.png)
マージしたいブランチを右クリックし、「Current Branchにマージ」をクリックします。
![](https://hirahira.blog/wp-content/uploads/2023/07/image-55.png)
確認画面が表示されるので、「マージ」をクリックするとマージが完了します。
![](https://hirahira.blog/wp-content/uploads/2023/07/image-56.png)
もし競合(コンフリクト)の可能性がある場合は、以下のように表示されます。
![](https://hirahira.blog/wp-content/uploads/2023/07/image-57.png)
競合(コンフリクト)の解消
マージやリベース時に競合が発生した場合は下記のように表示されるので、マージエディターを開いて競合を解消しましょう。
![](https://hirahira.blog/wp-content/uploads/2023/07/image-58-1024x389.png)
マージエディターを開くと競合が発生している箇所が表示されるので、どちらの内容を取得するかを決定します。
今回は現在のブランチではなく受信した内容(入力方向)を反映させたいので、左側のチェックボックスをONにするか、上部の「入力方向を取得」をクリックします。
![](https://hirahira.blog/wp-content/uploads/2023/07/image-60-1024x407.png)
下部の「結果」欄に取り込みたい内容が正しく反映されていることが確認できたら、「マージの許可」をクリックします。
※結果欄のコードを直接編集して競合を解消することも可能です。
※もし他にも競合が発生している場合は、すべてを解消しないとマージの許可はできません。
![](https://hirahira.blog/wp-content/uploads/2023/07/image-61-1024x662.png)
最後にコミットメッセージを入力して、マージコミットを作成します。
![](https://hirahira.blog/wp-content/uploads/2023/07/image-62.png)
応用操作
その他、覚えておくと便利なGit操作を紹介します。
行単位のステージング
Visual Studio 2022のバージョン17.3以降では、行単位で変更をステージできるようになりました。変更を異なるコミットに分割したい場合に役立ちます。
まず対象ファイルの差分画面を開きます。
![](https://hirahira.blog/wp-content/uploads/2023/07/image-30.png)
ステージしたい行にカーソルを合わせ(複数行ある場合はドラッグして選択)、「+ 行のステージング」をクリックします。
※右の矢印ボタンをクリックすることで、その行だけ変更を戻すことも可能です。
![](https://hirahira.blog/wp-content/uploads/2023/07/image-31-1024x804.png)
その行だけステージすることができました。
![](https://hirahira.blog/wp-content/uploads/2023/07/image-32-1024x626.png)
直前のコミット内容(プッシュ前)の変更
直前のコミットの内容を変更したい場合は、「修正」にチェックを入れた上でコミットします。
コミットメッセージを修正することもできます。
(対応コマンド:git commit --amend
)
![](https://hirahira.blog/wp-content/uploads/2023/07/image-48-1024x551.png)
修正を行うとコミットが作り直され、コミットIDが変わるので注意してください。
直前のコミットメッセージ(プッシュ前)の変更
直前のコミットメッセージは上記以外にも、コミット詳細画面の「編集」から変更することが可能です。
![](https://hirahira.blog/wp-content/uploads/2023/07/image-47-1024x684.png)
スタッシュ
作業をコミットせずに一時保存したい場合はスタッシュを使用します。
(対応コマンド:git stash
)
変更がある状態でコミットボタン右の矢印を選択するとスタッシュのメニューが表示されます。
![](https://hirahira.blog/wp-content/uploads/2023/07/image-64.png)
ワークツリーとステージのすべての変更をスタッシュしたい場合は「すべてスタッシュ」、ワークツリーの変更のみをスタッシュしたい場合は「すべてスタッシュしてステージング済みを保持」を選択します。
スタッシュした内容を適用したい場合は、対象のスタッシュを右クリックして「適用」を選択します。
![](https://hirahira.blog/wp-content/uploads/2023/07/image-65.png)
ステージング済みの状態で適用したい場合は「適用してからステージング済みを復元」、すべてワークツリーの変更として適用したい場合は「ステージングされていないとしてすべてを適用」を選択します。
ちなみにポップを選択すると適用後に対象のスタッシュが削除されます。必要に応じて使い分けてください。
リベース
リベースはマージに似ていますが、別のブランチのコミットを取り込み、コミット履歴をきれいにするものです。(対応コマンド:git rebase <取り込みたいブランチ名>
)
現在のブランチがmainブランチよりも大きく遅れている状況で、main宛にプルリクを作成する前に競合を解消しておきたい場合などに使用します。
コミット履歴を書き換えることになるので、基本的にプッシュ前にのみ使用するようにしてください。
下記はdevelopブランチにmainブランチのコミットを取り込む場合の例です。
![](https://hirahira.blog/wp-content/uploads/2023/07/image-68.png)
実行するとdevelopブランチにmainブランチのコミットを取り込むことができました。
![](https://hirahira.blog/wp-content/uploads/2023/07/image-69-1024x403.png)
チェリーピック
別のブランチの特定のコミットだけを現在のブランチに取り込みたい場合はチェリーピックを使用します。(対応コマンド:git cherry-pick <コミットID>
)
下記はdevelopブランチにtopicブランチの特定のコミットを取り込む場合の例です。
![](https://hirahira.blog/wp-content/uploads/2023/07/image-66-1024x507.png)
実行すると現在のブランチに対象のコミットだけが取り込まれました。
![](https://hirahira.blog/wp-content/uploads/2023/07/image-67-1024x401.png)
コミットの取り消し(git revert)
コミットを取り消したい(変更内容を打ち消すコミットを作成し、コミット履歴を残したい)場合は、コミット履歴から取り消したいコミットを右クリックし、「元に戻す」を選択します。
(対応コマンド:git revert <コミットID>
)
![](https://hirahira.blog/wp-content/uploads/2023/07/image-52-1024x610.png)
実行するとRevert “コミットメッセージ”という打ち消し用のコミットが作成されます。
![](https://hirahira.blog/wp-content/uploads/2023/07/image-53-1024x735.png)
コミットの取り消し(git reset)
コミットを取り消したい(コミット履歴を残したくない)場合は、コミット履歴から取り消したいコミットの1つ前のコミットを右クリックし、「リセット」を選択します。
変更を保持 (–mixed)
コミットを取り消すが、ワークツリーに変更を残したい場合はこちらを選択します。
(対応コマンド:git reset --mixed <コミットID>
)
![](https://hirahira.blog/wp-content/uploads/2023/07/image-49-1024x450.png)
実行すると2つのコミットが取り消され、コミットの変更内容がワークツリーに表示されます。
![](https://hirahira.blog/wp-content/uploads/2023/07/image-50-1024x373.png)
変更を削除 (–hard)
コミットを取り消し、ワークツリーにも変更を残す必要がない場合はこちらを選択します。
(対応コマンド:git reset --hard <コミットID>
)
ハードリセットの場合はワークツリーからも変更が取り消され、何も変更がなかったことになります。
![](https://hirahira.blog/wp-content/uploads/2023/07/image-51-1024x391.png)
おわりに
以上、Visual Studio でよく使うGit操作についてざっと解説しました。
より詳しいGit機能の使い方が知りたい場合は下記ドキュメントを参照してください。
![](https://hirahira.blog/wp-content/uploads/cocoon-resources/blog-card-cache/62becbf9e66edbd7a674a2191e28faef.png)
Gitコマンドの意味や使い方については下記書籍が参考になりました。
![](https://hirahira.blog/wp-content/plugins/pochipp/assets/img/pochipp-logo-t1.png)