# [Git] commit 날짜 수정

# git rebase -i로 원하는 commit 고르기

```
git rebase -i --root
```

위 명령어를 실행하면 vi가 열리는데 원하는 commit을 `pick`에서 `edit`으로 바꾸고 `:wq`로 저장하면 commit이 선택된다.

`git log` 명령어의 결과를 통해 지금 선택된 commit을 알 수 있다.

# commit 날짜 수정하기

```
git commit --amend --no-edit --date "Mon Mar 28 20:11:36 2022 +0900"
```

`data` 부분에 들어갈 날짜를 원하는 날짜 및 시간으로 수정하면 된다.

# git rebase --continue

만약 날짜를 바꾸고 싶은 commit이 한 개 이상이라 여러 개를 `edit`으로 바꾸었다면 `git rebase --continue`로 다음 commit으로 넘어갈 수 있다.

> 모종의 이유로 rebase를 멈추고 싶다면 `git rebase --abort`를 사용하면 된다

# 다 바뀐게 아니다?

이 부분은 의도된 것이긴 한데 rebase로 commit을 수정하면 `AuthorDate`는 바뀌지만 `CommitDate`는 바뀌지 않는다.

```plaintext
git log --pretty=fuller

commit 1347db1ffc44e621d645bd76a52126b3761760d2
Author:     Yun Seongmin <ilcm96@gmail.com>
AuthorDate: Mon Mar 28 20:11:36 2022 +0900
Commit:     Yun Seongmin <ilcm96@gmail.com>
CommitDate: Sun Apr 3 22:58:16 2022 +0900

    Initial commit
```

위와 같이 `AuthorDate`는 바뀌었지만 `CommitDate`는 그대로인 것을 볼 수 있다.
이를 수정하기 위해서는 `git filter-branch`를 사용해야 한다.

```
git filter-branch --env-filter 'export GIT_COMMITTER_DATE="$GIT_AUTHOR_DATE"'
```

`GIT_COMMITTER_DATE`를 `GIT_AUTHOR_DATE`로 덮어 씌운다는 명령어로 이 명령어를 실행하면 `AuthorDate`와 `CommitDate`가 같아지게 된다.

# git push

이렇게 변경한건 강제로 push를 해줘야 한다

```plaintext
git push origin +main
```

위와 같이 브랜치명 앞에 `+`를 붙이면 강제로 push된다.

