"git commit"과 "git push"의 차이점은 무엇입니까?


895

내가 진행하는 Git 튜토리얼에서, git commit변경 사항을 저장하는 데 사용된다.

git push그때 무엇을 사용합니까?


83
또한 개념을 이해하는 데 도움이되는 "Git cheatsheet"를 확인할 수도 있습니다. ndpsoftware.com/git-cheatsheet.html
adriendenat

또 다른 컨닝 페이퍼가 있습니다 : atlassian.com/git/tutorials/atlassian-git-cheatsheet
Kolob Canyon

2
이미 제공되었으므로 답변이 없습니다. 단지 관찰. 커밋은 실제로 저장이라고하고 푸시는 커밋이라고해야합니다. 클래식 명명 시나리오 문제
dublinx

답변:


1619

기본적으로 git commit" 저장소에 변경 사항을 기록 하고 git push" " 관련 오브젝트와 함께 원격 참조를 업데이트합니다 ". 따라서 첫 번째는 로컬 저장소와 관련하여 사용되며 후자는 원격 저장소와 상호 작용하는 데 사용됩니다.

다음은 Oliver Steele 의 멋진 그림으로 git 모델과 명령을 설명합니다.

힘내 데이터 전송 명령

에 대한 자세한 읽기 git pushgit pullGitReady.com (내가 처음에 언급 된 기사)


20
원래 소스는 다음과 같습니다. osteele.com/archives/2008/05/my-git-workflow git workflow의 또 다른 그림
tanascius

9
@ben github는 공용 "온 더 클라우드 (on-the-cloud)"리포지토리를 호스팅 할 수있는 유일한 솔루션 git push입니다. 실제로, 대상은 모든 git 저장소 git push가 될 수 있습니다 . 다른 디렉토리 ( 또는 예를 들어) 의 자체 로컬 하드 드라이브 또는 자체 호스트가 제공 하는 git 저장소에있을 수 있습니다. git remote add clone ~/proj/clone.git; git push clone mastergit push ~/proj/clone.git master
Santa

2
그러니까 ... 먼저 밀어야합니까 아니면 먼저 커밋해야합니까?
Kokodoko

5
@Piet 파일을 수정하는 작업 공간에서 시작합니다. 그런 다음 로컬 저장소에 커밋하고, 인덱스에 추가 - 드디어 - 원격 저장소에 밀어
tanascius

2
@ Mr.Hyde는 불가능합니다. 분산 버전 제어로서 Git에는 로컬 사본이 있어야합니다.
tanascius

215

commit : 로컬 저장소에 변경 사항 추가

push : 마지막 커밋을 원격 서버로 전송


56

기본적으로 git commit은 변경 사항을 로컬 리포지토리에 저장하고 git push는 변경 사항을 원격 위치로 보냅니다.


9
오늘은 GIT를 사용한 두 번째 날입니다. 위의 답변을 볼 때 여전히 명확한 그림을 얻지 못하지만 귀하의 답변은 단지 그것을 못 박았습니다. 감사.
Bopha

1
git push실제 업데이트 된 파일 또는 특별한 "diff"파일을 업로드 합니까 ?
multigoodverse


26

git은 분산 버전 제어 시스템이므로 차이점은 commit은 로컬 저장소에 변경 사항을 커밋하고 push는 변경 사항을 원격 저장소로 푸시한다는 것입니다.


19

커밋 : 스냅 샷 | 체인지 셋 | History_record | 버전 | 저장소의 '다른 이름으로 저장' . Git 저장소 = 커밋의 시리즈 (트리) .

로컬 저장소 : 컴퓨터의 저장소

원격 저장소 : 서버의 저장소 ( Github )

git commit: 새 커밋 (마지막 커밋 + 단계별 수정)을 로컬 리포지토리에 추가합니다. (모든 커밋은에 저장됩니다 /.git)

git push, git pull: 로컬 저장소를 연관된 원격 저장소 와 동기화하십시오 . push-에서 변경 사항을 적용 지역원격 , pull-에서 변경 사항을 적용 원격 으로 지역 .


11

git commit로컬 저장소에 변경 사항을 기록하십시오 .

git push 로컬 변경 사항으로 원격 저장소를 업데이트 하십시오 .


20
귀하의 답변은 기본적 으로이 답변 과 동일하며 새로운 것을 추가하지 않습니다.

7

3 가지주의 사항 :

1) 작업 디렉토리 ----- 코드 파일이 존재하는 폴더

2) 로컬 리포지토리 ------ 시스템 내부에 있습니다. COMMIT 명령을 처음 만들면이 로컬 리포지토리가 생성됩니다. 작업 디렉토리와 동일한 위치에
Checkit (.git) 파일이 작성됩니다.
그 후에 커밋 할 때 Working Directory 파일의 변경 사항을 로컬 리포지토리 (.git)에 저장합니다.

3) 원격 리포지토리 ----- 이것은 전세계 어느 곳에 위치한 서버와 같이 시스템 외부에 있습니다. github처럼. PUSH 명령을 만들면 로컬 리포지토리의 코드가이 원격 리포지토리에 저장됩니다.


7

다음 사항을 추가하십시오.

git push로컬 브랜치에서 수행 한 커밋을 원격 저장소로 푸시 하는 데 사용할 때 커밋 할 때까지는 푸시 할 수 없습니다 .

git push명령에는 두 가지 인수가 사용됩니다.

원격 이름 (예 origin : 분기 이름)master

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

git push  <REMOTENAME> <BRANCHNAME> 
git push  origin       master

4

매우 조잡한 비유 : git commit편집 한 파일을 저장하는 것과 비교 하면 git push해당 파일을 다른 위치로 복사합니다.

커밋하고 푸시하는 것은 편집 된 파일을 저장하고 복사하는 것과는 다릅니다. 즉, 비교를 위해 유지해야합니다.


1

git 명령의 사용법 addcommitGithub의 리포지토리에서 로그 파일이 유지 관리된다고 생각하면 더 쉽습니다 . 나를위한 일반적인 프로젝트의 로그 파일은 다음과 같습니다.

---------------- Day 1 --------------------
Message: Completed Task A
Index of files changed: File1, File2

Message: Completed Task B
Index of files changed: File2, File3
-------------------------------------------

---------------- Day 2 --------------------
Message: Corrected typos
Index of files changed: File3, File1
-------------------------------------------
...
...
...and so on

나는 보통 하루를 git pull요청 으로 시작하고 요청으로 끝 git push냅니다. 그래서 하루 기록의 모든 것은 그들 사이에서 일어나는 일에 해당합니다. 매일 몇 가지 파일을 변경해야하는 하나 이상의 논리적 작업 이 완료되었습니다. 해당 작업 중에 편집 된 파일이 색인에 나열됩니다.

이러한 각 하위 작업 (작업 A 및 작업 B)은 개별 커밋입니다. 이 git add명령은 파일을 'Index of Files Changed'목록에 추가합니다. 이 프로세스를 준비라고하며 실제로 변경된 파일과 수행 된 변경을 기록합니다. 이 git commit명령은 추후 참조에 사용될 수있는 사용자 정의 메시지와 함께 변경 사항 및 해당 색인 목록을 기록 / 종료합니다.

여전히 저장소의 로컬 사본 만 변경하고 Github의 로컬 사본은 변경하지 않습니다. 그런 다음, git push모든 커밋에 대한 인덱스 파일과 함께 기록 된 모든 변경 사항을 수행 할 때만 Github의 기본 리포지토리에 로그온됩니다.

예를 들어, 가상 로그 파일에서 두 번째 항목을 얻으려면 다음을 수행했을 것입니다.

git pull
# Make changes to File3 and File4
git add File3 File4
# Verify changes, run tests etc..
git commit -m 'Corrected typos'
git push

간단히 말해서, git add그리고 git commit당신이 체계적인 논리적 하위의 변화로 주요 저장소에 대한 변경을 분해 할 수 있습니다. 다른 답변과 의견이 지적했듯이, 물론 더 많은 용도가 있습니다. 그러나 이것은 가장 일반적인 사용법 중 하나이며 Gvn의 기본 원리는 Svn과 같은 다른 인기있는 것과 달리 다단계 개정 제어 시스템입니다.


0

git commit은 변경 사항을 공식적으로 저장하는 것 외에는 커밋 메시지를 제공하는 모든 커밋에 대해 커밋이 완료되면 원격으로 푸시하여 변경 사항을 전 세계적으로 볼 수 있습니다

이것은 원격으로 푸시하기 전에 수많은 커밋을 수행 할 수 있음을 의미합니다 (커밋 목록과 메시지도 볼 수 있습니다) git은 커밋 ID를 사용하여 각 커밋을 40 자리 코드로 저장합니다

그리고 원격에서 변경 사항을보고 싶을 때만 git push를 사용합니다 (나의 코드가 jenkins에서 작동했는지 확인한 후)


-1

기본적으로 git commit은 변경 사항을 로컬 리포지토리에 저장하고 git push는 변경 사항을 원격 위치로 보냅니다. git은 분산 버전 제어 시스템이므로 차이점은 commit은 로컬 저장소에 변경 사항을 커밋하지만 push는 변경 사항을 원격 저장소로 푸시한다는 것입니다

소스 구글

http://gitref.org/basic/ 이 링크는 매우 유용합니다

https://git-scm.com/docs/git-commit


이 답변은 다른 답변의 단어를 하나로 복사합니다.
Jeffery Opoku-Mensah

그것은 이전에 이미 말한 모든 것에 새로운 것을 가져 오지 않습니다 ...
hublo

-1

layman 용어로 파일을 github에 성공적으로 git하기 위해 순서대로 실행 git commit하는 단계 git push입니다.


-2

git commit로컬 리포지토리에서 준비된 파일을 커밋하는 것입니다. git push로컬 측의 마스터 브랜치를 원격 마스터 브랜치와 빨리 병합합니다. 그러나 합병이 항상 성공하지는 않습니다. 거부가 나타나면 pull성공을 거두어야 git push합니다.


어떤 사람들은 당기기 대신 강제로 밀어 넣기를 원할 수도 있습니다. 상황에 따라 다릅니다. 사실, 다른 사람들과 공유하지 않는 지점 (원격 저장소)에서도 커밋을 리베이스하는 경우 당연히 원하는 것이 아닙니다 .
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.