git 우아 하 게 중간 제출 취소 방법

환경.
git : 2+
머리말
최근 이틀 동안 회사git가 코드 를 합병 할 때 심각 한 문제 가 발생 하여 많은 시간 을 낭비 했다.
지금 기록 하기;
상황 은 이 렇 습 니 다.한 동료 가 자신의 로 컬 지점(원 격 없 음)을 가지 고 있 습 니 다.왠 지 다른 사람 이 지점 을 개발 하 는 코드 가 있 는데 그 자신 은 모 릅 니 다.
주 지점 으로 전환 하고merge자신의 지점 으로 전환 합 니 다.이때 다른 사람 이 개발 하고 있 는 코드 를 모두 주 지점 으로 합 쳤 습 니 다.
저녁 에 업 그 레이 드 를 준비 할 때 비로소 메 인 지점 의 코드 에 문제 가 생 겼 음 을 발견 하 였 다.이 때 버 전 라 이브 러 리 는 다음 과 같 습 니 다.

그림100047dcc과 같이 이 단계 에 있어 서 는 안 될 코드 가 있다.
이때 버 전 라 이브 러 리 는 이미 여러 차례 제출 되 었 는데,현재 의 문 제 는100047dcc제출 한 코드 를 어떻게 취소 하고 다른 사람 이 제출 한 코드 를 보존 하 느 냐 하 는 것 이다.
이 문 제 는 저녁 9 시 반 쯤 까지 괴 롭 히 며 인터넷 에서 제 시 된 것 을 시도 했다.

git rebase -i commit_id
//    pick  drop
그러나 실제 효 과 는100047dcc코드 가 없어 졌 고 다른 사람 이 제출 한 코드 도 없어 졌 다 는 것 이다!
그 러 니까 느낌 을 주 는 거 야.git reset --hard be8c6f6dd랑 다 를 게 없어!
마지막 으로 너무 늦 어서 제출 기록 을 보면100047dcc이후 한 사람 이 코드 를 제출 했 기 때문에 실 행 했 습 니 다.

//        
git branch -b master_tmp
//   
git reset --hard be8c6f6dd
그 후에 그 사람(즉 나)은 백업 지점 에서 파일 을 복사 해 왔 다.
다음 날,나 는 파일 을 복사 하 러 갈 계획 이다.나 는 다음 과 같은 작업 을 수행 할 것 이다.

yutao@yutao MINGW64 /d/sts/workspace/ggservice (master)
$ git pull
remote: Counting objects: 44, done.
remote: Compressing objects: 100% (23/23), done.
remote: Total 26 (delta 19), reused 0 (delta 0)
Unpacking objects: 100% (26/26), done.
From gitlab.gofund.cn:gg-service/ggservice
 + 1784b12...384decc master   -> origin/master (forced update)
  f8f2b19..eb33489 devyaomy  -> origin/devyaomy
 * [new branch]   master_tmp -> origin/master_tmp
Already up-to-date.

yutao@yutao MINGW64 /d/sts/workspace/ggservice (master)
$ git status
On branch master
Your branch is ahead of 'origin/master' by 796 commits.
 (use "git push" to publish your local commits)
nothing to commit, working directory clean

yutao@yutao MINGW64 /d/sts/workspace/ggservice (master)
$ git push
Total 0 (delta 0), reused 0 (delta 0)
To [email protected]:gg-service/ggservice.git
  384decc..1784b12 master -> master
쉽게 말 하면 나의 조작 은 두 걸음 이다.
1 git pull
2、 git push
결국 코드 를 다시 복원 했다!
왜?
어제 저녁 에 원 격 라 이브 러 리 의 버 전 을 정확 한 버 전 으로 되 돌 렸 지만 제 로 컬 메 인 지점 은 최신 commt 입 니 다.즉,원 격 라 이브 러 리 에 비해 제 로 컬 라 이브 러 리 는 여러 번 제출 되 었 습 니 다.원 격 라 이브 러 리 가 되 돌 아 왔 기 때 문 입 니 다!
이 럴 때 나 도 로 컬 라 이브 러 리 를 되 돌려 온라인 과 같은commit노드 로 되 돌려 야 한다.
이때 나 는 다음 과 같은 몇 가지 조작 을 했다.

yutao@yutao MINGW64 /d/sts/workspace/ggservice (master)
$ git reset --soft 384deccaa6
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
 (use "git reset HEAD <file>..." to unstage)

    modified:  .gitignore
    modified:  conf/application.conf
    new file:  conf/hanlp.properties
    new file:  dataservice/app/ggservice/common/UserCodeEnum.java
    new file:  dataservice/app/ggservice/v1/email/action/BindEmailGG3Action.java
    new file:  dataservice/app/ggservice/v1/email/action/SendEmailCaptchaGG3Action.java
    //          
yutao@yutao MINGW64 /d/sts/workspace/ggservice (master)
$ git reset --hard 384deccaa6
위 에서 많은 명령 을 내 렸 는데 사실은git reset --hard 384deccaa6만 있 으 면 된다.

git reset --hard 384deccaa6
이어서 나 는 붙 여 넣 기 를 복사 하고 백업 지점 에서 코드 를 복사 하기 시작 했다.
정말 개판 이 야,이 건 작업량 을 늘 리 는 거 야!
revert 제출 취소
오후 가 되자 또 한 동료 가 나의 오전 과 비슷 한 조작 을 했다.있어 서 는 안 될 코드 를 제출 하 였 습 니 다!
원 격 라 이브 러 리 가 되 돌 아 왔 지만 귀 찮 습 니 다!결 과 는pull최신 코드 를 요구 하 는 사람 은 모두 로 컬 리 턴 작업 을 해 야 한 다 는 것 이다.
그렇지 않 으 면 끝 이 없다!
밤 이 되자 백업 지점 을 테스트 하여 우아 한 해결 방법 을 찾 았 습 니 다!
이것 이 바로revert명령 이다.
이 명령 은 어떤 제출 을 취소 하기 위해 존재 하 는 것 이다.
우선,나 는100047dcc이번 제출 에 문제 가 있다 는 것 을 알 고 있다.이것 은 문제 의 원천 이다.
즉,우리 가 이번에 제출 한 것 을 취소 하기 만 한다 면 문제 가 없 을 것 이다!
단계 1

$ git revert 100047dcc
error: Commit 100047dccb58f3ee5e27b0dfaf5c02ac91dc2c73 is a merge but no -m option was given.
fatal: revert failed
결 과 는 잘못 보고 되 었 다.
왜 일 까요?
만약Commit is a merge but no -m option was given.이것 이 단지 일반적인 제출 일 뿐 이 라면,사실은 잘못 보고 하지 않 을 것 이다!
그러나 이것 은100047dcc의 제출 이다.
그럼 취소 할 때merge내 가 구체 적 으로 언제 취소 해 야 할 지 모 르 겠 어!다음 그림:

이 럴 때 어 떡 하지?
나의 방법
단계 2

yutao@yutao MINGW64 /d/sts/workspace/ggservice (master_tmp)
$ git revert 100047dcc -m 1
error: could not revert 100047d... Merge branch 'master' of gitlab.gofund.cn:gg-service/ggservice into wjs
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'
나 는 이런 조작 을 실행 했다.

git revert 100047dcc -m 1
매개 변수-m 는 취소 할 가격 을 지정 하 는 것 입 니 다.왼쪽 에서 오른쪽으로 1 부터 세 는 것 입 니 다.즉,제 가 철회 한 것 은git입 니 다.
이어서 코드 충돌 을 한 후에 나 는 충돌 을 해결 하고 메 인 분기 의 코드 를 보류 하 며 그 사람의 코드 를 제거 했다.
충돌 을 해결 한 후에 저 는 다음 과 같은 조작 을 수행 합 니 다.

yutao@yutao MINGW64 /d/sts/workspace/ggservice (master_tmp|REVERTING)
$ git add -A

yutao@yutao MINGW64 /d/sts/workspace/ggservice (master_tmp|REVERTING)
$ git status
On branch master_tmp
Your branch is up-to-date with 'origin/master_tmp'.
You are currently reverting commit 100047d.
 (all conflicts fixed: run "git revert --continue")
 (use "git revert --abort" to cancel the revert operation)

Changes to be committed:
 (use "git reset HEAD <file>..." to unstage)

    modified:  dataservice/app/ggservice/v1/datacentre/action/GetIncomeDistributeAction.java
    //      。。。

yutao@yutao MINGW64 /d/sts/workspace/ggservice (master_tmp|REVERTING)
$ git commit -m "ceshi"
[master_tmp d2ae829] ceshi
 18 files changed, 95 insertions(+), 396 deletions(-)
내 가 위 에서 실행 한 문 구 는 사실:

$ git add -A
$ git commit -m "ceshi"
단계 3

yutao@yutao MINGW64 /d/sts/workspace/ggservice (master_tmp)
$ git revert 100047dcc -m 2
error: could not revert 100047d... Merge branch 'master' of gitlab.gofund.cn:gg-service/ggservice into wjs
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'
즉 집행:

$ git revert 100047dcc -m 2
ca4a7ff999의 제출 을 취소 하 더 라 도 이 럴 때 알림 코드 가 충돌 합 니 다.
이어서 위 와 같이 충돌 을 해결 하고 제출 합 니 다.

yutao@yutao MINGW64 /d/sts/workspace/ggservice (master_tmp|REVERTING)
$ git status
On branch master_tmp
Your branch is ahead of 'origin/master_tmp' by 1 commit.
 (use "git push" to publish your local commits)
You are currently reverting commit 100047d.
 (fix conflicts and run "git revert --continue")
 (use "git revert --abort" to cancel the revert operation)

Changes to be committed:
 (use "git reset HEAD <file>..." to unstage)

    modified:  .gitignore
    deleted:  conf/hanlp.properties
    deleted:  dataservice/app/ggservice/common/UserCodeEnum.java
    deleted:  dataservice/app/ggservice/v1/email/action/BindEmailGG3Action.java
    deleted:  dataservice/app/ggservice/v1/email/action/SendEmailCaptchaGG3Action.java
    deleted:  dataservice/app/ggservice/v1/email/service/EmailCaptchaService.java
    deleted:  dataservice/app/ggservice/v1/expert/action/GetExpertOfStockAssessAction.java
    modified:  dataservice/app/ggservice/v1/expert/service/ExpertGG3Service.java
    modified:  dataservice/app/ggservice/v1/ggmtoolbox/action/GetMyStockLabelInfoAction.java
    modified:  dataservice/app/ggservice/v1/ggmtoolbox/action/UpdateUserTokenInfoAction.java
    modified:  dataservice/app/ggservice/v1/ggmtoolbox/service/AppDOSInfoService.java
    modified:  dataservice/app/ggservice/v1/ggmtoolbox/service/UserInfoService.java
    modified:  dataservice/app/ggservice/v1/graph/action/GetStockPlateComponentAction.java
    modified:  dataservice/app/ggservice/v1/graph/service/StockPlateService.java
    //       。。。

yutao@yutao MINGW64 /d/sts/workspace/ggservice (master_tmp|REVERTING)
$ git add -A

yutao@yutao MINGW64 /d/sts/workspace/ggservice (master_tmp|REVERTING)
$ git status
On branch master_tmp
Your branch is ahead of 'origin/master_tmp' by 1 commit.
 (use "git push" to publish your local commits)
You are currently reverting commit 100047d.
 (all conflicts fixed: run "git revert --continue")
 (use "git revert --abort" to cancel the revert operation)

Changes to be committed:
 (use "git reset HEAD <file>..." to unstage)

    modified:  .gitignore
    modified:  conf/application.conf
    deleted:  conf/hanlp.properties
    deleted:  dataservice/app/ggservice/common/UserCodeEnum.java
    deleted:  dataservice/app/ggservice/v1/email/action/BindEmailGG3Action.java
    deleted:  dataservice/app/ggservice/v1/email/action/SendEmailCaptchaGG3Action.java
    deleted:  dataservice/app/ggservice/v1/email/service/EmailCaptchaService.java
    deleted:  dataservice/app/ggservice/v1/expert/action/GetExpertOfStockAssessAction.java
    modified:  dataservice/app/ggservice/v1/expert/service/ExpertGG3Service.java
    modified:  dataservice/app/ggservice/v1/ggmtoolbox/action/GetMyStockLabelInfoAction.java
    modified:  dataservice/app/ggservice/v1/ggmtoolbox/action/UpdateUserTokenInfoAction.java
    modified:  dataservice/app/ggservice/v1/ggmtoolbox/service/AppDOSInfoService.java
    modified:  dataservice/app/ggservice/v1/ggmtoolbox/service/UserInfoService.java
    modified:  dataservice/app/ggservice/v1/graph/action/GetStockPlateComponentAction.java
    modified:  dataservice/app/ggservice/v1/graph/service/StockPlateService.java
    modified:  dataservice/app/ggservice/v1/hq/action/GetStockHistoryDynamicAction.java
    modified:  dataservice/app/ggservice/v1/keybordspirit/action/GetMyGroupStockIndexAction.java

yutao@yutao MINGW64 /d/sts/workspace/ggservice (master_tmp|REVERTING)
$ git commit -m "  revert     -m 1  2            "
[master_tmp 236da00]   revert     -m 1  2            
 95 files changed, 2093 insertions(+), 10011 deletions(-)
 delete mode 100644 conf/hanlp.properties
 delete mode 100644 dataservice/app/ggservice/common/UserCodeEnum.java
 delete mode 100644 dataservice/app/ggservice/v1/email/action/BindEmailGG3Action.java
 delete mode 100644 dataservice/app/ggservice/v1/email/action/SendEmailCaptchaGG3Action.java
 delete mode 100644 dataservice/app/ggservice/v1/email/service/EmailCaptchaService.java
 delete mode 100644 dataservice/app/ggservice/v1/expert/action/GetExpertOfStockAssessAction.java
 delete mode 100644 dataservice/app/ggservice/v1/mobile/action/BindMobileGG3Action.java
 delete mode 100644 dataservice/app/ggservice/v1/mobile/action/SendMobileCaptchaGG3Action.java
 rewrite dataservice/app/ggservice/v1/mystocktags/service/MyStockTagService.java (82%)
 delete mode 100644 dataservice/app/ggservice/v1/report/action/GetAuthorRankListAction.java
 delete mode 100644 dataservice/app/ggservice/v1/report/action/GetAuthorRecommendReportListAction.java
 delete mode 100644 dataservice/app/ggservice/v1/report/action/GetHonoraryAuthorListAction.java
 delete mode 100644 dataservice/app/ggservice/v1/report/action/GetHotIndustryListAction.java
 delete mode 100644 dataservice/app/ggservice/v1/report/action/GetHotStockListAction.java
 delete mode 100644 dataservice/app/ggservice/v1/report/action/GetHotThemeListAction.java
 delete mode 100644 dataservice/app/ggservice/v1/report/action/GetOrganRankListAction.java
 delete mode 100644 dataservice/app/ggservice/v1/report/condition/AuthorOrganRankCondition.java
 delete mode 100644 dataservice/app/ggservice/v1/report/condition/HotReportCondition.java
 delete mode 100644 dataservice/app/ggservice/v1/report/service/HotReportService.java
 delete mode 100644 dataservice/app/ggservice/v1/usergg/action/AutoLoginAction.java
 delete mode 100644 dataservice/app/ggservice/v1/usergg/action/BindOuterChannelAction.java
 delete mode 100644 dataservice/app/ggservice/v1/usergg/action/EmailRegisterAction.java
 delete mode 100644 dataservice/app/ggservice/v1/usergg/action/GetUserAction.java
 delete mode 100644 dataservice/app/ggservice/v1/usergg/action/IsAccountExistAction.java
 delete mode 100644 dataservice/app/ggservice/v1/usergg/action/LoginAction.java
 delete mode 100644 dataservice/app/ggservice/v1/usergg/action/LogoutAction.java
 delete mode 100644 dataservice/app/ggservice/v1/usergg/action/OuterChannelLoginAction.java
 delete mode 100644 dataservice/app/ggservice/v1/usergg/action/RegisterAction.java
 delete mode 100644 dataservice/app/ggservice/v1/usergg/service/LoginService.java
 delete mode 100644 dataservice/app/ggservice/v1/usergg/service/RegisterService.java
 delete mode 100644 dataservice/app/ggservice/v1/usergg/service/UserCommonUtils.java
 delete mode 100644 dataservice/app/ggservice/v1/usergg/service/UserService.java
즉:

$ git add -A
$ git commit -m "  revert     -m 1  2            "
그 사람 이 제출 한 서 류 를 삭제 한 것 을 알 수 있다.
마지막 걸음

yutao@yutao MINGW64 /d/sts/workspace/ggservice (master_tmp)
$ git push
이렇게 해서 그 사람 이 제출 한 잘못된 코드 를 삭 제 했 습 니 다.다른 사람의 로 컬 지점 도 버 전 반환 이 필요 없습니다!
한 번 에 고 쳐,여기저기 OK!
총결산
중간 에 어떤 제출 을 취소 하려 면be8c6f6dde명령 이 아 닌revert명령 을 사용 하 는 것 을 강력 히 권장 합 니 다.
git reset Chard commit_id 원 격 라 이브 러 리 를 되 돌 릴 수 있 지만 최신 코드 의 모든 로 컬 지점 에서 버 전 되 돌 릴 것 을 요구 합 니 다.이렇게 하면 작업량 이 늘 어 납 니 다!
정확 한 절차:

git revert commit_id
//  commit_id merge    ,-m          
git revert commit_id -m 1
//        
git add -A
git commit -m ".."
git revert commit_id -m 2
//        
git add -A
git commit -m ".."
git push
그 중에서reset는 제출 점 에 대한 조작 이다.
일반적인 제출 점 이 라면 이렇게 번 거 로 울 필 요 는 없다.
참고 주소:
[Git 고급 튜 토리 얼(2)]원 격 창고 버 전 반환 방법
https://www.cnblogs.com/ShaYeBlog/p/5368064.html
https://blog.csdn.net/hongchangfirst/article/details/49472913
여기 서 git 우아 한 취소 중간 에 어떤 제출 방법 에 관 한 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 git 가 어떤 제출 내용 을 취소 하 는 것 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기