빨리 망할 놈의 학습을 배울 (41 개) 질문과 답변

1. 당신의 마음에 드는 망할 놈의 명령은 무엇입니까

개인적으로 같은 git add -p.이러한 변화는 내장 된 명령 줄 프로그램 인 "패치 모드"를 증가시킵니다. 그것은 각각의 변경을 반복하고이를 실행 여부 확인을 부탁드립니다.

이 명령은 우리가 느리게하고 파일을 체크 변화를 강제로. 개발자로서, 우리는 종종 가끔 제출 돌진, 나는 나 자신을 너무 자주, 실행을 완료 git add .에만도 제출 디버깅 코드가 올라가 찾을 수 있습니다.

2. 왜 직접 명령 자식을 사용하는 것을 선호합니까

개발자로서, 우리는 종종 나쁜되지 않은 다른 일을 수행하기 위해 다른 명령을 사용하여 git작업을 수행하는 명령을.

또한, git명령은 매우 짧은 배우고 알아 보려면 명령을 사용하여 매우 쉽게 git간접적 개발 프로세스를 개선 흐름을.

사용 방법 3. stage명령을

stageadd .내장 된 별명.

4 분기 및 변경 저장하는 방법 checkout다른 지점에가

따라서, 당신이 사용할 수있는 git stash변경하거나 WIP에게 임시 저장을 제출, 목적은 수정되지 않은 전에 환경을 가지고있다. 개인적으로, 나는 WIP 대신 제출 사용하는 것을 선호 stash가 쉽게 참조 및 공유를하기 때문에.

진행 중 WIP는 = 일

당신이 그것을 저장할뿐만 아니라 병합 코드의 개발을 방지하려는 코드에 R & D는 개발 WIP의 지점을 만듭니다

WIP MR

WIP MR의 의미는 작품의 과정에서 합병 요청, 우리는하지 않도록해야 MR 기술의 GitLab가 준비되기 전에 병합 것입니다. 만 추가해야 WIP:당신이하지 않는 MR의 제목의 시작 부분에,이 통합되지 않습니다 WIP:삭제합니다.

자식 마리화나를 사용하기 (5)

클래스가 중복 된 것을 발견, 미래의 코드를 볼 필요하고 저장하고 싶지만 제출 더러운를 추가하지 않으 대해이 걱정 삭제합니다. 그럼 당신은 고려할 수 있습니다 git stash.

6. 자식 명령을 사용하는 방법

어떤 명령의 사용 , 옵션--help , 예를 들면 git stash --help.

7. "자식 흐름"는 무엇입니까?

너무 많은 지점이 때,이 어떻게 효과적이고 신속하게 관리 할 때 망할 놈의 흐름 모델을 프로젝트 자료를 분기 정의, 관리가 해결 대규모 프로젝트의 예약 된 릴리스주기는 강력한 프레임 워크 프로세스 표준 빈센트 Driessen에 의해 제안 된 자식 작업입니다 제공하고있다 지점.

8. GitHub의 흐름은 무엇입니까?

정의에 의해 GitHub의 흐름은, GitHub의 워크 플로를 존중. (워크 플로우가 GitHub의에서 사용할 수 있나요 이해하지), 기본적으로, GitHub의 흐름은 인 master/feature워크 플로 브랜드 이름의 지점.

그것이 가져 오는 프로세스 자동화 가능성에 GitHub의 흐름의 핵심 강점은, 정말 자신의 가치를 재생, 다른 프로세스는 달성 할 수없는 검사 과정을 수행 크게 육체 노동의 개발 팀을 단순화 할 수 있습니다.

당신은 전략을 분기의 9 어떤 종류를 선호합니까?

대부분의 프로젝트는 힘내 "망할 놈의 흐름"입니다. 이 프로젝트 만 몇이 전략이 필요, 그것은 보통 소프트웨어의 버전 때문이다.

master/feature필요하면 그냥 시작 특히, 쉽게 관리 할 전략을 분기의 "전환 git flow"매우 쉽습니다.

10. 자식 개방 명령 Zuosa 사용

이것은이 NPM 패키지로 사용할 수 있으며, 별도의 명령입니다.

11. 파일을 추적 또는 수정되지 않고 계속 작업 지점에 표시됩니다 다른 지점에 추가되면, 어떻게 지점을 재설정

이것은 보통 "작업 색인"에 지점을 전환 부정의 결과이다.

아니 내장 방법이 문제를 해결하려면 이눔 없습니다. 일반적으로 프롬프트 "보장함으로써있다 status"표시를하며 변경 등의 각 지점에서 실행 git status명령이 상황을 피하기 위해 등을들 수있다. 새 분기에 할 수 있도록 이러한 습관은 우리는 가능한 한 빨리이 문제를 찾을 수 stash또는 commit변경.

12. 어떻게 지점 이름을 바꾸려면?

git branch -m current-branch-name new-branch-name
复制代码

13. 체리 픽

git cherry-pick [reference] 이 명령의 재 응용 프로그램입니다, 그래서는 SHA 제출 변경됩니다 기억하십시오.

14. 만약 지점 (예를 들어, 회복 HEAD~3)을 반환하는지 여부 HEAD(예 : 마지막 업데이트 복구 등)

이 경우, 실행 git reset --hard HEAD~1취소를 즉시 (즉이되어 복원을 제출 HEAD제출).

15. 때 사용 git pull하고 git fetch?

git pull다운로드는 현재 지점에 제출됩니다. 기억 git pull사실 fetch, 그리고 merge명령의 조합.

git fetch원격에서 최신 따옴표를 가져옵니다.

좋은 비유는 팟 캐스트 플레이어 나 전자 메일 클라이언트입니다. 당신은 최신 팟 캐스트 또는 전자 메일 (검색 할 수 있습니다 fetch)하지만, 사실 아직 로컬 다운로드 팟 캐스트 또는 전자 메일 첨부 파일 ( pull).

16. 왜 사용하는 것이 필요한 경우가 --force변경 내용을 커밋 강제로

rebase명령을 다시 제출 될 수있다, 그것은 변경 SHA1해시를. 그렇다면, 지역의 원격 지사를 가지고있는 역사는 않습니다 더 이상 일치 커밋하지 않습니다.

이 경우, push그것은 거부됩니다. 이 거부 만 할 때 사용하는 것이 좋습니다 git push --force. 이렇게하면 원격 제출을 포함하는 지역의 역사와 역사를 커밋합니다. 다시보고 그것에 대해 생각할 수 있도록, 사용하려는 이유에 대해 생각한다 --force.

17. 당신은 다음 분기를 보내 분기와 여러 가지를 병합 사용할 수 master있습니까?

물론, 대부분의 자식 작업 창고에, 지점은 일반적으로 다른 지점의 수의 변경을 축적 가지 결국 주요 지점에 병합됩니다.

18. 그것은 만드는 아주 오래된 지점에서해야 rebase괜찮아?

대안이 없다하지 않는 한.

워크 플로우에 따라 세 가지 주요 지점에 병합 할 수 있습니다.

새 분기를해야하는 경우, 내가 선호합니다 rebase. 그것은 단지 더 명확 역사적 기록을 변경되지 않은 다른 지점 또는 커밋 병합 제공합니다.

그러나 항상 가능하지만, 그러나 사용은 rebase각 응용 프로그램을 다시 제출해야하기 때문에, 고통스러운 과정이 될 수 있습니다. 이것은 여러 충돌이 발생할 수 있습니다. 그렇다면, 나는 보통 사용 rebase --abort및 사용 merge에 한번에 충돌.

(19)의 사용 rebase -i시간, squashfixup차이점은 무엇입니까

squash그리고 두 픽스 조합을 제출했다. squash일시 중단 rebase메시지가 우리의 제출을 조정할 수 있도록 프로세스를. fixup처음 제출에서 자동으로 메시지를 표시합니다.

사용하는 경우 일반적으로 20, master기능 지점의 재 설립을 각 제출 충돌을 해결해야합니까?

예. 변경 사항이 각각 제출되기 때문에 rebase재 신청 기간, 그래서 그들은 충돌의 경우에는 해결해야합니다.

이것은 그 전에 갈등의 제출에 제출되었습니다 것을 의미합니다, 그것을 제대로 해결되지 않을 경우, 다음 많은 갈등의 다음 제출가 발생할 수 있습니다. 이를 제한하려면, 내가 자주 사용 rebase -i쉽게 사용할 수 있도록, 제출 역사를 압축 할 수 있습니다.

제출 사이의 갈등의 많은 여전히 존재하는 경우 사용할 수 있습니다 merge.

21. 이전 마스터와 합병, 내 지점을 업데이트 할 필요가있다

워크 플로우에 따라 세 가지 주요 지점에 병합 할 수 있습니다. 워크 플로우는 "사용하는 경우 fast-forward"병합, 합병에 지사 전에 업데이트 할 필요가있다.

빨리 감기 제출 힘내

멀티 공동 개발, 힘내 자주 용어를 포함하는 경고 메시지를 볼 사용 : fast forward이 무엇인지 정의인가?

단순히 원격 중앙 창고 코드를 제출하는 것은 시간 순서에 있어야합니다.

예를 들어, A중앙 창고의 코드를 얻을, 파일이 f수정되었습니다. 그런 다음 push중앙 창고.

B에서 A이전에 중앙 창고 코드를 가지고 A push성공 후도를 f파일이 수정되었습니다. 이 시간은 B또한 실행 push명령 푸시 코드를.

다음과 유사한 메시지가 나타납니다 :

chenshu@sloop2:~/work/189/appengine$ git pushTo 
ssh://[email protected]:29418/appengine.git ! [rejected]       
master -> master (non-fast-forward)error: failed to push some refs to 
'ssh://[email protected]:29418/appengine.git'To prevent you from losing 
history, non-fast-forward updates were rejectedMerge the remote changes (e.g. 'git 
pull') before pushing again.  See the'Note about fast-forwards' section of 'git push --help' for details.
复制代码

업데이트 당신을 생각 나게하는 비 빨리 감기 방법은 우리가 중앙 창고를 시작해야, 거부 pull, 최신 버전으로 merge다음 push.

fast forward그 사람들이 공동 개발을 보장하기 위해, 다른 사람의 코드를 포함하는 강제하지 않도록합니다. 사용하지 않으려 non fast forward코드를 제출하는 방법.

(22) 시각화 도구를 사용하기 위해 필요한이 GitKraken을

내 개발 프로세스 같은 개선 명령을 사용하는 것과 같이, 나를 완전히 관리 변경을 제어 할 수 있기 때문에 나는 명령 자식 방법을 사용하는 것을 선호합니다.

물론, (예 : 관리 지점 및 파일보기 차이 등) 일부 시각화는 GUI에서 항상 낫다. 나는 개인적으로 병합 프로세스가 충분 동안 브라우저에서 볼 수 있다고 생각합니다.

제출이 추진되면 23, 당신은 할 수 --amend그것을 수정?

수있는 git commit –amend마지막의 내용이 커밋 수정하거나, 당신은 커밋 수정할 수 있습니다.

당신이 당길 필요가있을 때 (24) 반복적 인 내용을함으로써, 작은 기능을 완료 pull request후 요청을하거나 풀 콘텐츠의 반복을 수행 한 pull request요청

하자 평소 연습은 그 풀의 내용의 반복의 완료 후 pull request. 당신이해야 할, 작업에 오랜 시간을 보낼 경우, 병합 기능이 도움이 될 수 있습니다. 이는 분기 의존성 또는 오래된 방지, 그래서는 그리기 완료 요청을 하거나, 모두가 이루어 끌어 요청 은 변경하려는 유형에 따라 달라집니다.

으로 분기에 25 master전에, 당신은 만들 필요가 release분기합니까?

그것은 크게 기업의 배포 프로세스에 따라 달라집니다. 생성 release지점은 함께 그룹화하고 전체 테스트하기 전에 주요 지점에 병합 작업의 여러 가지 유용합니다.

소스 지점은 독립을 유지하고 병합하지 때문에, 따라서 최종 병합에 더 큰 유연성을 가지고있다.

26. 어떻게 마스터로부터 제출의 수를 구하는?의 내가 마지막 커밋,하지만 한 번 수행하고 싶지 않은 가정 해 봅시다 rebase.

가정하면 master분기는 우리의 주요 지점, 우리는 선택적으로 미래의 충돌을 야기 할 수있는, 역사에서 추출 제출하고 싶지 않아요.

우리는 원하는 merge또는 rebase모든 지점을 변경합니다. 제출 선택 추출 밖에 주요 지점에서 지점, 그것은 사용할 수 있습니다 git cherry-pick.

제 26 항에있어서, 상기 터미널 색상 힘내 구성하는 방법

기본적으로 자식 검은 색과 흰색입니다.

git config --global color.status auto 
git config --global color.diff auto 
git config --global color.branch auto 
git config --global color.interactive auto
复制代码

일단 구성되면, 색상이 있습니다.

28. 명령 자식 푸시 -force에 더 나은 대안이 있습니까?

사실, 다른 방법으로 대체 없습니다 git push—force. 적절하게 사용하는 경우 그럼에도 불구하고, merge또는 rebase지점을 업데이트, 당신은 사용할 필요가 없습니다 git push --force.

로컬 역사를 커밋 변경하는 명령을 실행하는 경우에만 사용해야합니다 git push --force.

나는 29 때 git rebase -선택 drop하면 여부 제출과 관련된 코드를 삭제하려면?

예. 코드, 필요 복구하려면 reflogrebase이전 상태를 찾는 데.

자동 원격 지점을 추적하는 방법 (30)

당신이 보통 때, checkout또는 분기를 생성, 힘내 자동으로 분기 트랙을 설정합니다.

그렇지 않은 경우, 다음 번에 당신이 때 업데이트하려면 다음 명령을 사용할 수 있습니다 git push -u remote-name branch-name.

또는 다음 명령이 명시 적으로 설정 사용할 수 있습니다 :git branch --set-upstream-to = remote-name / branch-name

31 rebase업데이트 지점 분기 전에, 그것은 좋은 습관은?

나는 그런 경우이며, 그 이유와 함께, 매우 간단합니다 생각 git rebase -i업데이트 과정에서 더 컨텍스트를 제공하기 위해 우선 조직 압축 또는 제출.

32. 당신은 제출 (그리고로 더 분할 제출할 수있는 방법이 있나요 fixup/squash그 반대)?

당신은 할 수 rebase -i사용 exec시도하고 개정 인덱스 변경을 분할 명령을 사용합니다. 당신은 또한 사용할 수있는 git reset가장 최근의 제출을 취소하고, 그들은 작업 인덱스로 변경하고 새로운 제출로 자신의 분리를 변경합니다.

(33)를 제출 수리 볼 수있는 방법이 있습니까?

자식 로그

로그보기는 해당 변경 로그를 찾을 수 있지만,이 검색은 파일의 내용이 아닌 파일을 볼 수 있습니다.

자식 비난 파일 이름

기록보기, 당신은 또한 수, 기본값은 전체 파일을 표시,이 파일을 수정 몇 줄이 매개 변수 -L을 통해 수정해야 확인 할 수 있습니다.

당신이 볼 경우 이전에 제출의 내용을 사용할 수있다 git show commitId.

34 REBASE --skip 역할은 무엇인가?

우리가 알고있는 rebase프로세스가 처음 생성 할 것이다 rebase지점 ( master) 백업, 넣어 (NO 지점) 일시적 지점. 각 지역의 분기 (분기) 패치의 형태로, 하나의 메인 브랜치에 재 도포 변경을 커미트. 이 프로세스는 패치 응용 프로그램의 사이클, 긴 충돌시 패치,주기 중지하고 수동으로 충돌을 해결 기다립니다. 이 충돌은 합병 이후 버전 및 패치 사이의 갈등을 의미한다.

git rebase --skip 명령, 당신이 특정 패치를 건너 뛸 수 있습니다,주의 명령을 (충돌에 대한 해결책의 존재에를,이 패치의 내용이 라운드에 포함 된, 그것은 잘못된 패치를 할 것입니다, 당신은 생략합니다).

35. 어떻게 원격 분기를 삭제합니까?

당신은 사용할 수 있습니다 git push origin:branch-name-to-remove또는 사용 -d옵션 : g를 it push -d origin someother -branch-2원격 지점을 제거 할 수 있습니다.

원격 지사의 로컬 참조를 삭제하려면 실행할 수 있습니다 git remote prune origin.

(36) checkoutreset의 차이점은 무엇입니까

두 명령은 변경 사항을 취소 할 수 있습니다. checkout그것은 현재의 변경 사항을 취소 할 수 있습니다뿐만 아니라 때문에 더 강력 할뿐만 아니라 이전 버전의 파일을 검색하여 변경 세트를 취소 할 수 있습니다.

기본적으로 reset작업에 더 적합 인덱스 변화의 상태를 변경합니다. 따라서, 실제로는 현재의 변화에 대처한다.

git checkout -- file상기 작업 공간의 변경을 취소이 때이 명령은 파일에 대응하는 작업 영역을 커버하는 기준이되는 최신의 스토리지 노드 (ADD 커밋)이며 file,이 명령은 작업 영역을 변경한다.

git reset HEAD -- file; 비운 add준비 영역에 제출 명령에 file파일 (Ustage)을 수정,이 명령은 준비 영역 만 변경하고 의미 작업 영역을 변경하지 않는 다른 작업이없는 경우, 실제 문서의 작업 공간에 명령을 실행하기 전에 변경 없음

명령은 피해야하는 일반적인 워크 플로우 (37)

일부는 같은 역사의 내용을 파괴 할 수 있습니다

git push origin master -f (千万不要这样做)
git revert
git cherry-pick (changes from master)
复制代码

그것은 일반적으로 요청 (풀 요청)를 잡아 당겨 과정에 내장되어 정상적인 운영 절차에서, 직접 사용의 자식 병합을 방지 할 수 있습니다.

38. 나는 다른 지점 (A)에 지점 (B) 점을, 나는 (프로세스가 업데이트하는 방법을 다른 필요 지점 (C), (A)와 (B)와 마스트 지점 코드가있는 경우 C)?

그것은 몇 가지에 따라 달라집니다

경우 AB통합 할 수 있습니다 master단지 수 AB통합 master한 후 사용 master업데이 트를 C.

당신이 경우 A및이 B에 포함되지 않을 수 있습니다 master, 그것은 간단하게 할 수 있습니다 B에 통합 C하기 때문에, B이미 포함되어 A변경.

극단적 인 경우에는, 일 수있다 A, B그리고 master통합 C. 그러나 충돌을 방지하기 위해, 결합 순서는 중요 할 수있다.

39. 당신이 별칭을 사용하는

다음과 같이 좀 자식 별칭을 사용 :

alias.unstage reset HEAD --
alias.append commit --amend --no-edit
alias.wip commit -m "WIP"
alias.logo log --oneline
alias.lola log --graph --oneline --decorate --all
复制代码

(40) 작은 알려진 자식 명령은 무엇입니까?

git bisect코드가에 존재 찾기 bug생명을 구하는 도구를 제공합니다. 단지 시간이 몇 가지 있지만, 그 정확성은 인상적이지만, 많은 시간을 절약 할 수 있습니다.

git archive그것은 변경 세트를 포장하기위한 좋은 도구입니다. 이는 타사 또는에 도움이 mico-deployment일자리 나누기.

git reflog 그것은 잘 알려진 될 수 있지만 그것은 좋은 방법으로 "취소"명령에 오류를 제공하기 때문에 그것은 언급 할 가치가있다.

41. 당신은 망할 놈에 대한 몇 가지 책이 할 추천 할 수

나는 적어도 읽어 보시기 바랍니다 프로 망할 놈의 처음 세 장. 수년에 걸쳐, 각각은 다시, 더 많거나 적은 수확을 본.

<망할 놈의 학습 가이드>도 좋아요.


링크 : HTTPS : //juejin.im/post/5dba2249f265da4cef190484

추천

출처www.cnblogs.com/zxrbky/p/11769584.html