-
git 사용하기(3)Practical_skills/git 2019. 7. 16. 11:06
오늘은 이어서 commit --amend 명령의 사용과 하나의 remote repository를 공유하면서 여러개의 local repository에서 작업을 할 때 발생할 수 있는 문제에 대해서 다루어 보겠다.
아래의 링크를 참고하면서 보자.우선 reset 과 revert의 명확한 차이를 짚고 넘어가자.
짧게 말한다면 이전에 했던 rebase와 cherry-pick의 차이와 비슷하게
이력을 남기고 돌아가느냐 지우고 돌아가느냐 이다.reset과 revert의 차이1
reset과 revert의 차이2
reset
revert
Problem 4. patch set (amend or paste change-id) my patchset and other patch set.by Daejin
switch back to master branch
made some changes and commit it.
Push it to the remote repository
- Q1) If you want to modify your last commit which you just pushed and upload it as a patch set in remote repository, how to do that?
- Q2) Suppose another user uploaded a commit in remote repository and you want to modify and upload it as patch set before merged. How to do that?
- Q3) Suppose another user uploaded a commit in remote repository and you don’t like it at all. You don’t want to use any of that changes but want to upload a completely new patch set in that commit. How to do that?
solution
Q1
파일 수정을 한다.
$ git add ${file name}
$ git commit --amend
$ git push origin +masterammend를 하면 커밋이력이 삭제되어서 remote 와 local repository간의 log 싱크가 맞지 않아서 push가 되지 않는다.
+옵션을 주어 강제로 push 해주어야 한다.
이것에 따라 발생할 수 있는 문제점은 ammend하기 이전의 log가 remote ropository에 없어지기 때문에 유의하자Q2
두가지 선택사항이 있다.
이력을 남기느냐 강제로 바꾸느냐 강제로한다면 위에 처럼 +옵션을 주면 되지만
후자의 문제점은 다른 모든 user들의 remote 이력과 싱크에 차이가 생겨 충돌을 야기시키게 된다.
그래서 안전한 방법은 전자의 reset과 revert를 잘 사용하여 remote의 log이력과 충돌이 발생하지 않게
another user upload하기 전의 이력으로 reset을 사용해 돌아가서 pull을 한다.
파일을 수정한 뒤 commit하고 다시 remote repository에 push한다.$ git branch -b ${new_branch}
$ git checkout master
$ git reset --hard ${another user의 upload 이전 시점}
$ git pull
$ git checkout ${new_branch}
$ git merge ${mater}
충돌부분 수정
$ git checkout master
$ git merge ${new_branch}
$ git push origin master
Q3
이것도 마찬가지로 두가지 선택사항이 있다.
강제로 하는 것은 Q2와 같고
이력을 남기는 방법을 설명하겠다.$ git branch -b ${new_branch}
$ git checkout master
$ git reset --hard ${another user의 upload 이전 시점}
$ git pull
$ git reset --hard ${another user의 upload 이전 시점}
$ git merge ${new_branch}
$ git push origin master
: Suppose you cherry-picked a commit ‘a’ from remote repository and create other commits ‘b’ and ‘c’ on top of it. If you try to push commits ‘b’ and ‘c’ to remote repository after commit ‘a’ is already merged, the following error might occur.
! [remote rejected] HEAD -> refs/for/master (change ***closed)
error: failed to push some refs to 'https://***@***
Q1) What should have done to prevent such errors?
solution
- Q1
문제 4와 5의 차이는 another user가 remote repository commit 한 것을 아직 merge하지 않았는지 이미 되었는지 이다.
이미 merge가 되었다면 merge를 취소 해주면 된다.
git reset의 경우 --merge 옵션으로 merge를 취소할 수 있고,
git revert의 경우는 --mainline 숫자 ${취소할 병합 commit ID}
- Q1
'Practical_skills > git' 카테고리의 다른 글
git log visualizer (0) 2019.07.13 git 사용하기 (2) (0) 2019.07.13 git 사용하기 (1) (0) 2019.07.13