"git add -A"와 "git add."의 차이점


2917

명령 git add [--all|-A]이와 같습니다 git add .. 이 올바른지? 그렇지 않다면 어떻게 다릅니 까?

답변:


4240

이 답변은 Git 버전 1.x 에만 적용됩니다 . Git 버전 2.x의 경우 다른 답변을 참조하십시오.


요약:

  • git add -A모든 변경 사항을

  • git add .삭제하지 않고 새 파일 및 수정 단계

  • git add -u새 파일없이 수정 및 삭제 단계


세부 묘사:

git add -A와 같습니다 git add .; git add -u.

중요한 점은 git add .작업 트리를보고 변경되거나 새로 작성되어 무시되지 않은 경우 모든 변경 사항을 준비된 변경에 추가한다는 것입니다. 'rm'작업을 준비하지 않습니다.

git add -u이미 추적 된 모든 파일을보고 해당 파일이 다르거 나 제거 된 경우 해당 파일의 변경 사항을 준비합니다. 새 파일을 추가하지 않고 이미 추적 된 파일의 변경 사항 만 준비합니다.

git add -A 두 가지를 모두 수행하는 편리한 바로 가기입니다.

이 (망할 놈의 버전에 대한 출력 2.x으로합니다 같은과에서 차이를 테스트 할 수 있습니다 git add . git status 것입니다 다를 수를)

git init
echo Change me > change-me
echo Delete me > delete-me
git add change-me delete-me
git commit -m initial

echo OK >> change-me
rm delete-me
echo Add me > add-me

git status
# Changed but not updated:
#   modified:   change-me
#   deleted:    delete-me
# Untracked files:
#   add-me

git add .
git status

# Changes to be committed:
#   new file:   add-me
#   modified:   change-me
# Changed but not updated:
#   deleted:    delete-me

git reset

git add -u
git status

# Changes to be committed:
#   modified:   change-me
#   deleted:    delete-me
# Untracked files:
#   add-me

git reset

git add -A
git status

# Changes to be committed:
#   new file:   add-me
#   modified:   change-me
#   deleted:    delete-me

41
어때요 git add *?
Jared

3
너무 나쁜 git add -A -p사람이 (비 추적 파일에 대해 대화 형으로 문의) 예상대로 작동하지 않습니다
에릭 Kaplun

2
답변을 업데이트하십시오. 그것은해야한다 : git add -A :/git add -A .
가브리엘 라마

5
자세한 내용은 자식의 새 버전 git add -u이되었다 git add -u :/후자의 매개 변수, 경로가되는 특정 디렉토리를 -u 할 수 있도록하여, :/전체 트리를 처리합니다.
Brizee

15
@CharlesBailey, Git 은 아무런 이유없이 복잡한 것을 만드는 것을 정말 좋아 합니다. 거기에 실제 사람이 특히 필요가있다 유스 케이스 git add -u또는 git add .그것도 더 동기화 문제가있어 없는지 확인하기 위해 추가 여분의 정신 세금에 대한 회계 후 쉽게 자신의 인생을 만드는 것을 수행하여이? 힘내하지 더 furthur 분할 않는 이유를 궁금해 add -u두 개의 명령어로 add -u1add-u2파일에 대한함으로써 하나 개의 작품이 아닌 숫자로 시작하는 파일을 다른 숫자로 시작하고
Pacerier

946

다음은 빠른 이해를위한 표입니다.

힘내 버전 1.x :

여기에 이미지 설명을 입력하십시오

힘내 버전 2.x :

여기에 이미지 설명을 입력하십시오

장문 플래그 :

  • git add -A 에 해당 git add --all
  • git add -u 에 해당 git add --update

더 읽을 거리 :


1
테이블 주셔서 감사합니다. 수정 된 파일 만 추가하는 방법이 있습니까? 새로운 파일이 없거나 삭제 된 파일이 없습니다
Gokul NK

3
@Gokul : 이 게시물 에 따르면 git diff-files -z --diff-filter=M --name-only | xargs -0 git add수정 된 파일 만 추가 할 수 있지만 새 파일이나 삭제는 추가 할 수 없습니다.
Ville

93
git add .현재 경로에있는 새 파일 만 추가 하므로 이는 사실이 아닙니다 . 새 디렉토리가있는 경우 즉 ../foo, git add -A그것을 무대 것입니다 git add .하지 않습니다.
Milo Wielondek

2
그래서, git add .동등에 git add -A .동등하다,git add "*"
flow2k

나는 여전히 git add "*"에 대해 혼동하고 있습니다. 좀 더 자세히 설명해 주시겠습니까?
HS 우 메르 파 루크

176

함께 힘내 2.0, git add -A기본값은 다음과 git add .같음git add -A . .

git add <path>" git add -A <path>"는 이제 " " 와 동일하므로 " " git add dir/는 디렉토리에서 제거한 경로를 확인하고 제거를 기록합니다.
이전 버전의 Git에서는 " git add <path>"이 (가) 제거를 무시했습니다.

원하는 경우 " git add --ignore-removal <path>" 라고 말하면 추가 또는 수정 된 경로 만 추가 할 수 있습니다 <path>.

git add -Agit add :/( git repo 폴더에서 모든 것을 추가하십시오 )와 같습니다 .
git 2.7 (2015 년 11 월)을 사용하면 " :" 라는 폴더를 추가 할 수 있습니다 !
참조 29abb33 커밋 에 의해 (2015년 10월 25일)를 Junio C 하마노 ( gitster) .


참고 그 자식 2.0 (Q1 또는 Q2 2014) 시작 에 대해 이야기 할 때, git add .(작업 트리에서 현재 경로), 당신은 '사용해야합니다 .다른에' git add뿐만 아니라 명령.

그 의미는:

" git add -A ."동등 " git add .; git add -u ."

( 및에 .대한 추가 ' ' 참고 )git add -Agit add -u

현재 경로뿐만 아니라 전체 작업 트리 에서 git add -A또는 git add -u작동 하기 때문에 (git 2.0 만 시작) .

이러한 명령은 Git 2.0의 전체 트리에서 작동하여 " git commit -a"및 기타 명령과 일관성을 유지 합니다 . " git add -u" 을 " "처럼 동작 하게 만드는 메커니즘이 없기 때문에 git add -u ., " git add -u"(pathspec없이) 현재 하위 디렉토리의 경로에 대해서만 색인을 업데이트하여 ""라고 명시 적으로 말하기 위해 손가락 훈련을 시작 하는 것이 중요합니다. git add -u ."Git 2.0이 나오기 전에 의미가있을 때.

이러한 명령이 pathspec없이 실행될 때와 현재 디렉토리 외부에서 로컬 변경이있을 때 경고가 발생합니다 . Git 2.0의 동작은 이러한 상황에서 오늘 버전과 다르기 때문입니다.


3
@NickVolynkin 대단해! SO의 국제 커뮤니티가 의도 한대로 작동하는 것을 보게되어 기쁩니다. 참조 : ru.stackoverflow.com/a/431840
VonC

@VonC, Nice, Git 사람들은 실제로 그들의 업데이트가 "일관성을 향상시킬 것"이라고 말하면서 뺨을 가졌습니다. 그들이 한 일은 더 혼란과 불일치가 생겼습니다. 알파벳은 26 개이며 이미 사용 된 플래그를 재사용 해야 했습니다.
Pacerier

136

에서 찰스 지침 을 다음과 같이 될 것이다 나의 제안 이해를 테스트 한 후 :

# For the next commit
$ git add .   # Add only files created/modified to the index and not those deleted
$ git add -u  # Add only files deleted/modified to the index and not those created
$ git add -A  # Do both operations at once, add to all files to the index

이 블로그 게시물은 이러한 명령이 적용될 수있는 상황을 이해하는 데 도움이 될 수 있습니다 . Git 작업 디렉토리에서 삭제 된 파일 제거 .


6
이것은 2.0에서 더 이상 사실이 아닙니다. 추가하십시오. 같은 경로에 -A를 추가하는 것과 동일하지만, 다른 경로에 새 파일이있는 경우 유일한 차이점은
Claudiu Creanga

41

Git 2.0 ( 2014-05-28 )으로 변경된 사항 :

  • -A 이제 기본값입니다
  • 이전 동작은 이제에서 사용할 수 있습니다 --ignore-removal.
  • git add -ugit add -A명령 행에서 경로없이 하위 디렉토리에 전체 트리에서 작동합니다.

따라서 Git 2의 대답은 다음과 같습니다.

  • git add .그리고 git add -A .현재 디렉토리에 새 / 수정 / 삭제 된 파일을 추가
  • git add --ignore-removal . 현재 디렉토리에 새로운 / 수정 된 파일을 추가합니다
  • git add -u . 현재 디렉토리에 수정 / 삭제 된 파일을 추가합니다
  • 점이 없으면 현재 디렉토리에 관계없이 프로젝트의 모든 파일을 추가하십시오.

4
나는 이것이 옳지 않다고 생각합니다. git v2.10.windows.2 'git add'를 사용하면 'Nothing specified, nothing added'가 반환됩니다. 'git add -A'는 변경된 모든 파일을 추가합니다. '-A'가 기본값이 아님을 나타냅니다.
Neutrino

34

더 증류 된 빠른 답변 :

아래 둘 다 수행합니다 ( git add --all 과 동일 )

git add -A

새로운 + 수정 된 파일 준비

git add .

스테이지 수정 및 삭제 된 파일

git add -u

5
안녕하세요. 수정 된 파일 만 준비하려면 어떻게해야합니까? 어떻게 하시겠습니까?
TheGrapeBeyond

2
안녕하세요, 좋은 질문입니다. 내가 아는 한 쉬운 플래그는 없다. git diff-files -z --diff-filter = M --name-only | xargs -0 git add
from-

2
사실 그것의 git add :/+git add -u :/
닉 Volynkin

27

에서 힘내 2.X :

  • 당신은 직접 위치하는 경우 작업 디렉토리 다음 git add -Agit add .차이없이 작동합니다.

  • 당신은 모든 하위 디렉토리에있는 경우 작업 디렉토리 , git add -A전체에서 모든 파일을 추가합니다 작업 디렉토리 , 그리고 git add .당신의 파일을 추가합니다 현재 디렉토리 .

그리고 그게 전부입니다.


12

이것이 더 명확해질 수 있기를 바랍니다.

!The syntax is
git add <limiters> <pathspec>
! Aka
git add (nil/-u/-A) (nil/./pathspec)

리미터는 -u 또는 -A 또는 nil 일 수 있습니다.

Pathspec은 파일 경로 또는 점 '.'일 수 있습니다. 현재 디렉토리를 나타냅니다.

Git이 어떻게 추가되는지에 대한 중요한 배경 지식 :

  • 접두사가 붙은 보이지 않는 파일 (dotfile)은 Git에 의해 자동으로 인식되지 않습니다. 그들은 심지어 '추적되지 않은'것으로 나열되지 않습니다.
  • 빈 폴더는 Git에 의해 추가되지 않습니다. 그들은 심지어 '추적되지 않은'것으로 나열되지 않습니다. (해결 방법은 빈 파일을 추적 파일에 보이지 않게 추가하는 것입니다.)
  • Git 상태는 하위 폴더에있는 하나 이상의 파일을 추적하지 않는 한 하위 폴더 정보, 즉 추적되지 않은 파일을 표시하지 않습니다. 그 전에 Git은 전체 폴더가 범위를 벗어난 것으로 간주합니다. 추적 된 항목이 비어 있습니다.
  • 파일 스펙 지정 = '.' -A또한 지정 하지 않으면 (점) 또는 현재 디렉토리는 재귀 적이 지 않습니다 . 도트는 현재 디렉토리를 엄격하게 참조합니다. 위와 아래에있는 경로는 생략되어 있습니다.

이제 그 지식이 주어지면 위의 답변을 적용 할 수 있습니다.

리미터는 다음과 같습니다.

  • -u= --update= 추적 된 파일의 하위 집합 => 추가 = 아니요; 변화 = 예; 삭제 = 예. 항목을 추적하는 경우 =>
  • -A= --all(그러한 -a= 수퍼 모든 비 추적 / 추적 파일 힘내되지 않는 이상 2.0 전에 도트 스펙이 제공되는 경우, 특정 폴더 고려한 것만 상기 구문 오류를 범하지 않는). => 경우 항목이 인식되고, git add -A그것을 발견하고 그것을 추가 할 것입니다.

경로 사양은 다음과 같습니다.

  • 2.0 이전의 Git에서 두 제한 기 (업데이트 및 모두)의 경우 새 기본값은 현재 경로 (Git 1.9 이하) 대신 전체 작업 트리에서 작동하는 것입니다.
  • 그러나 v2.0에서는 작업이 현재 경로로 제한 될 수 있습니다. 명시적인 점 접미사 (Git 1.9 또는 이전 버전에서도 유효)를 추가하십시오.

git add -A .

git add -u .

결론적으로, 나의 정책은 :

  1. 추가 할 덩어리 / 파일이에 설명되어 있는지 확인하십시오 git status.
  2. 보이지 않는 파일 / 폴더로 인해 누락 된 항목이 있으면 별도로 추가하십시오.
  3. .gitignore일반적으로 관심있는 파일 만 추적 및 / 또는 인식되지 않도록 좋은 파일을 확보하십시오.
  4. 저장소의 최상위 레벨에서 "git add -A"를 사용하여 모든 항목을 추가하십시오. 이것은 모든 버전의 Git에서 작동합니다.
  5. 원하는 경우 색인에서 원하는 항목을 제거하십시오.
  6. 큰 버그가 있으면 'git reset'을 수행하여 인덱스를 완전히 지우십시오.

12

git add .equals git add -A .는 현재 및 하위 폴더에서만 색인을 생성 할 파일을 추가합니다.

git add -A 작업 트리의 모든 폴더에서 색인을 생성 할 파일을 추가합니다.

추신 : 정보는 Git 2.0 (2014-05-28)과 관련이 있습니다.


9

모두 git add .git add -A망할 놈의 최신 버전에서 모든 새로운, 수정 및 삭제 된 파일을 무대 것입니다.

차이점은 git add -A작업중인 Git 저장소에 속하는 "높은, 현재 및 서브 디렉토리"의 파일 을 스테이지한다는 점입니다. 그러나 git add .현재 디렉토리와 그 다음의 서브 디렉토리에서만 파일을 준비합니다 ( 높은 디렉토리 외부에있는 파일이 아님 ).

예를 들면 다음과 같습니다.

/my-repo
  .git/
  subfolder/
    nested-file.txt
  rootfile.txt

현재 작업 디렉토리 인 경우 /my-repo, 그리고 당신이 rm rootfile.txt, 다음 cd subfolder, 다음 git add ., 그것은 것입니다 하지 삭제 된 파일을 무대. 그러나 git add -A어디에서 명령을 수행하든 관계없이이 변경 사항을 단계적으로 수행 할 수 있습니다.


3

-A옵션은 작업 트리와 일치하도록 색인 항목을 추가, 수정 및 제거합니다.

힘내 2에서 -A옵션이 이제 기본값입니다.

Git 설명서에. 따라 현재의 디렉토리로 업데이트 범위를 제한하는가 추가 되면

<pathspec>-A 옵션을 사용할 때 아무 것도 지정 하지 않으면 전체 작업 트리의 모든 파일이 업데이트됩니다 (이전 버전의 Git은 현재 디렉토리 및 하위 디렉토리로 업데이트를 제한하는 데 사용됨).

내가 추가 할 한 가지는 --interactiveor -p모드가 사용 git add되면 update ( -u) 플래그가 사용 된 것처럼 작동하고 새 파일을 추가하지 않는다는 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.