VisualStudio2022を使用したGitリポジトリの操作方法（詳解）

いいねかストックされたものから更新。
いいね貰ったので確認して追記（4/02）
分かった事を追記（24/4/7）
他のPCでコミットする場合を追記（24/4/7）
更に分かったことを追記(25/05/18)


よく分からんという事が多発したので整理しておく。
　困ったときにChatGPTに聞いたらかなり詳細に教えてくれたが、なるべく存在するドキュメントか実際に試した手順に準拠する。

# 注意点
Localリポジトリはディスクスペース内（PC/端末内）、リモートリポジトリはGitHub内。
無暗にPushやフェッチを行うとGitHub内のCodeが意図せず上書きされてしまったり、Localリポジトリの作業内容が**虚無に還ったり**する。

差し戻しも可能らしいがまだ再現出来てない。

こっちの方が詳しい

https://qiita.com/YoshijiGates/items/6fc986dd617b0dd248e4

ipentec.com
https://www.ipentec.com/document/visual-studio-2019-git-push-to-remote-repository

# Comitする
git →　「コミットまたはスタッシュ」　をクリック
![comot.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145714/74f7794d-164d-4372-ceb1-51344ae5866c.jpeg)


「全てをコミット(i)」することでコメント付きで変更内容をgithubに送信出来る。
![スクリーンショット 2023-11-09 102746.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145714/30bfbcdd-0841-144e-bdee-3a882bb645db.png)



# pullとpush

Comitを反映させるには事前に　「git」 →　「設定」　から``Pushを有効にする -force with-lease(E)``　にチェックを入れる 。

![スクリーンショット 2023-11-04 183425.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145714/7814081d-848e-c9fc-fe1b-80d84431e228.png)

自作アプリのgitで検証。ComitやPullでの変更が反映された。
![スクリーンショット 2023-11-04 194639.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145714/cb2eecdf-c68e-9f82-cd05-dcd37b5805cf.png)


ここから


 Pull:リモートリポジトリに変更がないかを確認する。
また、**Pushする前に必ずPullする**事がMicroSoftのドキュメントで推奨されている。Mergeの競合を防ぐことが出来るとのこと。
 push:**ローカルリポジトリでComitしたものを反映させる**　


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145714/712f19f2-07ce-7be4-0668-4cd63ff0c319.png)

これで実際のGitページに反映される（23/11/4 検証）

[Visual Studio からリモート ブランチにプッシュする](https://www.ipentec.com/document/visual-studio-2019-git-push-to-remote-repository)


[Visual Studio でバージョン コントロールに Git のフェッチ、プル、プッシュ、同期を使用する](https://learn.microsoft.com/ja-jp/visualstudio/version-control/git-fetch-pull-sync?view=vs-2022)

※公式のドキュメント内容が古くてVisualStudio2022のものが反映されてない模様。

# フェッチ（Fetch）
　※公式ドキュメントから転載
　**プッシュする前にフェッチしてプルすることが重要**
 ローカルの変更に組み込む必要があるリモート コミットがあるかどうかが確認される。 あることが確認された場合は、最初にプルしてアップストリーム マージの競合を防ぐ。

# Brunchを作成
「ブランチのチェックアウト」でそのブランチに移動する。
これでMasterのCodeを保てる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145714/74ed0ed2-63ae-c45e-f720-d4d19d098e16.png)



# Brunch先へ変更内容をPushする

~~理由は分からないがそのままpushしても上手くいかない。~~
PullしてからでないとPushできないらしい。公式ドキュメントに書いてある。

チームエクスプローラーを表示させ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145714/f86c13ae-f961-876a-3c8a-5362418c5ace.png)
Git 変更　をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145714/a06c202a-790b-47d0-cb3f-ffbefda7c71f.png)

とりあえず何か内容らしきものを書いておくとよい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145714/5b25fdfa-d25a-2db9-025a-06ec954f24ce.png)

ここからPushの代わりにComitを行う。
変更されたかを確認するには``git log``コマンドを打てばよい

このあとPull→Pushすると変更内容がリモートリポジトリに反映される**これが正式な手順**。
 Git Cloneで実際にダウンロードして検証したらComitだけでも反映はされてたけど正式な手順を推奨しておく。

# 履歴を出す

　git →「コマンドプロンプトで開く」　
``git log``　
日付は上から降順
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145714/3beb1cd7-9674-c5a5-91ef-7a1502b1d8b8.png)

Header情報？
``HEAD -> BPMatching_Brunch``のようにComit先が分かる。
付いてないものは前回のComitのものである。
差し戻しのときに364b....のようなハッシュ値を使用する。


# Brunchを管理する
ここからでもPushが可能だがコメントが付けられるComitの方がいい。内容の確認がしやすい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145714/e9fb093b-5b70-5079-b204-efbda17caab1.png)

Brunchを変更するにはコンテキストメニューからCheckOutを押せばよい。Brunchの削除も出来る。


# conflict（競合）の対処

参考リンク

https://qiita.com/smr1/items/08aaedc4269e76ca93cd


作業を進めているとプッシュしてもconflictを起こし、反映させる事が出来ないという事がある。

conflictは同じコード行に対し複数の異なる変更が行われた場合に起こる。
 以下はChatGPT出力


> 同じコード行に対する異なる変更が複数のブランチで行われた場合。
一方のブランチで削除されたファイルが、もう一方のブランチで変更されている場合。
ファイル名やフォルダーの変更が異なるブランチで異なる方法で行われている場合。


実際に単独アプリ開発で起こしてしまった事があるので、対処方法を紹介する。

## conflictの再現

1.ローカルリポジトリ(Visual Studio)でファイルを編集し、変更をコミット。
2.Visual Studio内でエラーが解消せず、原因不明なので以前のVersionにチェックアウトして書き戻しをした。
3.以前のVersionにチェックアウトに対して変更を行い、コミットした

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145714/351434c0-67d8-64fe-e234-a6eb3e75e07d.png)

競合が発生するとコミット欄に以下の表示が出る
    

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145714/b82f6b4f-3b67-6bf6-d2af-59d97074fd8a.png)



競合を解決するには入力方向の取得か現在の取得かのいずれかを選択すればよい


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145714/e04841b7-f22b-427f-1b0c-1abd4bfcc7d7.png)

今回は入力方向を取得した。

入力方向が取得され、最新の変更が反映された。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145714/79db3d08-b289-66f7-ba4a-da143b1bdaf6.png)


# 他のPCからコミットする場合

### まずgit クローンする。
**今回はcmdでGit Cloneした**が、Visual Studio内でクローンするとスムーズだろう
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145714/d3424232-d543-498d-aeec-37ae4b4bcf58.png)

まだ認証状態にないため、そのままプッシュすると失敗する。

![スクリーンショット 2025-03-09 174743.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145714/6edac5fc-725b-4dfd-b437-bf6bb8f437cc.png)

クローン直後のソリューションファイル
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145714/eb1b8d45-181a-46ed-8d95-f46417bb259c.png)

```Git が安全でない可能性があるとのフラグが設定されているので、このリポジトリは正常に動作していません。```

と表示される。

これを解消する必要がある。



## 認証作業を行う
~~``ブランチの管理``から行った。~~

Git → GitサービスにPushする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145714/6f7a13f3-72c8-45b3-8d14-df70bc85d123.png)

**既存のリモートにプッシュする。**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145714/430fd587-3765-42c8-8473-d44fdecef9af.png)

エラー　
>Git failed with a fatal error.
warning: safe.directory 'https://github.com/Sheephuman/MutiBingingTest.git' not absolute
warning: safe.directory 'https://github.com/Sheephuman/MutiBingingTest.git' not absolute
fatal: detected dubious ownership in repository at 'C:/TestCode/MutiBingingTest/MutiBingingTest'
'C:/TestCode/MutiBingingTest/MutiBingingTest' is owned by:
	BUILTIN/Administrators (S-1-5-32-544)
but the current user is:
	SHEEPHUMAN/shinc (S-1-5-21-644057103-3017636638-129231267-1002)
To add an exception for this directory, call:


# ローカルリポジトリを信頼済みとしてマークする(25/5　追記)
```slim
git config --global --add safe.directory C:/TestCode/MutiBingingTest/MutiBingingTest
```

今回は以下のようにテストしてみた

test用リポジトリ

https://github.com/Sheephuman/MutiBingingTest.git

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145714/71540b36-6902-4ff5-82d1-30b2e3483184.png)

```slim
git config --global --add safe.directory C:/TestCode/MutiBingingTest/MutiBingingTest
```
リポジトリが信頼済みかどうかを確認

```slim
git config --global --get-all safe.directory
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145714/821326a6-cf6e-44bd-a730-cfeba89d7056.png)
リストが表示された(間違えてリモート側のURL入れてた^^;)



	git config --global --add safe.directory C:/TestCode/MutiBingingTest/MutiBingingTest 


## ```リモートの管理```にリモートリポジトリを追加する(25/05 追記)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145714/262ee0b4-3094-4853-ba26-8660bbb8244b.png)

***リポジトリのURLを追加する***
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145714/e65643c7-c5b5-46eb-98dc-9207cc36d650.png)

以上の手順を踏むことで、赤いチェックマークが消える(認証されていない状態の解消)。

コミット画面に```master```も表示されるようになる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145714/c0a8f32b-1f21-4839-9f25-6276d2d2b949.png)


<!-- open属性なし -->
<details><summary>
再現性がないので折り畳み</summary>

プッシュに失敗したものがスタッシュされた状態で表示されている（リモートに反映されていない）

選択するとプッシュボタンが有効化するのでクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145714/7800bc86-79ac-4a6a-aca4-ecf8b81ae21c.png)






別WindowにSign inの画面が表示されるので、``Sign in With your broswer``をクリック
![スクリーンショット 2025-03-09 175106.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145714/f0335e1d-ebb0-4aaa-812f-987f39d5acce.png)

※認証画面が出ない場合は手動でブラウザ認証すればよいようです。```既定のブラウザ```じゃなくても有効にはなる(追記)



~~ブラウザ画面で認証すれば自動的に未送信のコミット分が反映される~~



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145714/a731d388-93f5-4932-87a7-cf27c41b377c.png)

</details>

コミット後、同期(Pull後にpush)　をすれば同期が反映される。


自分のリポジトリで反映された際のスクショ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145714/73e21f07-0941-4cd0-986e-4f9a864c8a10.png)


２回目試行のスクショ(25/05　追記)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/145714/db2c062f-28a4-4061-b0b5-abd2d17db4e9.png)

非ログイン状態だと表示がされなかった(反映もされない？)。

いいね、ストックが励みになります！