普段はレンタルサーバー上でconflictなんて起きないです、、なぜ起きたのかがまず分からず

ssh接続先でVimが扱えないので苦肉の策を実施しました、、

merge状態を無理やりリセットしてブランチ削除→fetchで取り直すという、力技

Vimが扱えないので、選択肢がかぎられてました。

何がしたいかというと「修正ブランチのローカル開発環境の内容をテストデプロイをしたいだけ」でした。

つまり「ローカルの修正ブランチのHEAD(現在のチェックアウト)をそのまま反映」でOK

ssh接続先との差分や競合は考えなくてもいいわけです

  • レンタルサーバー上で別のブランチ(ひとまず何でもいい)に切り替えてます
git checkout 別のブランチ
  • そのコンフリクトが起きたレンタルサーバーのローカルブランチを削除

// 下記のオプションはマージ済みでない場合警告が出て、削除できないので、今回の場合は削除できませんね、、
// git branch -d 修正ブランチ名

// 強制的な削除
git branch -D 修正ブランチ名
  • 改めて同じリモートブランチをfetch
git fetch origin 修正ブランチ名:修正ブランチ名

そもそもブランチ戦略が整備されていないのが原因

ワークフローをしっかり定めていればデプロイで事故も起きえないということで、下記まとめ比較です

項目GitHub Flowgit-flow
目的継続的デリバリー(CD)向け機能リリースの段階管理(大規模開発向け)
ブランチ構成main + feature/*main, develop, feature/*, release/*, hotfix/*
開発ベースブランチmain(または trunkdevelop
マージ対象main に直接PRfeaturedevelopreleasemain の順
CI/CD前提か?必須(ないと破綻する)任意(古典的な運用でも可能)
ブランチ寿命基本的に短命、使い捨てdevelop, main は長寿命
リリース制御の仕組み基本「即時デプロイ」releaseブランチでリリース準備、検証あり
緊急対応(hotfix)mainから直接ブランチ切って対応hotfixブランチで対応
複数バージョン管理基本的に不可releaseで複数バージョン管理が可能
適しているプロジェクトWebアプリ、SaaS、CI/CDが整備された環境パッケージ製品、オンプレ、重リリース型
学習コスト低い(初心者向け)高い(構造理解が必要)
実際の運用難易度低いが、CI/CD整備しないと危険高いが、ルールが明確で事故は起きにくい

Vimを最低限つかえるようになろう

im the editor

まずVimとは

vimはUNIX環境(macOSやLinuxの“おじいちゃん”的存在”)でよく使用されるコマンドラインで使えるテキストエディタです!

よく使われるシーン

  • SSH でサーバーに入ってファイルを編集したいとき
  • git のコミットコメントを入力するとき(デフォで vim が開く設定になってることが多い)
  • Dockerfile、cron、nginx、php.ini など設定ファイル編集
  • マージコンフリクトの手動解決(今回みたいなケース!)
起動:        vim ファイル名

モード切替:
  i     → 挿入モード(編集)
  [Esc] → ノーマルモード(操作)
  :w    → 保存
  :q    → 終了
  :wq   → 保存して終了
  :q!   → 保存せずに終了(強制終了)

カーソル移動(ノーマルモード):
  h ← j ↓ k ↑ l →
  gg     → ファイル先頭
  G      → ファイル末尾
  /文字列 → 検索

実際、vim使える人って多いの?

……体感で言うと

  • エンジニア全体:5〜6割は「最低限使える」
  • インフラ寄りやDevOps:8割以上はガッツリ使う
  • フロント寄りや非UNIX系:2〜3割

「vimバリバリ!」って人は実はそこまで多くないけど、「最低限の操作はできる」って人は多い!

特にSSH越しの作業があると、vimが“逃げられない必須スキル”になることがあるから、ちょっとずつ慣れておくと安心ですね

Windowsでvimをインストールする手順

Scoopでは「管理者権限不要」でインストールしよう

PS C:\Users\username> vim --version
vim : 用語 'vim' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。
名前が正しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してください
。
発生場所 行:1 文字:1
+ vim --version
+ ~~~
    + CategoryInfo          : ObjectNotFound: (vim:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

// vim はまだインストールされてない状態

PS C:\Users\username> scoop list
Installed apps:

Name     Version Source Updated             Info
----     ------- ------ -------             ----
7zip     24.09   main   2025-04-10 19:50:19
supabase 2.20.12 main   2025-04-10 19:50:23

// vim が載ってない → 未インストール
// Scoop自体はインストールされている

PowerShellで下記コマンドでインストール(どこで実行してもOK!)

scoop install vim

Running post_install script…done.
‘vim’ (9.1.0) was installed successfully!

でインストールされます

C:\
└─ Users\
   └─ <ユーザー名>\
      └─ scoop\                         ← Scoop本体のルート
         ├─ apps\                       ← 実際にインストールされたアプリの本体が入る
         │  └─ vim\
         │     ├─ 9.1.0000\             ← vimの実体(この中に本物のvim.exeなどがある)
         │     └─ current\              ← 現在有効なバージョンへのリンク(例:→ 9.1.0000)
         │        ├─ vim.exe            ← CLI本体(ここが呼び出される)
         │        └─ その他の関連ファイル(docs、runtimeなど)
         ├─ shims\                      ← CLI実行用のショートカット群(PATHに通ってる)
         │  └─ vim.exe                  ← 実行用の中継ファイル(shim)
         ├─ cache\                      ← 一時ファイル(ZIPなどが入る)
         ├─ buckets\                    ← インストール元(GitHubレポジトリ)情報
         └─ persist\                    ← 永続的な設定や保存データ(ツールによる)

scoop install vim の「本体」はバージョン付きのフォルダに入るけど、実行時は常に current が使われてる!

PS C:\Users\username> cd .\Downloads\
PS C:\Users\username\Downloads> vim hello.txt

// ダウンロードフォルダにファイル生成されました

拡張機能でVSCodeでvimを使うこともできる

Vim vscodevim v1.27.3 7,600,060 ★★★★★ (581) Vim emulation for Visual Studio Code アクティブ化 ✓ 自動更新 設定

上記のプラグインとVSCodeのショートカットを組み合わせれば、マウスを使用せずにすばやくコーディングできます

コマンド動作
h, j, k, l細かい移動
ctrl + y
ctrl + e
画面を一行スクロール、長押しでも
ctrl + b
ctrl + f
画面を1画面幅分スクロール
ctrl + f12ホバーの表示

型とかが表示される
コマンド動作
alt + d選択した文字列と同じ文字列を追加選択

ctrl + dがvimに取られるのでその代わり
ctrl + tab開いてるファイルの次のファイルに移動
ctrl + shift + tab開いてるファイルの前のファイルに移動
ctrl + f12ホバーの表示

型とかが表示される