gitHub로 협업개발을 하다보면, 코드를 되돌려야되는 상황이 있다.
내가 실수해서도 있고,요구사항 내용의 이해관계의 차이에 의해 등으로 인해 코드를 되돌리는데, 간단한 경우라면 그냥 코드 몇줄을 다시 고치거나 주석처리하여 해결하니 크게 문제가 되지않았다.
하지만,이번 프로젝트에서는 클라이언트의 요구사항이 대폭 바뀌는 뭐 같은 경우가 생겨버려 큼직막한 기능을 없던 기능으로 되돌려야 되는 경우가 발생했다.
생각보다 얽혀있는 파일과 코드가 많아 되돌리는 상황도 결코 작은 일이 아니였다.
클라이언트는 다른 기능으로 바꿔달라는게 아니라 없애달라는거라 오히려 할일이 줄어 든거 아니냐는 식이지만
개발상으로는 괜히 코드를 남겨두거나 가라로 대충 숨겨두어 추후 다시 코드를 볼 사람(내가 될수도)에게 혼란을 주고 싶지않아 깔끔히 제거하는 편이 좋기 때문에 일이였다.
(프로젝트 상황 요약: 이미 부었는데요?)

그러다 언뜻 전에 들었던
“이럴 땐 git revert 써야죠.”
말이 생각났다.
git revert는 단순히 “되돌리는 명령어”가 아니다.
오히려 과거 시점으로 브랜치를 되돌리는 명령어는 git reset이 더 어울린다.
마치 시간을 거슬러 올라가서 그 이후의 커밋이 없던 것처럼 만드는 것이기에.이건 협업 중에는 매우 위험할 수 있다. 다른 사람과 공유된 이력을 지우게 되니까...
3f5e9c1 (HEAD -> main) Revert "최초 커밋"
d1234f3 React 18
c5678d9 React
b123456 Hello, world!
a1234bc 최초 커밋
+ return <div>Hello</div>;
- return <div>Hello</div>;
revert 반대로 하는 변경사항을 커밋의 변경사항을 취소하는 새 커밋을 생성하는거라 사람이 직접 제거해서 commit 해도 동일한 커밋이다.
단, 제거할 부분을 일일이 찾아서 되돌려야되는 번거로운 과정을 한번에 해결할 수 있으니 사실상 업무 효율면에서 좋은 명령어인 셈이다.
하지만, 이 전제는 이미 독립적으로 잘 짜여진 코드이며, 커밋관리도 잘되어 있는 상태에서 쓰여야된다는게 생략되어 있다.
+ import React from 'react';
+ function Test() {
+ return <div>Hello</div>;
+ }
import React from 'react';
+ const number = 100;
function Test() {
- return <div>Hello</div>;
+ return <div>Hello, world!</div>;
}
import React from 'react';
- const number = 100;
+ const number = 100000;
function Test() {
- return <div>Hello</div>;
+ return <div>Hello, React!›</div>;
}

위 상황에서 첫번째 커밋을
revert git revert 425eaa5명령어 입력시 아래와 같은 에러가 나온다.
CONFLICT (modify/delete): src/pages/test/test.tsx deleted in
parent of 425eaa5 (첫번째 커밋 Hello) and modified in HEAD.
Version HEAD of src/pages/test/test.tsx left in tree.
error: could not revert 425eaa5... 첫번째 커밋 Hello
즉, 위와 같은식으로 코드를 운영하고 git을 관리했다면 revert 명령어를 쓰면 오히려 혼돈만 가져오는 상황이 되는 것이다.
하지만, 실제 현업에서는 마감일이 정해져있고 일은 계속해서 불어나며 매일같이 야근해야되는 현실에서는 불가능하다.