2009-09-29 3 views
22

우리 프로젝트는 지금 1 주일 정도 동안 git를 사용하고 있으며 우리는 모두 그것을 즐겁게 사용하고 있습니다. (긴밀한 협업 그룹에서 그것을 사용하는 것은 아주 다른 git 경험으로 드러납니다). 최대한 단순하게 유지하기 위해 리베이스 또는 히스토리 수정 작업을 수행하지 않습니다. 그러나 우리는 첫 주에 몇 가지 실수를 저질 렀습니다. 몇 가지 커밋이 완료되지 않아야하며, 기능 분기를 잘못된 통합 분기 (1.0 대신 1.1)에 병합했습니다. 그리고 우리가 역사에 오래 참기 전까지는 이런 것들에 대해 알지 못했습니다.GIT 기록을 다시 작성했을 때의 실질적인 결과는 무엇입니까?

이제 역사를 다시 작성하는 것에 대한 많은 경고가 표시되지만 관련 위험을 잘 모르겠다. 공유 된 베어 저장소를 사용하고 모든 지점이 백업을 위해 거기로 푸시됩니다.

난 당신이 역사를 다시 작성하는 경우 (예를 들어 커밋 제거) 것을 기대, 이후 커밋의 전체 목록은 (/ 일을 어쩌면 컴파일되지 않음) 커밋 "상실"됩니다. 나는 또한 이것이 일어난다면 실제로 이것을 역사의 꼭대기에서 고칠 수 있다고 생각할 것입니다. 그리고 역사의 일부만 비 컴파일로 남겨두기를 바랍니다.

  • 기록을 다시 쓰고 (영향을받는 모든 지점에서 모든 것이 컴파일/작동합니다) 동료가 특별한 명령을 수행해야합니까? (다른 말로하면 잘했을 경우 그들은 "내가 그것을했는지 알 수 있습니까?")
  • 로컬 변경 사항이있는 사용자 중 git pull에서 병합 실패를받을 자격이 있습니까?
  • 여기에 필수적인 것이 누락 되었습니까?

이 주제에 대한 기사/자습서에 대한 참조는 정말 좋을 것입니다.

+0

다른 사람들로 구성된 팀에서 일하면서 리베이스하지 않습니까?! 어떻게 모든 것이 올바른 순서로 진행되는지 확인하십시오! – Goober

+0

@ Goober : 나 한테는 순진한 대답이 여기에 문제가되는 것입니까? 우리는 그것을 테스트 할 것이므로 믿을 수있을 것입니다. – krosenvold

답변

14

힘내 사용 설명서에서 필수 읽기는 Problems with rewriting history입니다.

내 기록을 다시 쓰고 (영향을받는 모든 지점에서 모든 것이 컴파일/작동합니다.) 동료가 특별한 명령을 내릴 필요가 있습니까? 예를 들어 잘 수행하면 "완료했음을 알 수 있습니까?" ?)?

그들은 알 것이고, 힘내이 잘못 어떤 것을 잘라서 그들에게 말할 것이다. 예기치 않은 오류 메시지가 나타나고 결과 병합 충돌을 해결하려고 할 때 의도하지 않게 이전 커밋을 되돌릴 수 있습니다. 이 문제는 실제 메시지를 만들어 내며, 어떤 일이 발생했는지 궁금하다면 저장소의 임시 사본에서 언제든지 시도해 볼 수 있습니다.

로컬 변경 사항이있는 사용자 중 내가 모르는 부분은 git pull에서 병합 실패 대상이 될 수 있습니까?

위의 내용을 참조하십시오.

여기에 필수적인 것이 누락 되었습니까?

(거의) 모든 비용으로 기록을 다시 작성하지 마십시오! 각 커밋 실제로 다른 대답 코멘트에서 언급 한 바와 같이

+0

매뉴얼의 해당 부분을 실제로 읽었습니다. 모든 매뉴얼을 읽은 것처럼 느껴집니다.) 재 작성된 브랜치는 항상 새로운 ID를 얻나요? 그것은 실제로 그것이 수행되어서는 안되는 이유를 실제로 설명합니다 ... – krosenvold

+0

Git이 컨텐츠 * 및 모든 이전 커밋 *으로 커밋을 식별하는 방식 때문에 커밋에 대한 모든 변경 (완전히 사소한)은 완전히 새로운 개발 지점으로 보입니다. 젠장. 재 작성된 기록을 "거의 동일하게"보이게 만들 수있는 방법이 없습니다. –

+0

감사합니다. git에서 작은 정보를 놓치게되면 어떻게 달라질 수 있습니다. – krosenvold

5

는 고유하고 재 작성 역사는 새로운 커밋을 만들 것입니다.

당신은 나무의 가지를 절단 한 후 즉시 새로운 성장로 생각할 수 있습니다.그들은 똑같이 보일 수도 있지만 그렇지 않을 수도 있습니다. 예, 부두교 마술. 이 유추에서는 을 되돌 리면이 로그와 함께 떨어지는 분기를 지원하는 것과 거의 같을 것이므로 떨어지지 않고 길을 성장할 것입니다. a couple good reasons to rewrite history로 우리를 인도

: 공공 가기 전에 개인 저장소 아래

  • 슬림 : 예를 들어, 새로운 지역 사설, 테스트, 테스트, 재 작성, 푸시을 만들 수 있습니다.
  • 공개되기 전에 개인 레포에서 중요한 데이터를 제거하십시오.

이미 Greg가 말한 바에 따르면 : 저장소가 공개 (푸시 된 커밋) 인 경우 will potentially screw up everyone 기록을 다시 작성합니다. 나는 또한 좋은 습관을 지키기 위해 개인 레포지에서도 모든 비용을 들이지 않아야한다고 주장한다. 따라서 역사를 다시 쓰는 것은 피해야한다.(이것은 단지하기 전에 충분히 고려해야 함을 의미한다 : weight 찬반 양론을 올려라!)

그리고 적어도 또 다른 철학적이고 간과 된 이유가있다 : 다시 쓰여진 기록은 데이터 손실이다. 사실, revert 인 git 기록은 reset보다 더 복잡해 보일 수 있습니다. 그러나 적절히 쓰여진다면, 모든 "엉망"은 분리 된 가지에서 감추어 질 수 있습니다. 그리고 여전히 우리는 어떤 시점에서 되돌리기가 이루어 졌는지 정확하게 볼 수 있습니다. 그리고 왜 그것이 수행되었는지에 대한 이유 또는 증거가 있습니다.

나무로 돌아가서 지원 로그를 제거하더라도 되돌아온 지점에 끊임없이 커지는 커브가 표시되어 아름답습니다!

+1

"Rewriting History"장에서 더 새로운 (2nd) 버전이 있음에 유의하십시오. https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History – Randall

+1

나는 일을하는 것이 좋은 생각 일 때 사람들에게 배우고 판단하도록 말하는 것에 동의합니다. 다른 사람이 작업 할 수없는 지형지 물 지점에서 자주 수행되는 다시 쓰기 기록 (아직까지)은 회사에서 필수 사항입니다. –

+0

@XavierAriasBotargues 아마 실제로 재 작성을 위해 가장 힘차게 쓰일 수 있습니다. 실제로는 솔로 개발을 할 때 쓸데없는 것들을 정리하고 제거하는 것이 훨씬 쉽습니다. 어쨌든 그 역사를 지키기 위해 여분의 일을하는 데 거의 아무런 이득도 얻지 못합니다. 여전히 ... 당신의 회사가 되돌릴 것들을 폐쇄하지 않기를 바랍니다. ;피 – cregox

관련 문제