hyperskill - Cherry picking and checkout options 영어 원문
거대한 프로젝트에서 작업 하고 있을 때,
다양한 브랜치들을 관리하거나, repository에서 변경사항 및 커밋을 관리하는 것은 어려울 수 있습니다.
하나의 브랜치에서 또 다른 브랜치로 버그 수정 사항을 전송하거나,
커밋에서 새로운 브랜치들을 생성하는 것과 같은 목적을 위해서,
Git은 다양한 기능을 제공하는데,
cherry-pick을 할 수 있는 능력이나, 변경사항을 점검(checkout) 할 수 있는 능력을 포함합니다.
당신은 이러한 두 개의 명령어들을 탐색 할 것이고, 어떻게 효과적으로 사용 할 수 있는지 탐색 할 겁니다.
Cherry-picking -- 멀리 떨어진 브랜치에 변경사항 적용하기
Cherry-picking 은 Git의 기능인데,
이는 개발자들이 지정한 commit을 하나의 브랜치에서 또 다른 브랜치로 적용 할 수 있게 해 줍니다.
이는 당신이 개별적인 변경 사항을 선택 할 수 있게 해 주며,
선택 한 변경사항을 전체적인 branch 기록을 병합하지 않고, 다른 브랜치로 적용 할 수 있게 해 줍니다.
commit을 cherry-pick 하기 위해서,
commit의 해시, 혹은 참조를 식별할 필요가 있으며, 이 명령어를 사용해야 합니다.
git cherry-pick <commit-hash>
또한 시작과 끝 해시를 지정함으로서 commit의 영역을 cherry-pick 할 수 있습니다.
git cherry-pick <start-commit-hash> ... <end-commit-hash>
Git은 선택 된 커밋에서 만들 어 진 변경사항을 현재 브랜치로 적용 할 것이며,
만약 필요하다면, 새로운 커밋들을 생성해야 합니다.
참고 할 것은,
cherry-picking은 단지 선택 된 커밋들에 도입 된 변경사항들만 복사하며,
커밋 기록과 어떠 한 관련된 메타데이터들이 전송되지 않습니다.
gitGraph
checkout main
commit id:"A"
branch feature
commit id:"X"
checkout main
commit id:"B"
checkout feature
commit id:"Y"
checkout main
commit id:"C"
branch hotfix
commit id:"Q"
commit id:"R"
checkout feature
commit id:"Z"
commit id:"r"
checkout main
commit id:"D"
checkout hotfix
commit id: "r'"
checkout feature
cherry-pick id: "r'"
hotfix
브랜치의 r
커밋을 feature
브랜치의 r
로 적용 하기 위해 cherry-pick
을 사용 해 봅시다.
첫 번째로, feature
브랜치로 이동 해 줍니다.
git switch feature
or
git checkout feature
그리고 나서 밑의 명령어를 사용합니다:
git cherry-pick r
Git은 hotfix
브랜치의 r
커밋을 feature
브랜치에 커밋 합니다.
Uses of cherry-picking - cherry-pick 의 사용처
Cherry-picking은 특히 밑의 경우들에 유용합니다 :
1. Bug fixes - 버그 고칠때
Cherry-picking은 전체적인 브랜치를 병합 (merge) 하지 않고도,
버그가 고쳐진 commit을 하나의 브랜치에서 또 다른 브랜치로 적용하는 것을 가능하게 해 줍니다.
이는 특히 당신이 관련 없는 변경사항을 도입하지 않고도 안정적인 branch에서 중요한 이슈를 빠르게 다루게 해 줍니다.
2. Feature integration - 기능 인테그레이션(통합 or 완성)
당신이 feature
브랜치에서 작업하고 있고, 여러 개의 commit을 만들었다고 가정 해 봅시다.
당신은 오로지 관련이 있는 commit들만 main
브랜치에 커밋 할 수 있고,
feature
브랜치를 계속 독립적으로 유지 할 수 있습니다.
이러한 선택적 통합은 commit 기록을 깔끔하게 유지시키게 도와주고,
불필요한 변경사항을 별합하는 것을 피하게 도와줍니다.
3. Backporting - 백포팅 (뒤로 업데이트)
Cherry-picking은 새로운 브랜치에서 오래 된 브랜치로 변경사항들을 backport 하게 허용 해 줍니다.
예를 들어, 당신의 소프트웨어에서 새로운 버전에 버그를 고쳤다면,
cherry-pick
을 사용하여 오래 된 버전의 브랜치에서 버그가 고쳐졌는지 확인하기 위해,
오래 된 브랜치에서 commit 합니다.
4. Experimentation - 테스팅, 실험
Cherry-picking은 선택적으로 서로 다른 브랜치에 변경사항을 테스트하듯이 적용하여
문제가 없는지 테스팅 하게 허용 해 줍니다.
당신은 cherry-pick
을 사용하여 테스팅 하기 위한 브랜치로 커밋을 할 수 있으며,
주요 코드베이스에 변경사항들을 완전히 통합 하기 전에,
지정 된 변경사항들이 영향을 끼치는지 평가 하게 해 줍니다.
하지만, cherry-picking에 한 가지 약점이 있습니다.
이는 중복된 커밋을 일으킬 수 있다는 겁니다.
이러한 사유 때문에,
cherry-picking은 모든 시나리오에서 최고의 도구는 아닐 것이며,
종종 전통적인 기존의 병합(merge) 를 사용하는 것이 더 이득입니다.
Checkout - Git 하위 명령어 Checkout
Checkout은 다목적의 Git 명령어인데,
이는 branch, commit, file 에 관련된 다양한 연산을 수행하게 해 줍니다.
이는 다양한 목적에 사용되며,
다른 브랜치로 스위칭하거나, 새로운 브랜치를 생성하거나, 파일에 대한 변경사항을 폐기하는 목적을 포함합니다.
cherry-picking이 지정 된 commit들을 다루고 있는 동안,
checkout은 현재 그 순간 주어진 전체적인 브랜치, 혹은 파일의 상태에 초점을 맞춥니다.
checkout 명령어는 지정된 브랜치 혹은 커밋과 매치하도록 작업 디렉토리에서 파일을 수정하는 명령어입니다.
checkout 옵션은 밑의 경우에 유용합니다 :
1. Branch switching - 브랜치 스위칭
git checkout
명령어는 주로 Git에서 브랜치 간의 스위칭에 사용됩니다.
이는 타겟 브랜치의 마지막 커밋을 반영하여 당신의 작업 디렉토리를 업데이트하며,
해당 타겟 브랜치에서 계속 작업 할 수 있게 허용 해 줍니다.
2. Inspecting specific commits - 특정한 커밋들 검사하기
git checkout
와 함께, 당신은 특정한 커밋의 repository의 상태를 탐색 할 수 있습니다.
이는 이전에 만들어 진 변경사항을 리뷰하는 데 유용하며,
서로 다른 버전을 비교하거나, 버그 소스를 식별하거나, 되돌아가는 데 유용합니다.
3. File-level recovery - 파일 수준에서 복구하기
만약 당신이 우연히 중요한 파일을 수정하거나 삭제 했다면,
당신은 git checkout
명령어를 사용하여 해당 파일이 있는 얼리 버전 커밋을 지정하여 검색 할 수 있습니다.
이 기능은 안정망에서 가동하며, 중요한 코드를 영구적으로 손실 하는 것을 방지합니다.
4. Creating new branches - 새로운 브랜치 생성하기
git checkout
과 -b
옵션을 같이 사용하면,
이미 존재하는 커밋으로부터 새로운 브랜치를 생성 할 수 있게 해 줍니다.
이는 당신이 특정한 지점의 기록에서 분기하고 있을 때 유용합니다.
예를 들어, hotfix
브랜치를 생성하거나, 새로운 기능을 테스팅 하기 위해 새로운 브랜치를 만들 때 좋습니다.
위에 있는 이 모든 것들을 사용해서,
당신은 local 변경사항을 폐기 할 수 있고,
이전 버전으로 브랜치를 복구 할 수 있으며,
remote branches (원격 저장소 브랜치) 나 tages (태그) 들을 점검 할 수 있으며,
브랜치의 약칭 이름을 사용하여 점검 할 수도 있습니다.
하지만 지금으로서, 몇 가지 사용법들만 자세히 봅시다.
Switching branches - 브랜치 이동하기(스위칭하기)
브랜치를 이동하는데 있어 평범한 방법은 git checkout
명령어를 사용하는 겁니다.
repository 내에서 브랜치 사이를 탐색하기 위해서,
git checkout
명령어는 작업 디렉토리를 업데이트하고,
HEAD 포인터는 타켓 브랜치의 상태를 반영합니다.
HEAD 는 Git이 현재 가동중인 브랜치에서 마지막 커밋을 계속 추적하는 포인터입니다.
한 브랜치에서 다른 브랜치로 스위칭하기 위해서,
git checkout
명령어와 이동 할 브랜치 이름을 작성하면 됩니다 :
git checkout <branch-name>
당신이 현재 master
브랜치에 있으며,
치명적인 이슈를 빠르게 고치기 위해 hotfix
브랜치로 스위칭 하고 싶다고 가정 해 봅시다.
그렇다면, git checkout hotfix
로 브랜치를 스위칭 할 수 있습니다.
Checking out files - 파일 점검하기
지정 한 커밋으로부터 이전 버전의 파일들을 검색하기 위해,
git checkout
을 사용하여 파일을 점검 할 수 있습니다.
이는 당신이 전체 repository에 영향을 끼치지 않고,
이전 버전에서의 특정 파일을 복구하거나, 리뷰 하고 싶을 때 유용할 수 있습니다.
파일을 checkout 하는데 있어 구문은 :
git checkout <commit-hash> -- <file-path>
위에서, commit-hash는 어떤 커밋에서 파일을 가져와야 하는지 결정하는 데 도움을 줍니다.
당신이 커밋 해시 중 ca82a6dff817ec66f44342007202690a93763949 이라는 해시에서,
script.js
파일을 점검하고 싶다고 가정 해 봅시다.
그렇다면, 밑의 명령어를 사용 할 수 있습니다 :
git checkout ca82a6dff817ec66f44342007202690a93763949 -- src/buttons/script.js
특정 파일의 경로를 포함해야 한다는 것을 기억하세요.
위의 명령어를 구동하면, 현재 버전의 script.js
가 해시 커밋 버전의 script.js
로 대체됩니다.
Creating new branches from commits - 커밋으로부터 새로운 브랜치 생성하기
Git은
이미 있는 커밋에서 분기하거나,
새로운 기능을 작업하기 위해 분기하거나,
버그를 고치거나, 실험을 위해 분기 할 수 있게 해 줍니다.
git checkout
명령어와 -b
플래그를 결합하여,
새로운 브랜치를 생성하는 과정을 단순화 합니다.
밑의 명령어를 사용하여 새로운 브랜치를 생성 할 수 있습니다 :
git checkout -b <new-branch-name> <starting-point>
예를 들어, 이미 존재하는 master
브랜치로부터 feature-branch
라는 새로운 브랜치를 생성하기 위해서,
밑의 명령어를 실행하세요 :
git checkout -b feature-branch master
이 명령어는 master
브랜치에서 시작하는 새로운 브랜치 feature-branch
를 생성합니다.
그리고 나서 Git은 자동적으로 새로이 생성된 브랜치로 스위칭합니다. (master --> feature-branch)
Conclusion - 결론
Cherry-picking과 checkout 옵션은,
개발자들이 효과적으로 그들의 소스 코드를 관리하게 도와줄 수 있는 Git의 유용한 도구입니다.
cherry-picking과 checkout 옵션들을 효과적으로 활용함으로서,
개발자들은 세밀하게 변경사항 통합을 통제하며,
브랜치들을 관리하며,
Git repository의 기록을 탐색합니다.
몇 가지 중요한 명령어들을 리뷰 해보겠습니다 :
git cherry-pick comit-hash
명령어는 지정된
commit 의 변경사항을 현재 브랜치에 적용 할 수 있게 해 줍니다.git checkout branch-name
명령어는 브랜치들 사이에서 스위칭 할 수 있게 해 줍니다.git checkout commit-hash -- file-path
명령어는 지정된 커밋들로부터
이전 버전의 파일을 탐색하게 도와 줄 수 있습니다.git checkout
과-b
옵션 플래그를 결합하여 이미 존재하는 브랜치를 기반으로 하여
새로운 브랜치를 생성 할 수 있게 해 줍니다.
이러한 기능들은 지속적으로 구조화되도록 유지하게 기여하며,
버전 컨트롤 워크플로우를 조직합니다.
이러한 기능들을 효과적으로 사용함으로서,
개발자들은 더 효과적으로 일 할 수 있으며, Git의 효용성을 최대로 사용하도록 만들어 줍니다.
words to remember
introduced by : 도입 된, 소개 된
integration : 통합, 완성
experimental : 테스트, 실험
dedicated : 헌신적인, 일신을 바친, 오로지 특정한 목적을 위한
address : 다루다, 제기하다
assess : 평가하다, 사정하다, 할당하다
drawback : 약점, 장애, 공제
versatile : 변하기 쉬운, 다재한, 다목적으로 쓰이는
inspecting : 검사, 시찰하다, 검열하다, 검사하다
regression : 회구, 되돌아옴
permanent : 영구적인, 영속하는
abbreviated : 약칭, 단축된
branch, branch off : 분기하다
find-grained : 세밀한, 결이 가는, 결이 고운, 미립자로 된
'Hyperskill - 컴퓨터 CS 및 영어 독해 > Introduction to Git' 카테고리의 다른 글
SSH - SSH (Secure Shell) 기초 (1) | 2024.06.11 |
---|---|
IP - IP 프로토콜의 기초 (1) | 2024.06.10 |
Conventional Commits and commitlint - 관례적인 커밋 메세지와 이를 돕는 commitlint (1) | 2024.06.07 |
Git diff - Git diff 명령어 및 사용법 (1) | 2024.06.05 |
Git undo/reset - Git 취소 리셋 돌아가기 (1) | 2024.06.04 |