분기탱천로그 - android studio에서 github 수정하기

serotonins·2023년 4월 26일
0

Develop

목록 보기
14/17

👀

✔ 하고 싶었던 것

이미 push한 commit 두개를 합치고 싶었다.

✔ 정답지

로컬과 원격 저장소 상태가 다르면 우선 git add로 다를만한 파일 스테이징을 해주거나 git stash 해주고, git pull( 받아온 뒤 git stash pop).


git-bash.exe를 열어준다.
cd 명령어로 지금 수정하려는 디렉토리까지 온다.


다음 명령어 실행

git rebase -i HEAD~2

(HEAD~2: HEAD-보통가장최근커밋-로부터 2개-HEAD포함-)


그러면 다음과 같은 내용의 vi 편집기로 들어가게 된다.

pick 커밋아이디7자 내가설정해둔커밋이름
pick 커밋아이디7자 내가설정해둔커밋이름 

(밑으로 갈수록 최근)
맨 위 빼고 pick을 모두 squash로 바꿔주면 된다.

다 바꿔줬다면 esc를 누르고 :wq 를 입력 후 엔터를 눌러 빠져나간 뒤


# This is a combination of 2 commits.
# This is the 1st commit message:

합치려던커밋중오래된순으로하나씩커밋이름

# This is the commit message #2:

합치려던커밋중오래된순으로하나씩커밋이름

이런 화면을 보기 위해 git rebase --continue 명령해준다.


git commit --ammend -m "바꿀커밋메세지"

이렇게 이름도 바꿔본다.


우선 push 시도해보고 안 되면 pull 한 뒤 다시 push.
그러면 merge 커밋이 하나 생길텐데 삭제하기 위해
git reset 리베이스한커밋아이디로 HEAD -> master를 통째로 옮겨준다.


git log --oneline

해서 지금 로컬 저장소의 상황이 마음에 드는지 한번 확인 해준다.
이대로 원격 저장소에 올려도 좋은가?

그렇다면

git push origin 브랜치이름여기서는master -f

로 로컬 저장소의 내용 전체를 원격 저장소에 강제로 덮어 씌운다.

✔ 분기탱천로그

❓ 로컬과 원격 저장소 상태가 달랐다

커밋을 계속 왼쪽에 뜨는 commit and push 버튼을 눌러서 해결해서 그랬는지 로컬은 initial commit만 뜨고 원격은 이제까지 내가 commit and push했던 그대로 8개의 커밋이 있었다.

그래서

❓ git pull로 땡기려는데 에러가 뜬다

error: Your local changes to the following files would be overwritten by merge:
        어쩌구저쩌구내가변경한파일.dart
Please commit your changes or stash them before you merge.

이런 에러메세지가 나왔다.
pull 받으려는 파일과 내가 수정한 파일이 같으면 로컬꺼를 임시저장해두라는 안내다.

❗ add / stash

commit해도 되고(git add 아까그파일.dart로 스테이징만 해줘도 되는 듯) stash해도 되고

git stash

해줬다.

그 뒤

git pull origin master

잘 된다.

하고 나면 git stash pop 해주자.

❗ 이미 push한 commit들 합치려면 rebase

push한 commit을 하나로 합치려면 rebase라는 명령어를 쓰면 된다고 해서

git rebase -i HEAD~2

실행해줬다. (HEAD~2: HEAD-보통가장최근커밋-로부터 2개-HEAD포함-)

그러면

pick 커밋아이디7자 내가설정해둔커밋이름
pick 커밋아이디7자 내가설정해둔커밋이름

(밑으로 갈수록 최근)
이런 화면이 뜨고, 맨 위 빼고 pick을 모두 squash로 바꿔주면 된다.

다 바꿔줬다면 esc를 누르고 :wq 를 입력 후 엔터를 눌러 빠져나가면 되는데

❓ 안드로이드 스튜디오 터미널에서 vim 명령어를 못 쓴다

esc부터가 안 먹었다.
esc를 누르면 main.dart 파일로 커서가 가고 :wq 를 입력할 그 맨 밑 거기로 커서가 절대 안 간다.


여기 -- INSERT -- 밑...

안드 스튜 여기 기본 터미널이 powershell이라 그런가 하고 cmd로 터미널 바꿔봐도 안 됐다.

그냥 실행 중인 터미널을 끄고 다시 rebase 명령을 해보려하니까

지금 rebase 하던 중인 파일이 있어보이는데 그걸 계속 해보겠니? 그게 아니라면 rm -fr ".git/rebase-merge" 명령을 하렴.
대충 이런 안내를 해준다.

❓ 안드로이드 스튜디오 터미널에서 rm 명령어도 못 쓴다 22

그래서 rm -fr ".git/rebase-merge" 했더니 이런다.

분기탱천🤦‍♀️💢
이건 powershell에서도 cmd에서도 안 됐다.
더 화가 나기 시작한다.

❗ git 명령어는 역시 git bash가 짱이다

git bash를 켜준다.
안드로이드 스튜디오 터미널로 말고 그냥 쌩짜로 git-bash.exe를 켜준다.

cd 명령어로 지금 git에 어쩌구 하려는 파일 위치까지 옮겨가준다.

거기서

rm -fr ".git/rebase-merge"

20분 묵은 체증이 내려간다. 잘 된다.

다시 초기 목표를 달성하기 위해 rebase 명령어를 써준다.
거기서 어떻게 하는지는 아까 ❗ 이미 push한 commit들 합치려면 rebase 여기 참고.

하고 나오면 자연스럽게

# This is a combination of 2 commits.
# This is the 1st commit message:

합치려던커밋중오래된순으로하나씩커밋이름

# This is the commit message #2:

합치려던커밋중오래된순으로하나씩커밋이름

이런 화면이 나온다고 하는데 왜 나는 안 나오지...

당황하지 말고 git rebase --continue 명령해준다.

드디어 합쳐졌다.

git commit --ammend -m "바꿀커밋메세지"

이렇게 이름도 바꿔본다.
잘 된다.

혹시 이미 push한 commit의 메세지를 바꾸고 싶다면 rebase 해서 pick을 reword로 변경 후 나온 뒤 git rebase --continue로 들어가 커밋 메세지를 변경하자.

push를 시도해본다.

❓ push rejected

push를 거부당한다...

! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'https://github.com/주소'

로컬이랑 원격저장소에 파일 상태가 달라서 거부한다.
그래서 시키는대로 git pull을 하면 지맘대로 merge 커밋을 만든다.
(git log --oneline --all을 해야 원격 저장소 상태까지 모두 볼 수 있다.)

💢

일단 알겠으니까 다시 push 해달라고 해본다.
그럼 진짜로 push 해준다.

rebase한 커밋이 제대로 올라가긴 했는데 합쳐지기 전 커밋들도 다 있는 채로 합쳐진다.

💢

❗ HEAD -> master 위치 바꾸기(뒤에 만들어진 커밋 삭제하기)

git reset 리베이스한커밋아이디로 HEAD -> master를 통째로 옮겨준다.

사실 나는 head랑 master 따로 옮겨서 사서 고생했다.
만약 이렇게 됐다면 master를 git branch -f master HEAD HEAD가 있는 곳으로 옮겨준 뒤 git checkout master로 HEAD -> master 상태를 만들자.(error: 블라블라 : needs merge 하면 순순히 git reset --merge 해준 뒤 체크아웃 다시 진행)

❗ 진짜 해결 끝 - 원격 저장소에 강제로 덮어씌우기

git log --oneline

해서 지금 로컬 저장소의 상황이 마음에 드는지 한번 확인 해준다.
이대로 원격 저장소에 올려도 좋은가?

그렇다면

git push origin 브랜치이름여기서는master -f

로 로컬 저장소의 내용 전체를 원격 저장소에 강제로 덮어 씌운다.

원격 저장소의 상황을 확인해본다. 개운하다.

0개의 댓글