Wecode -기업협업 인턴 (부트캠프)/기업협업 독학, 공부

github에 개인 정보, 비밀번호가 올라갔을 경우 [reset --hard], local commit 내역으로 확인!

JBS 12 2023. 11. 8. 14:03

현재 나의 문제 상황: 

github remote 에 내 데이터베이스 비밀번호가 올라가 있다. 

내가 한 액션: 

1. 로컬에서 ormconfig.js 파일 생성, gitignore 에 ormconfig.js를 추가한 뒤 

2. git add, git commit, push

3. 깃허브 브랜치를 가보니, ormconfig.js가 업로드 되어 있고, 이상하게도 gitignore에는 내가 올라가지 말라고 해놓은 ormconfig.js가 적혀 있었다. 

4. 그래서 나는 일단 깃허브에 있는 ormconfig.js 를 삭제 했다. 

원격에는 비밀번호가 있는 해당 파일이 없으니 괜찮은건데, 

commit history 내역에 가면 

이전과 commit 후를 비교하는 내역에서 남아 있었다. 

 

그 commit을 지우는 방법이 없을까? 하고 

reset- hard 를 로컬에서 해주었다.

 

(이미 부트캠프에서 프로젝트를 통해 해당 경험을 한 적이 있어서 ㅎ env 파일을 올렸었다 ) 

reset 과 rebase는 다르다! 

 

 

5. reset --hard 

 

캐시 삭제를 하고 

 

git log 로 

해당 commit으로 reset 할 넘버를 복사해서, reset --hard!

 

그리고 나서, 해당 commit으로 돌아갔으니, 

이제 이 로컬 그대로 원격에 올리면 되겠지 하고 push를 했다

 

그런데, 지금 push하려는 Remote(깃허브)가 

내 로컬보다 앞서 있으니, pull 받으라는 문구가 떴다. 

(----> 나중에 알았는데, reset --hard 하고 나면, remote가 앞서 있을 수 밖에 없기 때문에, 강제 Push 를 해야 한다.

설명하자면, remote 에는 1,2,3 이 올라가있는 걸, 로컬에는 1 까지 있는데, 

remote가 앞서 있어 라고 하는 것을, 

local에서 강제 푸쉬로  remote이 1이 되도록 만드는 것! ) 

 

그래서 나는 pull 하라는대로 pull을 했고...

6. pull 

 

local은 다시 예전으로 돌아왔고, 

remote도 새로고침해도 commit history에 변화가 없었다. 


Test를 통한 해결방법! 

브랜치를 하나 만들어서, 이 방법으로 되는지 test 해보고, 되면 이전 다른 브랜치 삭제 해도 되고, 

 

 

dev에 가면 초기세팅의 일부만 있고, 

commit 내역도 3개뿐이고, 

위의 개인정보 포함된 commit이 없는 거처럼, 

 

dev에서 branch를 새로 파서 test 를 해보자 

 

 

 

1. 일단 dev로 갔다. 새로운 브랜치를 파기 위해..

test라는 새로 브랜치를 팠고, 

조심해야 할 것이,
branch에서 branch를 파면 안 된다. dev/main으로 가서 해야 한다. 

 

2. feature/initialSetting에 있는 내역(코드 + commit) 을 가져오기 위해 

Merge!

 

그래서 git log를 해보면, commit 내역도 

feature/initialSetting과 동일하게 가져와진다. 

 

3. 자, 이제 여기서 reset을 하자 

git log로 해당 넘버를 복붙한 뒤

4. 강제 push 

git push -f -u origin feature/initialSetting 

로 강제(force) Push를 한다.  

개인 레포이면 괜찮은데, 
함께 쓰는 레포일 경우, 강제 push는 최후에 

 

5. 그리고 나서, 원격의 feature/test

branch commit history 를 가보면, 

사라져있다.

(ormconfig.js를 올리기 전으로, reset이 되어 있다)  

 

좌측 하단의 파란색 '4 commits'를 누르면 commit history가 나온다

 

 


자, 이제는 개인정보가 들어간 commit 내역 원격에서 삭제는 했고,. 

 

이제는, ormconfig.js가 local에는 있으나, remote에 올라지 않도록 하는 것을 test 해봐야 한다.  

 

 

아까 내가 했을 때 왜 꼬였냐면, 

여기에서 확인을 해줘야 한다. 

로컬에서

.gitignore 파일에 내용 수정을 했을 때,

저장을 하면, 

저기에 저렇게 commit할 내역 list 에 해당 파일이 뜬다. 

 

 

CASE1

그럼, 로컬에서 

ormconfig.js 파일 작성을 하고, .gitignore에서 ormconfig.js 해당 줄을 빼면, 

command + s로 저장을 하면,

commit 할 list에 'ormconfig.js'가 뜬다. (원격에 ormconfig.js가 올라갈 거라고) 

 

 

 

CASE2

근데, .gitignore에 ormconfig.js 를 올리지 말라고 적어두면, 

ormconfig.js 파일을 작성했더라도, 

commit 할 list에 'ormconfig.js'가 없다. (원격에 ormconfig.js 올리지 말라고 .gitignore에 올렸기에) 

이거를 보여주는 곳은 'Source Control'

 

 

즉, 내가 깃허브에 push 하기 전에, 

올라가서는 안 될 파일이 올라갈지 말지 

위에서 미리 확인해볼 수 있다는 것이다. 

 

 

 

 

이후 git add, commit, push를 원래대로 한다.

 

 

 

 

remote에서 확인해본다. 

 

 

remote에 내가 작성한

1)  ormconfig.js는 없고

2) gitignore에도 ormconfig.js 가 잘 적혀있다  

 

끝 !