모두가 마스터 작업을 할 때 git pain을 최소화하려면 어떻게해야합니까? 2 단계 모델 (로컬

최근 약 10 명으로 구성된 문서 팀이 SVN에서 Git으로 이동했습니다. SVN에서는 모두가 항상 싫어하는 모델 인 마스터 작업을 수행했지만 그 변화를 가져올 수 없었습니다. Git으로의 이동의 일환으로 우리는 그것을 고치기로 동의했지만 아직 할 수는 없습니다 (임의의 지점에서 빌드 할 수있는 빌드 변경을 기다리는 중). 한편 모두는 마스터 작업을하고 있습니다. 예, 이것이 끔찍하다는 것을 알고 있습니다.

우리는 SVN을 사용할 때보 다 지금 훨씬 더 많은 딸꾹질을 겪고 있습니다. 일부는 Git의 2 단계 모델 (로컬 및 원격)로 인해 발생합니다. 때때로 사람들은 커밋하지만 푸시하지 못하거나 보류중인 로컬 변경 사항을 가져와 충돌합니다. 어제 누군가 합병이 잘못되어 최근의 변경 사항을 어지럽 혔습니다. (그는 자신이 한 일을 정확하게 말할 수 없었으며 GUI를 사용하고 있기 때문에 쉘 기록을 검사 할 수는 없습니다.)

가장 능숙한 Git 사용자로서 (읽기 : 복잡하지는 않지만 이전에 사용해 본 적이 있음) 저는 정책을 설정하고 도구를 가르치며 혼란을 없애는 사람입니다. 지점에서 개발을 수행 할 때까지 도구를 사용하여 오류가 발생하기 쉬운 공유 마스터를 만드는 방법을 어떻게 변경할 수 있습니까?

팀은 Windows에서 Tortoise Git을 사용하고 있습니다. 우리는 전에 Tortoise SVN을 사용했기 때문에 Tortoise Git을 사용하고 있습니다. ( 저는 개인적으로 Cygwin에서 명령 행을 사용하여 일부 조작을 수행했지만 팀은 GUI가 필요하다는 사실을 확인했으며이 도구를 사용할 것입니다.)이 도구를 사용하여 교체 작업을 제안하지 말고 답변해야합니다.

Tortoise Git은 단일 작업으로 “Commit & Push”를 사용할 수 있으며 항상 그렇게하도록 지시했습니다. 그러나 그것은 원자 적이 지 않습니다-커밋 (결국 로컬)은 제대로 작동하지만 푸시는 작동하지 않습니다 (예 : 충돌 또는 네트워크 문제로 인해). 그렇게되면 모호한 오류가 발생합니다. 나는 그들이있는 경우의 bitbucket 로그를 저지 확인하기 위해 그들에게 한 어떤 그들이 밀어, 표시되지 않는 경우, 커밋 최근에 의문을합니다. (문제가있는 경우 충돌을 해결하거나 그들이 무엇을 해야할지 모르는 경우 도움을 요청하십시오.)

팀은 이미 “빠르고 자주 당기는”습관이 있습니다. 그러나 당기면 충돌이 발생할 수 있습니다. 새로운 것이 아니라면 SVN보다 훨씬 더 자주 발생합니다. 나는 Git이 어떻게 가져 오는지 (병합 대신 rebase)를 변경할 수 있다고 들었지만, 거기에서 타협점 (또는 우리 환경에서 수행하는 방법)을 잘 이해하지 못합니다.

서버는 BitBucket (Github 아님)입니다. 리포지토리에 대한 모든 관리 권한이 있지만 더 일반적으로 서버에는 없습니다. 그 중 어느 것도 바꿀 수 없습니다.

소스 파일은 XML입니다. 병합 할 수없는 모든 사람이 알고있는 그래픽 파일도 있지만 충돌이 거의 없습니다. 병합 충돌은 그래픽이 아닌 XML 파일에서 발생합니다.

검토되고 테스트가 완료된 풀 요청이있는 기능 분기를 사용할 수있을 때까지 Git을 사용하여 팀을보다 원활하게 공유 할 수 있도록하기 위해 어떤 변경을 할 수 있습니까?



답변

지금까지 SourceTree는 각 단계에서 사용하는 모든 관련 대화 상자와 옵션을 표시하기 때문에 개념을 배우는 데 가장 적합한 IDE였습니다. 기본 옵션은 일반적으로 훌륭하고 rebase와 혼동하지 마십시오. 정상적인 흐름을 따르십시오.

  • 당신이 최신 상태인지 확인하기 위해 마스터에서 당겨
  • 파일 수정
  • 변경 사항을 커밋합니다 (로컬에만 해당).
  • 마스터에서 다시 당기면 충돌이 발생합니다.
  • 충돌이 해결 될 때까지 모든 파일을 편집하십시오. 이는 파일이 커밋하려는 적절한 상태에 있음을 의미합니다 (원시 파일에 <<<<< HEAD 및 >>>> 마스터 메시지 없음)
  • 병합 변경 사항 커밋
  • 푸시

모든 사람이이 레시피를 따르면 괜찮을 것입니다.

누군가가 더 크거나 중앙에서 변경을 수행 할 때마다 다른 사용자에게 로컬로 커밋하고 마스터에서 가져 오도록 알리면 나중에 너무 많은 충돌이 발생하지 않으며 첫 번째 사람이 여전히 그들과 함께 충돌을 해결하려고합니다.

모든 사람이 흐름을 이해하도록 많은 시간을 투자하십시오. 그렇지 않으면 시간이 많이 걸리고 실제로 마스터 브랜치를 조이는 동안 편안하게 느낄 수 있습니다 (예 : “원격 대신 내 파일 사용”) 충돌을 해결하십시오. 다른 사람들이 만든 모든 변경 사항을

힘내 시스템을 배우기가 어렵습니다. 특히 Svn과 함께 자랐고 인내심을 가지고 올바르게 배울 수있는 시간을 주면 새로운 사용자와 함께 하루 종일 혼란을 청소할 수 있습니다. 정상입니다. 😉


답변

다른 사람과 같은 지점에서 일할 때 기억해야 할 세 가지 주요 사항이 있습니다.

  • 자신이하고있는 일 --force정말로 알지 않는 한 절대 사용 하지 마십시오 .
  • 하나 commit또는 stash모든 전에 진행중인 작업 pull.
  • 당신이 pull바로 앞에 있다면 보통 더 쉬워집니다 push.

그 외에도, 분산 버전 관리를 사용하면 “공식”저장소가 지점을 사용하는지 여부는 중요하지 않습니다. 개별 사용자가 로컬 리포지토리에서 수행하는 작업과는 아무런 관련이 없습니다. 회사에서 완전히 다른 중앙 VCS를 사용할 때 git을 사용하여 로컬 지점을 얻었습니다. 기능에 대한 로컬 브랜치를 만들고 로컬에 실수를 병합 하면 Reflog 또는 다른 마술에 가지 master않고 수정하는 것이 훨씬 쉽습니다 .


답변

모두가 자식을 배우는 데 하루가 걸릴 수 있습니까?

전문가를 사용하는 컴퓨터는 실제로 새로운 도구를 배우고 모든 VCS에서 많은 실수를 할 수는 있지만 사용하도록 설계된 도구를 사용해야합니다.

이것을 소개하는 가장 좋은 방법은 모든 사람들이 가능한 한 짧은 시간에 변경을 할 때 자신의 브랜치에서 작업하고 리베이스 한 다음 완료되면 다시 마스터로 병합하는 것입니다. 이것은 현재의 작업 방식에서 그리 멀지 않으며 더 복잡한 작업을 수행 할만큼 자신감이 생길 때까지 익숙해 질 수있는 간단한 워크 플로우를 소개합니다.

나는 창을 사용하지 않지만 Tortoise가 기본적으로 git을 숨기고 SVN 인 척하면 Tortoise가 잘못된 도구 일 수 있습니다.


답변

때때로, 당신이하고있는 일이 바뀌어야합니다.

가장 큰 문제는 모든 사람 마스터 작업을하고 있다는 것 입니다. 이것은 코드 개발에는 일반적이지 않으며 귀하의 경우에는 잘못된 모델 일 수도 있습니다. 변경을 할 수 있다면, 별도의 브랜치에서 변경을 수행하도록 요구 / 요청함으로써 훨씬 나은 모양을 갖게됩니다. 가지를 사용하면 다음을 얻을 수 있습니다.

  • 직접 푸시를 master허용 하지 않도록합니다.
  • 풀 요청을 작성하고 병합하기 전에 하나 이상의 승인을 받도록 Bitbucket을 통해 시행하십시오 . 이렇게하면 UI가 사용자가 데스크탑에있는 것이 아니라 원격 버전의 코드와 충돌을 표시하므로 누군가가 변경 사항을보고 있는지 확인하고 병합 자체를 덜 고통스럽게 만듭니다. 이것은 커밋 성공하지만 푸시 실패 시나리오를 방지합니다.
  • 병합하기 전에 리포지토리에 대해 “빌드”를 실행하십시오. 나는 문서 저장소라는 것을 알고 있지만이 빌드에서 빌드 할 수있는 철자 검사, 합법적 스크랩 또는 자동화 된 번역 (STRING_DEF 항목을 CSV 파일로 내보내기)이있을 수 있습니다. 아니면 아닐 수도 있습니다.
  • 사람들이 여러 가지 다른 일을 동시에 쉽게 수행 할 수 있습니다. 예, 이것은 숨김으로도 가능하지만 조금 지저분하고 무언가를 사용하지 않는다고 알려줍니다.

분기를 사용할 수없는 경우 merge-and-push일부 문제를 자동화 할 수 있는 스크립트 작성을 고려할 수 있습니다. 어쩌면 사용자가 마스터 뒤에 있지 않은지 확인하고 가져 오기 및 가져 오기를 수행 한 다음 병합을 시도합니다 ( 가능하면--no-commit --no-ff ).


답변

병합을 다시 실행할 수 있음을 강조

그것은 당신에게는 명백 할 수도 있지만 이전 SVN 사용자는 병합을 여러 번 해결하려고 시도 할 수 있다는 것을 알지 못할 수 있습니다. 이렇게하면 수신 한 도움말 플래그 수가 줄어들 수 있습니다.

SVN에서 작업 할 때 trunk커밋되지 않은 변경 사항이 있습니다. 그럼 당신은 할 것 svn update입니다. 이때 변경 사항이 다른 사람의 변경 사항과 영원히 혼합됩니다. 그것을 취소 할 수있는 방법이 없었으므로 (afaik) 수동으로 모든 것을 확인하고 레포가 좋은 상태에 있기를 바랍니다. 실제로 병합을 다시 실행하면 훨씬 더 편할 것입니다.

우리가 자식으로 옮길 때에도 사람들은 같은 사고 방식을 가질 것입니다. 의도하지 않은 오류가 많이 발생합니다.

운 좋게도 git에는 로컬 커밋을 할 수 있기 때문에 되돌아 갈 수있는 방법이 있습니다. (이것이 커맨드 라인에서 어떻게 표현되는지에 대해서는 나중에 설명합니다)

이 작업을 수행하는 방법은 툴링에 따라 다릅니다. 풀을 다시 실행하는 것은 많은 GUI에서 단일 버튼으로 노출되는 것이 아니지만 가능할 수 있습니다. 나는 당신이 cygwin을 사용하는 것을 좋아합니다. 동료들이 소스 트리를 사용합니다. BitBucket을 사용하기 때문에 같은 회사 : Atlassian에서 관리하기 때문에 GUI로 사용하는 것이 좋습니다. 더 긴밀한 통합이 있다고 생각합니다.

당김에 대하여

합병 pull이 사람들을 혼란스럽게 만드는 것이 옳다고 생각합니다 . A pull는 실제로 git fetch서버에서 변경 사항을 검색 한 다음 git merge origin/<branchname>원격 변경 내용을 로컬 지점에 병합하는 *입니다. ( https://git-scm.com/docs/git-pull )

결론은 모든 표준 병합 명령이 pull과 함께 작동한다는 것입니다. 해당 병합에 충돌이 있으면에 의해 중단 할 수 있습니다 git merge --abort. 병합하기 전에 다시 가져와야합니다. 그런 다음 git pull또는로 다시 시도 할 수 있습니다 git merge origin/<branchname>.

동료의 GUI 도구를 사용하여 위의 작업을 수행하는 방법을 어떻게 든 배울 수 있다면 대부분의 문제를 해결할 것이라고 생각합니다. 더 구체적으로 말씀 드릴 수 없습니다.

* 나는 여기서 원산지가 항상 그런 것은 아니라는 것을 이해합니다.

git reflog문제 진단에 사용

나는 당신과 마찬가지로 GUI 도구를 잘못 사용하여 생성 된 문제를 진단해야합니다. 나는 그것이 git reflog저장소에서 상당히 일관된 조치의 흔적이기 때문에 때로는 도움 이 될 수 있음을 발견했다 . 때때로 읽기는 어렵지만.

대안

일시적인 상황이므로 프로세스를 롤아웃 할 때까지 SVN으로 돌아갈 수 있습니다. 많은 곳에서 ‘우리는 한 번 git을 시도했지만 작동하지 않았습니다 …’라고 말하고 실제로 다시 가져 가지 않으므로 주저하지 않았습니다.

다른 일반적인 과도기 문제

  • 사람들은 종종 자신의 저장소를 삭제하고 복제하여 자신의 저장소가 사용할 수없는 상태라고 확신했습니다. 일반적으로 이는 로컬 및 원격 차이를 추적하지 않아서 발생했습니다. GUI 도구와 CLI는 모두 이것을 잘 보여주지 못합니다. CLI git log --decorate에서 차이점을 간략하게 설명하는 가장 쉬운 방법을 찾았 습니다. 하지만 주인이 예를 들어 머리카락이 너무 털이 많으면git reset --hard origin/master

답변

– 하나의 가능한 메커니즘은 오픈 소스 팀이 많이 채택했다고는 포크 (fork) 모델을 사용하는 것입니다 https://www.atlassian.com/git/tutorials/comparing-workflows 포크 (fork)의 자식 워크 플로우를 논의 할 때 (명확하게 발음해야을 ) .

여기에서 각 개발자 또는 하위 팀은 BitBucket 에서 체크 아웃하는 저장소 의 자체 포크 를 가지고 있으며 이에 대한 메커니즘을 제공 하여 기본 원격 외에도 “업스트림”원점을 설정합니다. “및”원격 / 업스트림 / 마스터 병합 “을 정기적으로 수행하십시오.

빌드 도구가 다른 프로젝트, 즉 포크에서 마스터를 가리킬 수 있으므로 빌드 메커니즘 문제를 해결할 수 있습니다.

그런 다음 대부분의 사람들로부터 마스터 프로젝트로 직접 푸시 할 수있는 능력을 제거하고 역할을 검토하고 승인하는 소규모 팀으로 만들 수 있습니다. https://www.atlassian.com/git/tutorials/making-a-pull-request를 참조 하십시오

– 장소는 바람직 검사 푸시 전에 완료 단지에 대한 후크에있는 자식 책 섹션에 보장에 최대 읽기 https://git-scm.com/book/gr/v2/Customizing-Git-Git-Hooks – 사전 커밋 및 사전 푸시 후크를 사용하여 제안 된 커밋에서 일부 테스트를 실행하여 작업이 유효한지 확인하는 등의 작업을 수행 할 수 있습니다.-클라이언트 측 후크의 유일한 문제점은 개발자가이를 비활성화하거나 활성화 할 수 없다는 것입니다 그들.

TortoiseGit에서는 업스트림 페치 / 병합 및 후크를 모두 사용할 수 있습니다.


답변

이것은 직관적이지 않은 것처럼 들리지만 내 말을 들어보십시오.

git으로 실험을 시작하도록 장려하십시오

git의 흥미로운 점 중 하나는 로컬 작업을 완전히 안전하게 만드는 것이 놀랍도록 쉽다는 것입니다. 내가 git을 처음 사용했을 때, 내가 찾은 것 중 하나는 무언가를 망 쳤을 경우를 대비하여 전체 디렉토리백업 으로 압축 하는 것이 었 습니다. 나중에이 거대한 kludge과 거의 절대 실제로 필요한 작업을 보호하는 것입니다,하지만 그것은 존재의 미덕이 있다는 것을 발견 매우 안전하고 매우 당신이 일을 어떻게하고있는 지옥에서 무엇을 알 수없는 경우에도, 간단하게 시도하려는 명령이 나타납니다. 이 작업을 수행 할 때 피해야하는 유일한 방법은 push입니다. 아무것도 밀지 않으면 원하는 것을 시도 할 수있는 100 % 안전한 방법입니다.

물건을 시험해 보는 것에 대한 두려움은 자식 학습에 가장 큰 장애 중 하나입니다. 그것은 당신에게 모든 것을 통제 할 수 있게 해줍니다 . 실제로 대부분의 일상적인 작업에서 매우 안전한 몇 가지 작업을 수행 할 수 있지만 어떤 명령을 탐색해야하는지 알아볼 수 있습니다.

그들에게 안전 감각을 부여함으로써 , 그들은 스스로 일을 수행하는 방법을 알아 내려고 훨씬 더 기꺼이 할 것입니다. 또한 로컬 컴퓨터에서 자신에게 적합한 개인 작업 흐름을 찾을 수 있습니다. 그리고 모든 사람이 로컬 에서 똑같은 일을하지 않는다면, 그들이 추진 하는 표준을 준수하는 한 괜찮습니다 . 그렇게하기 위해 작업을 수행하기 전에 전체 리포지토리를 압축해야하는 경우 괜찮습니다. 그들은 일을하고 시도 할 때 더 좋은 방법으로 일을 할 수 있습니다. 뭐든지 자신이 시작 얻기 위해 노력하고 물건을하고 무엇을보고.

그렇다고 훈련이 무가치하다는 의미는 아닙니다. 반대로 훈련은 기능, 패턴 및 규범을 소개하는 데 도움이 될 수 있습니다. 그러나 일상 생활에서 앉아서 실제로 일을하는 것을 대체하지는 않습니다 . git이나 SVN은 수업에 갈 수있는 것이 아니며 모든 것을 알고 있습니다. 당신은해야 사용할 그들과 어떤 기능에 익숙해하는 문제를 해결하기 위해 그들을 잘하는 문제에 대한 적합하다.

git의 내용을 배우지 못하게하십시오.

나는 당신이 그들에게 가르치고있는 것 중 하나에 반대되는 것을 밀어 붙이는 것에 대해 언급하지 않았습니다. 나는 당신이 그들에게 이것을하도록 말하고 그 반대를 시작하라고 말해야한다고 믿습니다. Git에는 기본적으로 5 개의 “장소”가 있으며 변경이 가능합니다.

  • 디스크에서 커밋되지 않은
  • 단계적이지만 완결되지 않은
  • A의 지역 커밋
  • 현지 은신처에서
  • 원격 리포지토리 (커밋 및 태그 만 다른 리포지토리간에 푸시 및 풀링 됨)

한 번에 모든 것을 끌어 당기도록 장려하는 대신이 5 가지 장소를 활용하도록 장려하십시오. 그들에게 다음을 권장하십시오.

  • 커밋하기 전에 변경 사항을 가져옵니다.
  • 메이크 결정에 가져온 변화를 처리하는 방법을. 옵션은 다음과 같습니다.

    • 로컬 변경 사항을 커밋 한 다음 가져온 변경 사항을 기반으로 변경합니다.
    • 로컬 변경 사항을 커밋 한 다음 가져온 변경 사항과 병합하십시오.
    • 변경 사항을 저장하고 병합 한 다음 충돌을 해결하고 해결하십시오.

      다른 것들이 있지만 여기에 들어 가지 않습니다. 풀은 말 그대로 페치 및 병합입니다. 그것은 아니에요 처럼 그들을; 그것은 이다 그. (통과 --rebase변경 사항은 가져 오기 + 병합에서 가져 오기 + 리베이스로 가져옵니다.)

  • 변경 사항을 준비한 후 검토하십시오.
  • 단계적 변경 사항을 커밋 한 다음 커밋을 검토하십시오.
  • 별도로 밀어 넣습니다.

이를 통해 모든 사람이 공개적으로 제공 하기 전에 자신의 작업을 확인하도록 권장하므로 실수를 빨리 포착 할 수 있습니다. 그들은 및 SVN 달리, 그들이 할 수있는 “즉 내가 원하지 않는 것을 잠깐,”커밋 생각의 볼 돌아가서 그들이 밀어 넣기 전에 다시 시도하십시오.

변경 사항의 위치 를 이해 하는 데 익숙해지면 단계를 건너 뛸 때와 특정 작업을 결합하는 시점을 결정할 수 있습니다 (이미 가져 오기 + 병합을 알고 있기 때문에 풀 때 또는 커밋 및 푸시 옵션을 클릭하는 시점) .

이것은 실제로 SVN에 비해 git의 큰 이점 중 하나이며 git은 이러한 사용 패턴을 염두에두고 설계되었습니다 . 반면 SVN은 중앙 리포지토리를 가정하므로 git 도구가 동일한 워크 플로에 대해 최적화되지 않은 경우 놀라운 일이 아닙니다. SVN에서 커밋이 잘못되면 실수를 취소하기위한 새로운 커밋이 유일합니다.

이렇게하면 실제로 다음 전략으로 이어질 것입니다.

지역 지점 을 사용하도록 격려

로컬 브랜치는 실제로 공유 파일 작업의 많은 어려움을 완화시킵니다. 나는 내 자신의 지점에서 원하는 모든 변경을 할 수 있으며, 그것을 밀지 않기 때문에 누구에게도 영향을 미치지 않습니다. 그런 다음 시간이 오면 동일한 병합 및 리베이스 전략을 모두 쉽게 사용할 수 있습니다.

  • 로컬 브랜치를 리베이스하여 마스터로 합병 할 수 있습니다.
  • 마스터에서 일반 병합 (새 커밋 만들기)을 사용하여 로컬 지점의 변경 사항을 가져올 수 있습니다.
  • 내 지점이 구제하기에 너무 엉망이라고 생각하면 전체 로컬 지점을 마스터의 단일 커밋으로 병합 할 수 있습니다.

현지 지점을 사용하는 것도 체계적인 지점 전략을 수립하기에 좋은 출발입니다. 사용자가 자신의 브랜칭 요구를 더 잘 이해하는 데 도움이되므로 모든 사람이 들었 기 때문에 Gitflow에 빠지지 않고 요구와 팀의 현재 이해 / 기술 수준을 기반으로 전략을 선택할 수 있습니다.

요약

간단히 말해서, git은 SVN이 아니며 그렇게 취급 될 수 없습니다. 다음을 수행해야합니다.

  • 안전한 실험을 장려함으로써 두려움을 제거하십시오.
  • git의 차이점을 이해하도록 도와 주어 이것이 일반적인 워크 플로우를 어떻게 변화시키는 지 확인할 수 있습니다.
  • 문제를보다 쉽게 ​​해결하는 데 도움이되는 기능을 이해하도록 도와줍니다.

이것은 표준 세트 구현을 시작할 수있을 때까지 점차적으로 더 나은 git 사용법을 채택 하는 데 도움이됩니다 .

특정 기능

당장 다음과 같은 아이디어가 도움이 될 수 있습니다.

리베이스

당신은 rebase를 언급했고 실제로 당신의 질문에서 그것을 이해하지 못한다고 언급했습니다. 여기 내 조언이 있습니다 : 방금 설명한 것을 시도해보십시오. 다른 사람이 일부 변경 사항을 푸시하는 동안 로컬로 변경하십시오. 로컬로 변경 사항을 커밋하십시오 . 저장소 디렉토리를 백업으로 압축하십시오. 상대방의 변경 사항을 가져옵니다. 이제 rebase 명령을 실행하고 커밋에 어떤 영향이 있는지 확인하십시오! 끝없는 블로그 게시물을 읽거나 rebase 및 사용 방법에 대한 교육을받을 수 있지만 실제로 사용하는 것을 대체하는 것은 아닙니다. 그래서 시도 그것을 밖으로.

merge.ff=only

이것은 개인적인 취향의 문제가 될 것이지만, 이미 충돌 처리에 문제가 있다고 언급했기 때문에 적어도 일시적으로 추천 할 것입니다. 다음으로 설정 merge.ff하는only 것이 좋습니다 .

git config --global merge.ff only

“ff”는 “빨리 감기”를 나타냅니다. 빨리 감기 병합은 git이 다른 커밋의 변경 사항을 결합 할 필요가없는 경우입니다. 단지 그래프의 직선을 따라 분기의 포인터를 새로운 커밋으로 이동시킵니다.

이것이 실제로하는 일은 git이 자동으로 병합 커밋을 만들지 못하게하는 것입니다. 따라서 로컬로 무언가를 커밋 한 다음 병합 커밋을 만들려고 시도하지 않고 잠재적으로 사용자가 충돌을 처리하지 않고 다른 사람의 변경 사항을 가져 오면 병합이 실패합니다. 실제로 git은 fetch. 로컬 커밋이 없으면 병합이 정상적으로 진행됩니다.

이를 통해 사용자는 커밋을 시도하기 전에 다른 커밋을 검토 할 수 있으며, 커밋 을 가장 잘 처리하는 방법에 대한 결정을 내릴 수 있습니다. 리베이스하거나 병합을 계속 진행 git merge --no-ff하거나 (구성을 무시하는 데 사용) 변경 사항을 병합하지 않고 나중에 처리 할 수도 있습니다. 이 작은 속도 충돌은 팀이 병합에 대한 잘못된 결정을 피하는 데 도움이 될 것이라고 생각합니다. 병합 처리에 익숙해지면 팀을 끌 수 있습니다.