top 40 git interview questions
애니메이션을보기에 좋은 웹 사이트는 무엇입니까
답변 및 예가 포함 된 가장 인기있는 GIT 인터뷰 질문 :
이 유익한 튜토리얼에는 설명적인 답변과 함께 Git 인터뷰에서 가장 많이 묻는 질문 세트가 포함되어 있습니다. 이러한 질문은 확실히 Git 인터뷰를 성공적으로 준비하고 크랙하는 데 도움이 될 것입니다.
초보자이든 경험 많은 전문가이든, Git에 대한 이러한 인터뷰 질문과 자세한 답변은 주제에 대한 지식을 풍부하게하고 인터뷰뿐만 아니라 작업에서 탁월한 능력을 발휘하는 데 확실히 도움이 될 것입니다.
시작하자!!
가장 자주 묻는 GIT 인터뷰 질문
다음은 참고 용으로 자주 묻는 GIT 인터뷰 질문 중 일부입니다.
Q # 1) Git이란 무엇입니까?
대답: Git은 분산 버전 관리 도구입니다. 우수한 품질의 소프트웨어를 구축하기위한 데이터 보증을 제공하므로 분산 된 비선형 워크 플로와 호환됩니다.
Git은 무료이며 오픈 소스입니다. 크기가 작든 크든 거의 모든 종류의 프로젝트에 사용할 수 있습니다. Git은 뛰어난 속도와 효율성으로 유명합니다. Git 저장소는 매우 쉽게 찾고 액세스 할 수 있습니다. 특정 기능으로 인해 Git은 매우 유연하고 안전하며 시스템과 호환됩니다.
Q # 2) 분산 버전 관리 시스템이란 무엇입니까?
대답: 분산 VCS는 프로젝트 파일과 모든 버전을 유지하기 위해 중앙 서버에 의존하지 않는 시스템입니다. 분산 VCS에서 각 공동 작업자 또는 개발자는 기본 저장소의 로컬 복사본을 가져 오며이를 복제본이라고합니다.
[영상 출처 ]
위의 다이어그램에서 볼 수 있듯이 모든 공동 작업자는 로컬 컴퓨터에 로컬 저장소를 유지합니다. 문제없이 로컬 저장소를 커밋하고 업데이트 할 수 있습니다.
풀 작업을 사용하여 개발자는 중앙 서버의 최신 변경 사항으로 로컬 저장소를 업데이트 할 수 있습니다. 푸시 작업을 사용하여 로컬 저장소에서 중앙 서버로 변경 사항을 보낼 수 있습니다.
Q # 3) Git은 누가 만들었나요?
대답: Git은 Linux Kernel을 개발하기 위해 2005 년 Linus Torvalds가 만들었습니다.
Q # 4) Git에서는 어떤 언어를 사용하나요?
대답: C는 Git이 작성되는 기본 프로그래밍 언어입니다. C 언어는 다른 고급 프로그래밍 언어와 연결된 런타임 오버 헤드를 피함으로써 Git을 빠르게 만듭니다.
Q # 5) Git의 장점 / 주요 기능은 무엇인가요?
답변 : 아래에 나열된 다양한 f Git의 먹거리.
(i) 무료 및 오픈 소스 :
Git은 GPL (General Public License) 오픈 소스 라이선스에 따라 발급됩니다. Git을 사용하기 위해 비용을 지불 할 필요가 없습니다.
완전 무료입니다. 오픈 소스이므로 필요에 따라 소스 코드를 수정할 수 있습니다.
(ii) 속도 :
모든 작업을 실행하기 위해 네트워크에 연결할 필요가 없기 때문에 모든 작업을 빠르게 수행합니다. 로컬에 저장된 저장소에서 버전 기록을 가져 오는 것은 원격 서버에서 가져 오는 것보다 100 배 더 빠를 수 있습니다.
Git은 다른 고급 언어와 연결된 런타임 오버 헤드를 피하는 기본 프로그래밍 언어 인 C로 작성되었습니다.
(iii) 확장 가능 :
Git은 확장 성이 뛰어납니다. 따라서 향후 공동 작업자 수가 증가하면 Git은 이러한 변경 사항을 쉽게 수용 할 수 있습니다.
Git이 전체 저장소를 대표한다는 사실에도 불구하고 Git은 무손실 압축 기술을 통해 방대한 데이터 전체를 압축하므로 클라이언트 측에 보관되는 데이터는 매우 작습니다.
(iv) 신뢰성 :
모든 공동 작업자가 자체 로컬 저장소를 가지고 있기 때문에 시스템 충돌시 손실 된 데이터는 모든 로컬 저장소에서 복구 할 수 있습니다. 항상 모든 파일의 백업이 있습니다.
(v) 보안 :
Git은 SHA1 (Secure Hash Function)을 사용하여 저장소 내부의 개체에 이름을 지정하고 식별합니다. 각 아티팩트 및 커밋은 체크 아웃 중에 체크섬을 통해 체크섬 및 복구됩니다.
Git 기록은 특정 버전의 ID (Git에 대한 커밋)가 해당 커밋까지 실행되는 전체 개발 기록에 의존하는 방식으로 저장됩니다. 파일 버전이 Git에 푸시되면 알림없이 변경할 수있는 방법이 없습니다.
(vi) 경제적 :
중앙 집중식 버전 관리 시스템의 경우 중앙 서버는 전체 팀의 요청을 처리 할 수있을만큼 강력해야합니다. 소규모 팀에게는 문제가되지 않지만 팀이 확장됨에 따라 서버의 하드웨어 제한으로 인해 성능이 저하 될 수 있습니다.
Git과 같은 분산 버전 제어 시스템의 경우 팀원은 변경 사항을 푸시하거나 가져와야 할 때 서버와 상호 작용할 필요가 없습니다. 모든 무거운 작업은 클라이언트 쪽에서 발생하므로 서버 하드웨어는 확실히 간단하게 유지할 수 있습니다.
(vii) 비선형 개발 지원 :
Git은 빠른 분기 및 병합을 제공하며 비선형 개발 기록을 구상하고 탐색하기위한 특정 도구를 포함합니다. Git의 기본 개념은 변경 사항이 다른 검토 자에게 전송 될 때 작성되는 것보다 더 자주 병합된다는 것입니다.
Git 브랜치는 매우 가볍습니다. Git의 분기는 단일 커밋 만 참조합니다. 부모 커밋의 도움으로 완전한 분기 구조를 만들 수 있습니다.
(viii) 쉬운 분기 :
Git을 통한 지점 관리는 매우 간단하고 쉽습니다. 분기를 생성, 삭제 및 병합하는 데 몇 개의 jiff가 필요합니다. 기능 분기는 코드베이스의 각 변경 사항에 대해 격리 된 환경을 제공합니다.
개발자가 작업 규모에 관계없이 작업을 시작해야 할 때 새 분기를 만듭니다. 이것은 마스터 브랜치가 지속적으로 생산 품질의 코드를 유지하도록합니다.
(ix) 분산 개발 :
Git은 모든 개발자에게 전체 개발 기록의 로컬 복사본을 제공하고 변경 사항은 이러한 저장소에서 다른 저장소로 복제됩니다. 이러한 변경 사항은 추가 된 개발 분기로 도입되며 로컬에서 개발 된 분기와 동일한 방식으로 병합 할 수 있습니다.
(x) 현재 시스템 또는 프로토콜과의 호환성 :
저장소는 일반 소켓 또는 ssh 위에 HTTP, FTP 또는 Git 프로토콜을 통해 게시 할 수 있습니다.
Q # 6) Git에서 리포지토리를 어떻게 생성합니까?
대답: 리포지토리를 만들려면 프로젝트에 대한 디렉터리가 아직없는 경우 디렉터리를 만든 다음 ''명령을 실행하면됩니다. 자식 초기화 ”. 이 명령을 실행하면 프로젝트 디렉터리 내에 .git 디렉터리가 생성됩니다. 즉, 이제 프로젝트 디렉터리가 Git 저장소로 바뀝니다.
Q # 7) .git 디렉토리 란 무엇입니까?
대답: 저장소를 만드는 순간 그 안에있는 .git 디렉토리를 찾을 수 있습니다. 이 .git 디렉토리는 저장소의 모든 메타 데이터를 포함하고 커밋 기록을 유지하여 저장소의 파일에 대한 모든 변경 사항을 추적합니다.
커밋, 후크, 참조, 개체 데이터베이스, 원격 저장소 주소 등에 관한 모든 정보는이 폴더에 보관됩니다. 이것은 Git에서 가장 중요한 부분입니다. 로컬 머신에서 Git 저장소를 복제 할 때이 .git은 실제로 복사되는 디렉토리입니다.
Q # 8) .git 디렉토리가 삭제되면 어떻게 되나요?
대답: .git / 디렉토리가 삭제되면 프로젝트 기록을 잃게됩니다. 저장소는 더 이상 버전 관리를받지 않습니다.
Q # 9) Git에서 Commit Message를 작성하는 데 사용되는 명령은 무엇입니까?
대답: git 커밋에 메시지를 전달하는 데 사용되는 명령은 다음과 같습니다. git commit -m 'commit message'. 깃발 미디엄 커밋 메시지를 전달하는 데 사용됩니다.
Q # 10) 베어 Git 저장소 란 무엇입니까? 표준 / 비 베어 Git 저장소와 어떻게 다른가요?
대답: 생성되는 저장소 자식 초기화 명령은 표준 / 비 베어 Git 저장소입니다.
이러한 저장소의 최상위 폴더에는 다음 두 가지가 있습니다.
- 모든 메타 데이터를 유지하고 저장소의 기록을 추적하는 .git 하위 디렉토리.
- 작동하는 나무.
다음을 사용하여 생성 된 저장소 git init –bare 명령은 베어 Git 저장소로 알려져 있습니다. 주로 공유에 사용됩니다. 작업 트리를 포함하지 않습니다. 저장소의 git 개정 내역을 .git 하위 폴더에 넣지 않고 루트 폴더에 보관합니다.
베어 저장소 데이터 만 포함합니다. 이것이 베어 Git 저장소가 표준 Git 저장소와 다른 점입니다. 또한 베어 저장소에는 기본 원격이 없습니다. 유래 여러 원격 사용자를위한 원본 저장소 역할을하는 저장소입니다.
베어 저장소에는 작업 공간이 없으므로 git push 과 git pull 명령은 베어 저장소에서 작동하지 않습니다. 베어 리포지토리에 변경 사항을 커밋 할 필요가 없습니다.
Q # 11) Git 리포지토리 호스팅 서비스를 언급하십시오.
대답:
- Github
- 피카 코드
- Gitlab
- Microsoft VSTS
- BitBucket
- GitEnterprise
- SourceForge
- 발사대
- 억지로
- 콩 줄기
- 마치
Q # 12) Git에서 몇 가지 기본 작업의 이름을 지정하십시오.
대답: Git의 몇 가지 기본 작업은 다음과 같습니다.
- 초기화
- 더하다
- 범하다
- 푸시
- 손잡이
Q # 13) Git에서 일부 고급 작업의 이름을 지정하십시오.
대답: Git의 일부 고급 작업은 다음과 같습니다.
- 분기
- 병합
- 리베이스
Q # 14) Git과 SVN을 어떻게 구분 하시겠습니까?
대답: Git은 분산 버전 제어이지만 SVN은 중앙 집중식입니다. 이것은 특징과 기능면에서 둘 사이에 많은 차이점을 가져옵니다.
가다 | SVN | |
---|---|---|
함유량 | 암호화 SHA-1 해시. | 해시 된 콘텐츠가 없습니다. |
서버 아키텍처 | Git이 설치된 컴퓨터는 클라이언트와 서버로 작동합니다. 각 개발자는 개별 컴퓨터에 프로젝트의 전체 버전 기록에 대한 로컬 사본을 가지고 있습니다. Git 변경은 로컬에서 발생합니다. 따라서 개발자는 항상 네트워크에 연결할 필요가 없습니다. 푸시 및 풀 작업의 경우에만 개발자가 원격 서버에 연결하려면 인터넷 연결이 필요합니다. | SVN에는 별도의 클라이언트와 서버가 있습니다. 로컬에서 사용할 수 없습니다. 작업을 수행하려면 네트워크에 연결되어 있어야합니다. 또한 SVN에서는 모든 것이 중앙 집중화되어 있으므로 중앙 서버가 충돌하거나 손상 될 경우 프로젝트의 전체 데이터 손실이 발생합니다. |
분기 | Git은 효과적인 분기 모델로 인해 개발자가 주로 선호합니다. Git 브랜치는 가볍지 만 강력합니다. 특정 커밋에 대한 참조 일뿐입니다. 다른 커밋에 영향을주지 않고 언제든지 브랜치를 생성, 삭제 또는 수정할 수 있습니다. 따라서 Git을 사용하면 분기, 분기 및 병합이 쉽습니다. | SVN은 복잡한 분기 및 병합 모델을 가지고 있으며 관리하는 데 시간이 많이 걸립니다. SVN에서 브랜치는 저장소 내의 디렉토리로 생성됩니다. 이 디렉토리 구조는 주로 문제가 있습니다. 분기가 준비되면 트렁크로 다시 커밋해야합니다. 변경 사항을 병합하는 유일한 사람이 아니므로 트럭 버전이 개발자의 지점으로 간주되지 않을 수 있습니다. 이로 인해 분기에서 충돌, 누락 된 파일 및 뒤죽박죽 된 변경이 발생할 수 있습니다. |
액세스 제어 | Git은 모든 기여자가 동일한 권한을 가질 것이라고 가정합니다. | SVN을 사용하면 각 및 디렉터리 수준에서 읽기 / 쓰기 액세스 제어를 정의 할 수 있습니다. |
감사 가능성 | Git에서는 변경 사항이 저장소 수준에서 추적됩니다. Git은 리포지토리에서 이루어진 정확한 변경 내역을 유지하는 데 너무 신경 쓰지 않습니다. Git의 분산 된 특성을 통해 공동 작업자는 로컬 저장소 기록의 일부를 변경할 수 있습니다. Git을 사용하면 코드베이스의 실제 변경 내역을 파악하기가 어렵습니다. 예를 들어 Git에서 이름을 바꾸면 기록이 손실됩니다. | SVN에서 변경 사항은 파일 수준에서 추적됩니다. SVN은 매우 일관되고 정확한 변경 내역을 유지합니다. 과거와 동일한 데이터를 복구 할 수 있습니다. SVN 기록은 영구적이며 항상 확실합니다. |
보관 요건 | Git과 SVN은 동일한 방식으로 데이터를 저장합니다. 디스크 공간 사용량은 둘 다 동일합니다. 바이너리 파일의 경우 유일한 차이점이 있습니다. Git은 바이너리 파일에 친숙하지 않습니다. 대용량 바이너리 파일의 저장을 처리 할 수 없습니다. | SVN에는 바이너리 및 텍스트 파일 모두에서 작동하는 xDelta 압축 알고리즘이 있습니다. 따라서 SVN은 Git보다 비교적 적은 공간에 대용량 바이너리 파일을 저장할 수 있습니다. |
유용성 | Git과 SVN은 모두 명령 줄을 기본 UI로 사용합니다. Git은 주로 개발자 / 기술 사용자가 사용합니다. | SVN은 배우기 쉽기 때문에 비전문 사용자가 주로 사용합니다. |
글로벌 개정 번호 | 사용 불가 | 유효한 |
Q # 15) Git과 GitHub의 차이점은 무엇입니까?
대답: Git은 고품질 버전 관리 시스템입니다. 본질적으로 배포되며 소프트웨어 개발 전반에 걸쳐 소스 코드의 변경 사항을 추적하는 데 사용됩니다. 개발자 간의 작업을 동기화하고 모든 파일의 변경 사항을 추적하는 데 도움이되는 고유 한 분기 모델이 있습니다.
Git의 주요 목표는 속도, 데이터 무결성, 분산 된 비선형 워크 플로에 대한 지원을 제공하는 것입니다. Git은 클라우드가 아닌 로컬 머신에 설치 및 유지됩니다.
GitHub는 팀을 하나로 묶는 클라우드 기반 Git 저장소 호스팅 서비스입니다. 웹 기반 GUI를 제공 할뿐만 아니라 액세스 제어 및 여러 협업 기능, 각 프로젝트에 대한 기본 작업 관리 도구를 제공합니다.
또한 GitHub는 오픈 소스입니다. 즉 코드가 중앙 서버에 보관되고 모든 사람이 액세스 할 수 있습니다.
Q # 16) Git의 충돌이란 무엇이며 어떻게 해결합니까?
자바에서 배열 요소를 추가하는 방법
대답: Git에는 코드 변경이 다른 줄과 다른 파일에서 발생한 경우 병합 커밋을 자체적으로 처리하는 자동 병합 기능이 있습니다.
그러나 파일의 동일한 코드 줄에 변경 사항이 있거나 한 브랜치에서 파일이 삭제되었지만 다른 브랜치에서 존재 및 수정 된 커밋 경쟁의 경우 Git이 자동으로 차이를 해결할 수 없어 병합 충돌이 발생합니다.
이러한 경우 최종 병합에서 포함 할 코드와 삭제할 코드를 결정하는 데 도움이 필요합니다.
병합 충돌은 분기 병합, 분기 리베이스 또는 커밋 체리 선택 중에 발생할 수 있습니다. 충돌이 감지되면 Git은 충돌 영역을 강조 표시하고 해결을 요청합니다. 충돌이 해결되면 병합을 진행할 수 있습니다.
경쟁하는 라인 변경 병합 충돌을 해결하려면 아래 단계를 따르십시오.
- Git Bash (Git 명령 줄)를 엽니 다.
- 사용하다 CD 병합 충돌이있는 로컬 Git 저장소로 이동하려면 명령을 사용하십시오.
- 사용 자식 상태 병합 충돌의 영향을받는 파일 목록을 생성하는 명령입니다.
- 사용하는 텍스트 편집기를 열고 병합 충돌이있는 파일로 이동합니다.
- 파일에서 병합 충돌의 시작을 보려면 문서에서 충돌 마커를 찾으십시오.<<<<<<<. At the point when you open the file, you’ll observe the modifications from the HEAD or base branch after the line <<<<<<>>>>>> 지점 이름.
- 브랜치의 변경 사항 만 유지하거나 다른 브랜치의 변경 사항 만 유지하거나 두 브랜치의 변경 사항을 포함 할 수있는 새로 변경해야하는 경우 선택합니다. 충돌 마커 지우기<<<<<<>>>>>> 최종 병합에 필요한 변경을 수행합니다.
- 사용하다 자식이 추가합니다. 변경 사항을 추가하거나 준비하는 명령입니다.
- 마지막으로 git commit -m“메시지” 주석으로 변경 사항을 커밋하는 명령.
제거 된 파일 병합 충돌을 해결하려면 다음 단계를 수행해야합니다.
- Git Bash (Git 명령 줄)를 엽니 다.
- 사용하다 CD 병합 충돌이있는 로컬 Git 저장소로 이동하려면 명령을 사용하십시오.
- 사용 자식 상태 병합 충돌의 영향을받는 파일 목록을 생성하는 명령입니다.
- 사용하는 텍스트 편집기를 열고 병합 충돌이있는 파일로 이동합니다.
- 제거 된 파일을 유지하려면 선택하십시오. 텍스트 편집기에서 제거 된 파일의 최신 변경 사항을 확인할 수 있습니다.
- 사용하다 자식 추가 제거 된 파일을 저장소에 다시 추가하는 명령. 또는 사용 rm 이동 명령을 사용하여 저장소에서 파일을 제거하십시오.
- 마지막으로 git commit -m“메시지” 주석으로 변경 사항을 커밋하는 명령.
Q # 17) Broken Commit을 어떻게 고칠 것입니까?
대답: 끊어진 커밋을 수정하거나 마지막 커밋을 변경하려면 가장 편리한 방법은“ git commit -amend ' .
완전히 새로운 커밋을 만드는 대안으로 단계적 변경을 이전 커밋과 결합 할 수 있습니다. 이것은 가장 최근의 커밋을 수정 된 커밋으로 대체합니다.
[영상 출처 ]
이 명령을 통해 스냅 샷을 변경하지 않고 이전 커밋 메시지를 편집 할 수도 있습니다.
Q # 18) git instaweb의 사용은 무엇입니까?
대답: 웹 브라우저에서 작업중인 Git 저장소를 즉시 검색 할 수있는 스크립트입니다.
이 스크립트는 gitweb 및 웹 서버를 설정하여 로컬 저장소를 탐색합니다. 자동으로 웹 브라우저를 지시하고 인터페이스를 통해 로컬 저장소로 웹 서버를 실행합니다.
Q # 19) git is-tree가 무엇인가요?
대답: ‘git is-tree’ Blob 또는 트리의 SHA-1 값과 함께 모든 항목의 모드 및 이름을 구성하는 트리 개체를 나타냅니다.
문 # 20) 이미 푸시되어 공개 된 git 커밋을 되돌릴 수있는 방법이 있나요?
대답: 예, 잘못된 커밋을 수정하거나 되돌리려면 시나리오에 따라 사용할 수있는 두 가지 접근 방식이 있습니다.
그들은:
- 아주 명백한 방법은 잘못된 파일을 제거하거나 파일의 오류를 수정하는 새로운 커밋을 만드는 것입니다. 완료되면 원격 저장소로 푸시 할 수 있습니다.
- 또 다른 접근 방식은 이전 잘못된 커밋에서 수행 된 모든 변경 사항을 취소하는 새 커밋을 만드는 것입니다. 이것은 git revert 명령을 통해 수행 할 수 있습니다 –“ 자식 되돌리기 '
질문 # 21) git pull과 git fetch를 어떻게 구별합니까?
대답: 힘내 풀 명령은 중앙 저장소의 특정 분기에서 모든 새 커밋을 가져와 로컬 저장소의 대상 분기를 최신 상태로 만듭니다.
힘내 가져 오기 또한 동일한 것을 목표로하지만 기본 기능이 약간 다릅니다. git fetch를 수행하면 특정 브랜치의 모든 새 커밋이 중앙 저장소로 가져오고 이러한 변경 사항은 로컬 저장소의 새 브랜치에 저장됩니다. 이를 페치 브랜치라고합니다.
대상 브랜치에서 이러한 변경 사항을 보려면 다음을 수행해야합니다. 병합 자식 가져 오기 후. 대상 분기는 가져온 분기와 병합 한 후에 만 최신 변경 사항으로 업데이트됩니다.
따라서 git pull은 로컬 브랜치를 원격 버전으로 최신 상태로 유지하는 반면 git fetch는 로컬 브랜치 또는 작업 복사본을 직접 변경하지 않습니다. 심판 / 머리. Git 가져 오기를 사용하여 원격 추적 분기를 업데이트 할 수 있습니다. 심판 / 원격 //.
간단히 말해서 git pull은 git fetch와 git merge와 같습니다. .
Q # 22) Git에서 스테이징 영역 또는 인덱싱의 용도는 무엇입니까?
대답: Git의 관점에서 파일 변경 사항을 보관할 수있는 세 가지 영역 (작업 디렉터리, 스테이징 영역 및 저장소)이 있습니다.
먼저 컴퓨터 파일 시스템에 저장된 프로젝트의 작업 디렉토리를 변경합니다. 모든 변경 사항은 준비 영역이라는 중간 영역에 추가 할 때까지 여기에 남아 있습니다.
다음을 실행하여 변경 사항을 준비 할 수 있습니다. git add. 명령. 이 스테이징 영역은 다음 커밋의 미리보기를 제공하며 기본적으로 커밋을 미세 조정할 수 있습니다. 커밋 할 버전에 만족할 때까지 스테이징 영역에서 변경 사항을 추가하거나 제거 할 수 있습니다.
변경 사항을 확인하고 변경된 단계를 사인 오프하면 마지막으로 변경 사항을 커밋 할 수 있습니다. 커밋하면 로컬 저장소, 즉 .git / objects 디렉토리로 이동합니다.
Git GUI를 사용하는 경우 변경 사항을 준비하는 옵션이 표시됩니다. 아래 스크린 샷에서 sample.txt 파일은 준비되지 않은 변경 영역 아래에 있으며 이는 작업 디렉토리에 있음을 의미합니다.
파일을 선택하고 '스테이지 변경됨'을 클릭하면 스테이징 영역으로 이동됩니다. 예를 들면 , hello.txt 파일이 스테이지 변경 (커밋) 영역에 있습니다. 변경 사항을 확인한 다음 승인 후 커밋을 수행 할 수 있습니다.
스테이징은 색인화라고도합니다. git은이 세 영역에서 파일 변경 사항을 추적하기 위해 색인 파일을 유지하기 때문입니다. 준비된 파일은 현재 색인에 있습니다.
스테이징 영역에 변경 사항을 추가하면 색인의 정보가 업데이트됩니다. 커밋을 수행하면 실제로는 작업 디렉토리에있는 것이 아니라 커밋되는 인덱스에있는 것입니다. 사용할 수 있습니다 자식 상태 명령을 사용하여 색인의 내용을 확인하십시오.
Q # 23) Git Stash 란 무엇입니까?
대답: GIT 숨김은 작업 디렉토리 및 색인의 현재 상태를 캡처하고 향후 사용을 위해 스택에 보관합니다. 작업 디렉토리에서 커밋되지 않은 변경 사항 (스테이지 및 비 스테이징 모두)을 되돌리고 깨끗한 작업 트리를 반환합니다.
지금 다른 작업을 할 수 있으며 돌아 오면 이러한 변경 사항을 다시 적용 할 수 있습니다. 따라서 현재 변경 사항을 잃지 않고 한 컨텍스트에서 다른 컨텍스트로 전환하려면 숨김을 사용할 수 있습니다.
현재 커밋하거나 실행 취소하고 싶지 않은 코드 변경 도중에 작업 할 다른 작업이있는 빠른 컨텍스트 전환에 유용합니다. 사용할 명령은 git stash입니다.
Q # 24) Git Stash 드롭이란 무엇인가요?
대답: 특정 숨김이 더 이상 필요하지 않은 경우 다음을 실행하여 제거 할 수 있습니다. git stash drop 명령 . 저장소에서 한 번에 모든 보관함을 제거하려면 다음을 실행할 수 있습니다. git stash clear 명령 .
Q # 25) Git 숨김은 무엇입니까? Git Stash Pop과 어떻게 다른가요?
대답: 두 명령 모두 은닉 된 변경 사항을 다시 적용하고 남은 곳에서 작업을 시작하는 데 사용됩니다.
에 자식 숨김 적용 명령을 내리면 변경 사항이 작업 복사본에 다시 적용되고 보관함에 보관됩니다. 이 명령은 동일한 숨김 변경 사항을 여러 분기에 적용하려는 경우에 사용할 수 있습니다.
에 git stash pop 명령을 내리면 변경 사항이 숨김에서 제거되고 작업 복사본에 다시 적용됩니다.
Q # 26) git clone 명령의 사용은 무엇입니까?
대답: 그만큼 자식 클론 명령은 기존 중앙 Git 저장소의 사본을 로컬 머신에 생성합니다.
Q # 27) git config 명령은 언제 사용됩니까?
대답: 그만큼 자식 구성 명령은 Git 설치에 대한 구성 옵션을 설정하는 데 사용됩니다.
예를 들면 Git을 다운로드 한 후 아래 구성 명령을 사용하여 Git에서 각각 사용자 이름과 커밋 이메일 주소를 설정해야합니다.
$ git config –global user.name“”
$ git config –global user.email“”
따라서 주로 저장소의 동작, 사용자 정보 및 기본 설정과 같은 항목은이 명령을 사용하여 설정할 수 있습니다.
Q # 28) 브랜치가 이미 마스터에 병합되었는지 어떻게 확인할 수 있습니까?
대답:
아래 명령을 실행하여 분기 병합 상태를 알 수 있습니다.
- git branch –merged master : 이것은 master로 이름이 변경된 모든 브랜치를 나열합니다.
- git branch –merged : 이것은 HEAD에 병합 된 모든 분기를 나열합니다.
- git branch –no-merged : 아직 병합되지 않은 모든 분기가 나열됩니다.
기본적으로이 명령은 로컬 분기의 병합 상태 만 알려줍니다. 로컬 및 원격 분기 병합 상태에 대해 알고 싶다면 다음을 사용할 수 있습니다. -에 깃발. 원격 지점 만 확인하려면 다음을 사용할 수 있습니다. -아르 자형 깃발.
Q # 29) Git에서 후크는 무엇입니까?
대답: Git 후크는 커밋, 푸시, 업데이트 또는 수신과 같은 이벤트 전후에 Git이 실행하는 특정 스크립트입니다. 로컬 저장소의 .git 디렉토리에서 'hooks'폴더를 찾을 수 있습니다. 여기에서 사전 커밋, 사후 커밋, 사전 푸시, 사후 푸시에서 빌트인 스크립트를 찾을 수 있습니다.
이러한 스크립트는 이벤트 발생 전후에 로컬로 실행됩니다. 필요에 따라 이러한 스크립트를 수정할 수도 있으며 특정 이벤트가 발생하면 Git에서 스크립트를 실행합니다.
Q # 30) git fork의 용도는 무엇입니까? 포크는 복제와 어떻게 다릅니 까?
대답: 프로젝트를 포크한다는 것은 원래 저장소의 원격 서버 측 사본을 만드는 것을 의미합니다. 이 복사본의 이름을 바꾸고 원본 프로젝트에 영향을주지 않고이 주변에서 새 프로젝트를 시작할 수 있습니다. 포크는 Git의 핵심 개념이 아닙니다.
포크 작업은 Git 워크 플로에서 사용되며이 아이디어는 GitHub와 같은 무료 및 오픈 소스 소프트웨어에 더 오래 존재합니다. 일반적으로 프로젝트를 분기하면 상위 프로젝트에 다시 기여하는 경우는 거의 없습니다.
예를 들면 OpenBSD는 또 다른 Unix와 같은 오픈 소스 OS 인 NetBSD를 포크하여 개발 한 Unix와 같은 오픈 소스 운영 체제입니다.
그러나 포크에서는 포크 된 복사본과 원본 저장소간에 직접 연결이 존재합니다. 언제든지 pull 요청을 사용하여 원래 프로젝트에 다시 기여할 수 있습니다.
분기 된 복사본에서는 코드 및 파일과 같은 모든 주요 데이터가 원본 저장소에서 복사되지만 브랜치, 풀 요청 및 기타 기능은 복사되지 않습니다. Forking은 오픈 소스 협업을위한 이상적인 방법입니다.
복제는 기본적으로 Git 개념입니다. 클론은 원격 저장소의 로컬 복사본입니다. 리포지토리를 복제하면 전체 소스 리포지토리와 그 기록 및 브랜치가 로컬 시스템에 복사됩니다.
분기와 달리 복제 된 저장소와 원래 원격 저장소간에 직접 연결이 없습니다. 풀 요청을 수행하고 원래 프로젝트로 계속 돌아가려면 원래 저장소에 공동 작업자로 추가해야합니다.
복제 된 복사본에도 모든 커밋 기록이 있으므로 복제는 원본 저장소의 백업을 만드는 좋은 방법입니다.
Q # 31) 특정 Git 커밋에서 변경된 모든 파일을 어떻게 알 수 있습니까?
대답: 특정 커밋의 해시 값을 사용하면 아래 명령을 실행하여 특정 커밋에서 변경된 파일 목록을 가져올 수 있습니다.
자식 diff-tree -r {해시}
수정 된 모든 파일과 추가 된 파일이 나열됩니다. -r 플래그는 루트 디렉토리 이름에서만 파일을 축소하는 대신 경로와 함께 개별 파일을 나열하는 데 사용됩니다.
아래 명령을 사용할 수도 있습니다.
git diff-tree –no-commit-id –name-only -r {hash}
–no-commit-id는 출력에 표시되도록 커밋 해시 번호를 다시 훈련시킵니다. 반면에 -name은 파일 경로를 제외하고 출력에 파일 이름 만 제공합니다.
문 # 32) git checkout [branch name]과 git checkout -b [branch name]의 차이점은 무엇입니까?
대답: 명령 git checkout [지점 이름] 한 지점에서 다른 지점으로 전환됩니다.
명령 git checkout -b [지점 이름] 새 분기를 만들고 전환합니다.
Q # 33) SubGit이 무엇인가요?
대답: SubGit은 SVN에서 Git으로 마이그레이션하는 데 사용되는 도구입니다. TMate라는 회사에서 개발했습니다. SVN 저장소를 Git으로 변환하고 두 시스템에서 동시에 작업 할 수 있습니다. SVN을 Git과 자동 동기화합니다.
그래프 데이터 구조 C ++
[영상 출처 ]
이 도구를 사용하여 SVN || Git 미러를 만들 수 있습니다. Git 서버에 SubGit이 설치되어 있어야합니다. SVN 개정, 브랜치 및 태그를 포함하여 원격 SVN 저장소의 모든 설정을 감지하고이를 Git 커밋으로 변환합니다.
또한 병합 데이터 추적을 포함하여 기록을 보존합니다.
Q # 34) Git에서 삭제 된 브랜치를 복구 할 수 있나요?
대답: 그래 넌 할수있어. 삭제 된 브랜치를 복구하려면 머리 꼭대기에서 SHA를 알아야합니다. SHA 또는 해시는 Git이 모든 작업에서 생성하는 고유 ID입니다.
분기를 삭제하면 터미널에 SHA가 표시됩니다.
삭제 된 분기 (이전)
아래 명령을 사용하여 삭제 된 분기를 복구 할 수 있습니다.
git checkout -b
브랜치의 끝에서 커밋에 대한 SHA를 모르는 경우 먼저 퇴각하다 명령을 사용하여 SHA 값을 확인한 다음 위의 체크 아웃 명령을 적용하여 분기를 복원하십시오.
Q # 35) 무엇입니까 git diff 명령? 어떻게 다른가요? 자식 상태?
대답: 힘내 차이 두 개의 임의 커밋 간의 차이점, 작업 트리와 커밋 간의 변경 사항, 작업 트리와 인덱스 간의 변경 사항, 두 파일 간의 변경 사항, 인덱스와 트리 간의 변경 사항 등을 표시하기 위해 실행할 수있는 다용도 명령입니다.
그만큼 자식 상태 명령은 저장소를 검사하는 데 사용됩니다. 작업 디렉토리 및 스테이징 영역의 상태를 보여줍니다. 준비된 파일과 아직 준비되지 않은 파일과 추적되지 않은 파일이 나열됩니다.
Q # 36) Commit 객체에는 무엇이 포함됩니까?
대답: 커밋 객체는 최상위 트리 객체 해시, 부모 커밋 해시 (있는 경우), 작성자 및 커미터 정보, 커밋 날짜 및 커밋 메시지를 포함합니다.
이것을 통해 볼 수 있습니다 자식 로그 명령.
예:
[영상 출처 ]
Q # 37) git cherry-pick이란? git cherry-pick을 사용할 수있는 시나리오는 무엇입니까?
대답: Git 체리 픽 하나 이상의 기존 커밋에 의해 도입 된 변경 사항을 적용하는 강력한 명령입니다. 한 브랜치에서 커밋을 선택하여 다른 브랜치에 적용 할 수 있습니다.
git cherry-pick commitSha 체리 따기에 사용되는 명령입니다. commitSha는 커밋 참조입니다.
이 명령은 변경 사항을 취소하는 데 사용할 수 있습니다. 예를 들어 실수로 잘못된 브랜치에 커밋 한 경우 올바른 브랜치를 확인하고 해당 브랜치가 속해야하는 위치로 커밋을 선택할 수 있습니다.
팀 공동 작업에도 사용할 수 있습니다. 제품의 두 구성 요소간에 동일한 코드를 공유해야하는 시나리오가있을 수 있습니다. 이 경우 한 개발자가 이미 해당 코드를 작성했다면 다른 개발자도 같은 코드를 선택할 수 있습니다.
체리 선택은 패치 커밋을 마스터 브랜치로 직접 체리 선택하여 가능한 한 빨리 문제를 해결할 수있는 버그 핫픽스에도 유용합니다.
Q # 38)‘git reset’의 용도는 무엇인가요? 이 명령의 기본 모드는 무엇입니까?
대답: 힘내 재설정 Git 리포지토리의 상태에 대한 로컬 변경을 취소하는 강력한 명령입니다. 이 명령은 현재 HEAD를 지정된 단계로 재설정합니다.
인덱스와 작업 디렉토리를 모두 마지막 커밋 상태로 재설정합니다. 힘내 재설정에는 소프트, 하드 및 혼합의 세 가지 모드가 있습니다. 기본 작동 모드는 혼합되어 있습니다.
Q # 39)‘HEAD’,‘working tree’,‘index’의 차이점은 무엇인가요?
대답: 작업 트리 또는 작업 공간은 현재 작업중인 소스 파일이 포함 된 디렉토리입니다.
인덱스는 커밋이 준비되는 Git의 스테이징 영역입니다. 커밋과 작업 트리 사이에 있습니다. Git 인덱스는 현재 분기의 모든 파일, 해당 이름, sha1 체크섬 및 타임 스탬프를 나열하는 하나의 큰 바이너리 파일입니다.
이 파일은 /.git/index에 있습니다. HEAD는 현재 체크 아웃 분기의 최신 커밋에 대한 참조 또는 포인터입니다.
Q # 40) 리베이스와 병합의 차이점은 무엇입니까? 언제 리베이스하고 언제 병합해야합니까?
대답: rebase 및 merge 명령은 모두 한 분기에서 다른 분기로 변경 사항을 통합하는 데 사용되지만 다른 방식으로 사용됩니다.
아래 두 이미지에서 볼 수 있듯이 커밋이 있다고 가정합니다 (이는 병합 / 리베이스 이전 임). 병합 후 커밋 조합으로 결과를 얻을 수 있습니다. 두 브랜치의 히스토리를 결합하고 기능 브랜치에 새로운 '병합 커밋'을 생성합니다.
반면에 rebase는 전체 기능 분기를 마스터 분기의 끝에서 시작하도록 이동합니다.
[영상 출처 ]
커밋은 다음과 같습니다.
리베이스는 일관되지 않은 리포지토리를 생성하므로 퍼블릭 브랜치에는 권장되지 않습니다. 그러나 리베이스는 비공개 지점 / 개별 개발자에게 좋은 옵션입니다. 기능별 분기 모드에는 적합하지 않습니다. 그러나 개발자 당 분기 모델이있는 경우 리베이스는 해가되지 않습니다.
또한 리베이스는 파괴적인 작업이므로 개발 팀은이를 올바르게 적용 할 수있을만큼 숙련되어야합니다. 그렇지 않으면 커밋 된 작업이 손실 될 수 있습니다.
또한 병합을 되 돌리는 것이 리베이스를 되 돌리는 것보다 쉽습니다. 따라서 되돌리기가 필요할 수 있다는 것을 알고 있다면 병합을 사용해야합니다.
병합은 기록을 그대로 유지하는 반면 rebase는 기록을 다시 작성합니다. 따라서 발생한 기록을 완전히 보려면 merge를 사용해야합니다.
Q # 41) 리베이스 구문은 무엇입니까?
대답: rebase 명령의 구문은 다음과 같습니다. git rebase [new-commit]
Q # 42) 실제로 로컬 파일 시스템에서 파일을 제거하지 않고 Git에서 파일을 제거하려면 어떻게해야합니까?
대답: 이를 위해 '캐시 됨'옵션을 사용할 수 있습니다.
git rm -rf –cached $ FILES
이 명령은 디스크에서 파일을 삭제하지 않고 저장소에서 파일을 제거합니다.
Q # 43) Git의 일반적인 분기 패턴은 무엇입니까?
대답: 일반적인 분기 패턴은 git-flow를 기반으로합니다. 마스터와 개발이라는 두 가지 주요 분기가 있습니다.
- 마스터 브랜치는 프로덕션 코드를 포함합니다. 모든 개발 코드는 어느 시점에서 마스터 브랜치에 병합됩니다.
- 개발 브랜치는 사전 프로덕션 코드를 포함합니다. 기능이 완료되면 일반적으로 CI / CD 파이프 라인을 통해 마스터 브랜치에 병합됩니다.
이 모델에는 또한 개발주기 동안 활용되는 몇 가지 지원 분기가 있습니다.
- 기능 분기 / 주제 분기 : 향후 릴리스의 새로운 기능을 개발하는 데 사용됩니다. 개발 분기에서 분기 할 수 있으며 개발 분기로 다시 병합해야합니다. 일반적으로 이러한 분기는 원본이 아닌 개발자 저장소에만 존재합니다.
- 핫픽스 분기 : 라이브 프로덕션 버전에서 중요한 버그를 즉시 수정해야 할 때 계획되지 않은 프로덕션 릴리스에 사용됩니다. 마스터에서 분기 할 수 있으며 개발 및 마스터로 다시 병합되어야합니다.
- 릴리스 분기 : 새 프로덕션 릴리스를 준비하는 데 사용됩니다. 릴리스 분기를 사용하면 사소한 버그 수정을 수행하고 릴리스를위한 메타 데이터를 준비 할 수 있습니다. 그들은 개발에서 분기 될 수 있으며 마스터로 다시 병합되어 개발되어야합니다.
결론
이 튜토리얼의 Git 인터뷰에서 일반적으로 묻는 중요한 질문을 살펴 보았습니다.
이렇게하면 다가오는 인터뷰를 준비하는 데 도움이 될뿐만 아니라 git 개념도 명확 해집니다.
인터뷰를 위해 최선을 다하십시오!