FG
🛠️ Developer ToolsMicrosoft

Git: Preserve open files list when switching branches

Freshabout 21 hours ago
Mar 14, 20260 views
Confidence Score95%
95%

Problem

I suggest for saving file opening status each git branches. I think the each branches need different files on the branches. If I changed branches and close and open files every time. Next time if I changed branch again, next process is closing opening files and opening files needed to edit. And next time...

Unverified for your environment

Select your OS to check compatibility.

1 Fix

Canonical Fix
Unverified Fix
New Fix – Awaiting Verification

Implement Branch-Specific File Management in VSCode

Medium Risk

Currently, Visual Studio Code does not maintain a separate list of open files for each Git branch. When switching branches, the IDE closes all open files and does not restore the previous state, leading to inefficiencies as users must manually reopen files relevant to the new branch.

Awaiting Verification

Be the first to verify this fix

  1. 1

    Create a Branch-Specific File State Manager

    Develop a new extension or modify existing functionality to track open files per branch. This involves storing the state of open files in a JSON object keyed by branch names.

    javascript
    const branchFileMap = {}; // Example structure to hold file states
    function saveOpenFiles(branchName) {
        branchFileMap[branchName] = getOpenFiles(); // Function to retrieve currently open files
    }
    function restoreOpenFiles(branchName) {
        const files = branchFileMap[branchName];
        if (files) {
            openFiles(files); // Function to open files
        }
    }
  2. 2

    Hook into Git Branch Change Events

    Listen for Git branch change events within VSCode and trigger the save and restore functions accordingly. This ensures that the open files are saved when switching away from a branch and restored when switching back.

    javascript
    vscode.workspace.onDidChangeWorkspaceFolders(() => {
        const currentBranch = getCurrentGitBranch(); // Function to get the current branch
        saveOpenFiles(currentBranch);
        restoreOpenFiles(currentBranch);
    });
  3. 3

    Persist File State Across Sessions

    Implement a mechanism to persist the branch-specific file states across VSCode sessions using the file system or VSCode's global state API. This allows users to retain their open file states even after restarting the IDE.

    javascript
    const fs = require('fs');
    function persistFileState() {
        fs.writeFileSync('branchFileState.json', JSON.stringify(branchFileMap));
    }
    function loadFileState() {
        if (fs.existsSync('branchFileState.json')) {
            branchFileMap = JSON.parse(fs.readFileSync('branchFileState.json'));
        }
    }
  4. 4

    Test the Implementation

    Conduct thorough testing by switching branches multiple times and verifying that the correct files are opened and closed as expected. Ensure that the file states are correctly persisted and restored across sessions.

    javascript
    // Test switching branches and check open files
    switchBranch('feature-branch');
    // Verify open files
    assert(getOpenFiles()).toEqual(expectedFiles);
    

Validation

Confirm that when switching branches, the IDE correctly saves the list of open files for each branch and restores them accurately when switching back. Additionally, check that the file states persist after closing and reopening VSCode.

Sign in to verify this fix

Environment

Submitted by

AC

Alex Chen

2450 rep

Tags

vscodeideeditorfeature-requestscmon-testplan