ghickman
ghickman

Reputation: 6043

In Git how can I stage a file I have just diffed without manually specifying the file?

I frequently diff a file, decide it's what I'll stage and then have to run the git add /long/path/to/file to manually specify the file.

A usual work flow would go along the lines of:

git status

"oooh changes"

git diff /long/path/to/changed/file

"Yup, I remember that - commit time!"

git add /long/path/to/changed/file

Obviously this isn't the hardest thing in the world to do, it just gets a little tedious. I know I could go into interactive mode too, but that's never really fitted my work flow.

So I'm looking for some magic unix or git command where I can say "Hey, that file I just diffed - stage it please!".

Does something like that exist in either Git or Bash? Or is it something I need to build in a bash script?

Upvotes: 5

Views: 1952

Answers (4)

Pablo Cabrol
Pablo Cabrol

Reputation: 21

You can try to use:

git add .

This command line adds all new files in the present work directory without specifying file names or file path.

Upvotes: 0

Shawn Chin
Shawn Chin

Reputation: 86944

You can make use of bash shell shortcuts. For example, type:

git add Alt .

The Alt . shortcut yanks the arguments from the previous command. You can also repeat it to search for arguments further back in your command history.

Bonus material...

If you're up for something more arcane, try the following:

[you@home]$ git diff /some/path/to/file
[you@home]$ ^diff^add

From the definitive guide to bash command line history:

Perhaps the most interesting event designator is the one in form '^string1^string2^' which takes the last command, replaces string1 with string2 and executes it.

Using ^diff^add, while amusing, can be a pain to type. And it cannot be used in an alias. See my other answer for an alternative.

Upvotes: 8

Shawn Chin
Shawn Chin

Reputation: 86944

Add the following to your .bashrc:

alias addiff='fc -s "git diff=git add"'

You now have a addiff command which, when used after a git diff, will covert it to a git add.

[you@home]$ git diff /some/path/to/file
[you@home]$ addiff

fc (short for Fix Command) is a bash built-in command. When used without options, it allows you to edit your previous command before re-execution. Using the -s options allows one to specify the pattern without having to resort to a text editor.

For a more generic usage of fc, add alias r='fc -s' to your .bashrc. You can then use it as such:

[you@home]$ r # repeat the previous command

[you@home]$ r git # repeat the last command containing the word "git"

[you@home]$ r foo=bar # repeat the last command, replace "foo" with "bar"

Upvotes: 3

Dogbert
Dogbert

Reputation: 222368

Use

git add !$

More info: http://www.cyberciti.biz/faq/shell-call-last-argument-of-preceding-command/

Upvotes: 14

Related Questions