threads / discuss / 8594

How to stage a tree with all changes?

Subject: How to stage a tree with all changes?

## tl;dr

3 messages between Jun 13, 2007 and Jun 13, 2007.

replies: 2people: 3as markdown or json

David Kastrup· Jun 13, 2007, 16:22 UTC · lore

Suppose I have a number of changes in a tree: additions, deletions, renames and so on.

How do I stage and commit all of that?
git-commit -a
omits new files.

git-add . git-commit -a

seemingly overlooks deletions.
What am I overlooking?  This should be simple, shouldn't it?
-- 
David Kastrup
Matthieu Moy· Jun 13, 2007, 16:47 UTC · re: David Kastrup · lore

Re: How to stage a tree with all changes?

David Kastrup <dak@gnu.org> writes:
> Suppose I have a number of changes in a tree: additions, deletions,
> renames and so on.

At commit time, a rename is just an add+delete for git. It'll investigate renames with heuristics later, when needed.

> How do I stage and commit all of that?
Well, what I usually do is
  $ git status
(nicer with 
[status]
	color = auto
in ~/.gitconfig)
and then "confirm" one by one the things I actually want to commit.
Show 6 quoted lines
> git-commit -a
>
> omits new files.
>
> git-add .
> git-commit -a
The -a is not necessary if you just did "git add .".
> seemingly overlooks deletions.

In most cases, you'd have deleted the files with "rm", and you could have told git at that time, using "git rm" instead. Otherwise,

  $ git-ls-files -z | git-update-index --remove -z --stdin

will remove deleted files from the index after the fact. But I don't know any porcelain command to do that. Perhaps a "git rm -u" could be a nice dual for "git add -u"?

-- 
Matthieu
Jeff King· Jun 13, 2007, 18:40 UTC · re: David Kastrup · lore

Re: How to stage a tree with all changes?

On Wed, Jun 13, 2007 at 06:22:23PM +0200, David Kastrup wrote:
> git-add .
> git-commit -a
> 
> seemingly overlooks deletions.
It shouldn't. Try this:

mkdir repo && cd repo git init echo foo >foo git add . git commit -m initial rm foo echo bar >bar git add . git commit -a

'bar' is scheduled for addition, and 'foo' is scheduled for deletion. Have you perhaps removed a file, but it's still in the working directory, and so picked up by your git-add? Can you give us a test case?

> What am I overlooking?  This should be simple, shouldn't it?
Yes, it should. :)
-Peff

← back to recent threads