Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

git-changed-files

kandhavivekraj41.6kMIT1.0.0

Get the change between any of your branch and current branch of a git repository

git-changed-files, git, git-diff, git-status, changed-files, staged, status, changed

readme

git-changed-files

Get the committed and uncommitted files list between your any of your branch and current branch of a git repository

  • Filter based on file type.
  • Promise API
  • Filter files based on the type of change(Example: modified or added or ...)
  • Filter the files with status.
  • Filter files based on files stage (Ex: committed, uncommitted(staged and working directory files)).

Installing

To add it to devDependencies

yarn add git-changed-files --dev

or

npm install --save-dev git-changed-files

Usage

const gitChangedFiles = require('git-changed-files');

(async() => {
  let committedGitFiles = await gitChangedFiles();
  console.log(committedGitFiles);
})().catch((err) => {
    console.log(err);
  });

/* Expected: { committedFiles: [ '.editorconfig', '.travis.yml', 'destroy.js', 'index.js' ],
               unCommittedFiles: ['index.js'] }
*/

(async() => {
  let committedGitFiles = await gitChangedFiles({ formats: ['*.yml'] });
  console.log(committedGitFiles);
})().catch((err) => {
    console.log(err);
  });

/* Expected: { committedFiles: [ '.travis.yml'],
               unCommittedFiles: [] }
*/

(async() => {
  let committedGitFiles = await gitChangedFiles({ formats: ['!*.yml'] });
  console.log(committedGitFiles);
})().catch((err) => {
    console.log(err);
  });

/* Expected: { committedFiles: [ '.editorconfig', 'destroy.js', 'index.js' ],
               unCommittedFiles: ['index.js'] }
*/

(async() => {
  let committedGitFiles = await gitChangedFiles({ diffFilter: 'A' });
  console.log(committedGitFiles);
})().catch((err) => {
    console.log(err);
  });

/* Expected: { committedFiles: ['destroy.js'],
               unCommittedFiles: [] }
*/

(async() => {
  let committedGitFiles = await gitChangedFiles({ showStatus: true });
  console.log(committedGitFiles);
})().catch((err) => {
    console.log(err);
  });

/*
Expected:
{ 
  committedFiles: [ 
    {
      fileName: '.editorconfig',
      status: 'Modified'
    },
    {
      fileName: '.travis.yml'
      status: 'Modified'
    },
    {
      fileName: 'destroy.js'
      status: 'Added'
    },
    {
      fileName: 'index.js'
      status: 'Modified'
    }
  ],
  unCommittedFiles: [
    {
      fileName: 'index.js'
      status: 'Modified'
    }
  ]
 }
 */

(async() => {
  let uncommittedGitFiles = await gitChangedFiles({ showCommitted: false });
  console.log(uncommittedGitFiles);
})().catch((err) => {
  console.log(err);
  });

// Expected: { unCommittedFiles: ['index.js'] }

(async() => {
  let committedGitFiles = await gitChangedFiles({ showUnCommitted: false });
  console.log(committedGitFiles);
})().catch((err) => {
  console.log(err);
  });

// Expected: { committedFiles: [ '.editorconfig', '.travis.yml', 'destroy.js', 'index.js' ] }

API

gitChangedFiles([options])

Returns Promise<Array[]|String>.

options

Type: Object

baseBranch

Type: string
Default: master

baseBranch to compare with you current HEAD.

Example: if baseBranch is master, then the list of files that are changed from master to your current HEAD in local will be displayed.

formats

Type: string | string[]
Default: false

Filters passed filetypes. If need all filetypes pass false or specify the filetypes in array.

Example:

  • All js files -> [*.js]
  • no need js files -> [!*.js]
diffFilter

Type: string
Default: ACDMRTUXB

Diff filters :

  • Added (A),
  • Copied (C),
  • Deleted (D),
  • Modified (M),
  • Renamed (R),
  • changed (T),
  • Unmerged (U),
  • Unknown (X),
  • Broken (B)

Refer More here

showStatus

Type: boolean
Default: false

To show the type of file change in the result.

Example: If showStatus is true then output will be

[{ filename: '.editorconfig', status: 'Deleted' }]

showCommitted & showUnCommitted

Type: boolean
Default: true

Examples:

Case 1:

By default, it lists all the changed files.

{ committedFiles: [ '.editorconfig', '.travis.yml', 'destroy.js', 'index.js' ], unCommittedFiles: ['index.js'] }

Case 2:

If showUnCommitted is false then output will be

{ committedFiles: [ '.editorconfig', '.travis.yml', 'destroy.js', 'index.js' ] }

Case 3:

If showCommitted is false then output will be

{ unCommittedFiles: ['index.js'] }

Case 4:

If both options are false then it will throw an error.

Either showCommitted or showUnCommitted must be true

Note:

If you changed a file and committed then again if you changed the same file, it will be present in both committed and uncommitted files list.

Built With

  • NodeJs - Framework used
  • NPM - Dependency Management
  • Atom - Code Editor

Contributing

  • If you have any ideas, just open an issue and tell me what you think.
  • Pull requests are warmly welcome, If you would like to contribute to this Project.

License

MIT