특정 커밋을 변경하려면 어떻게 해야 합니까?
다음과 같은 커밋 이력이 있습니다.
HEADHEAD~HEAD~2HEAD~3
git commit --amend의 「현재의」를 합니다.HEAD그런데 어떻게 수정하면 ?HEAD~3
를 사용합니다.예를 들어 커밋을 변경하려면bbc643cd: , "실행: "
$ git rebase --interactive 'bbc643cd^'
은 '캐럿'에 해 주세요.^변경할 커밋 전에 커밋으로 기본을 다시 설정해야 하기 때문입니다.
에서 " " " 를 합니다.pick로로 합니다.edit 언급하는 bbc643cd.
파일내의 합니다.한 지 안 된 입니다.bbc643cd.
이 「 」는bbc643cd마지막 약속이므로 쉽게 수정할 수 있습니다.변경을 한 후 다음 명령으로 커밋합니다.
$ git commit --all --amend --no-edit
그런 다음 다음 다음 명령을 사용하여 이전 HEAD 커밋으로 돌아갑니다.
$ git rebase --continue
경고: 이 조작에 의해, 그 커밋의 SHA-1과 모든 아이가 변경됩니다.즉, 이 조작은 그 시점부터의 이력을 고쳐 씁니다.명령어를 사용하여 를 누르면 저장소가 중단될 수 있습니다.git push --force.
뛰어난 인터랙티브 리베이스 사용:
git rebase -i @~9 # Show the last 9 commits in a text editor
변경하십시오.pick로로 합니다.e )edit파일을 저장하고 닫습니다.Git은 다음 중 하나를 수행할 수 있도록 해당 커밋으로 되감습니다.
git commit --amendgit reset @~마지막 커밋을 삭제하지만 파일 변경은 삭제하지 않습니다(즉, 파일을 편집했지만 아직 커밋하지 않은 시점).
후자는 여러 개의 커밋으로 분할하는 것과 같은 더 복잡한 작업을 수행할 때 유용합니다.
다음 ''를 실행합니다.' ''를 클릭합니다.git rebase --continue및 Git은 변경된 커밋 위에 후속 변경을 재생합니다.일부 병합 충돌을 수정하라는 메시지가 표시될 수 있습니다.
★★★★★★@의 줄임말이다HEAD , , , , 입니다.~는 지정된 커밋 전의 커밋입니다.
Git 문서에서 기록 다시 쓰기에 대한 자세한 내용을 읽어 보십시오.
기본 재배치하는 것을 두려워하지 마세요.
ProTip™:기록을 다시 쓰는 "위험한" 명령어를 실험하는 것을 두려워하지 마세요* - Git은 기본적으로 90일간 커밋을 삭제하지 않습니다.리프로그에서 찾을 수 있습니다.
$ git reset @~3 # go back 3 commits
$ git reflog
c4f708b HEAD@{0}: reset: moving to @~3
2c52489 HEAD@{1}: commit: more changes
4a5246d HEAD@{2}: commit: make important changes
e8571e4 HEAD@{3}: commit: make some changes
... earlier commits ...
$ git reset 2c52489
... and you're back where you started
* 및 같은 옵션에 주의하십시오.데이터는 폐기될 수 있습니다.
* 또, 콜라보레이션 하고 있는 브랜치에서는 이력을 고쳐 쓰지 말아 주세요.
" " "는git rebase -i디폴트로 VIM이 열립니다.Vim은 대부분의 최신 텍스트 에디터처럼 동작하지 않으므로 Vim을 사용하여 기본을 변경하는 방법을 살펴보십시오.다른 에디터를 사용하고 싶은 경우는, 로 변경해 주세요.git config --global core.editor your-favorite-text-editor.
인터랙티브 기본 재배치--autosquash과거의 커밋을 수정할 필요가 있을 때 자주 사용하는 것입니다.기본적으로 ZelluX의 답변이 보여주는 프로세스를 고속화하고 편집해야 할 커밋이 여러 개 있을 때 특히 유용합니다.
매뉴얼에서 다음 항목을 참조하십시오.
--autosquash커밋 로그 메시지가 "squash! ..."(또는 "fixup!")로 시작되고 제목이 같은 커밋이 있을 경우 크래시 마크가 붙은 커밋이 변경되는 커밋 바로 뒤에 오도록 rebase -i의 ToDo 목록을 자동으로 변경합니다.
다음과 같은 이력이 있다고 가정합니다.
$ git log --graph --oneline
* b42d293 Commit3
* e8adec4 Commit2
* faaf19f Commit1
Commit2로 수정하고 싶은 변경사항이 있는 경우 다음 명령을 사용하여 변경 내용을 커밋합니다.
$ git commit -m "fixup! Commit2"
메시지 도 있습니다. "commit-sha"는 "commit-sha"입니다."fixup! e8adec4또는 커밋 메시지의 접두사일 수도 있습니다.
그런 다음 이전 커밋에서 인터랙티브한 기본 재배치 작업을 시작합니다.
$ git rebase e8adec4^ -i --autosquash
에디터가 열리고 커밋이 올바르게 주문됩니다.
pick e8adec4 Commit2
fixup 54e1a99 fixup! Commit2
pick b42d293 Commit3
저장 후 종료하기만 하면 됩니다.
실행:
$ git rebase --interactive commit_hash^
^.커밋 1개 해시)인만 추가합니다.커밋이 1개(지정된 커밋 해시)인 경우 1개만 추가합니다.^.
을 사용해서 Vim을 .pick로로 합니다.reword종료합니다(예::wq그런 다음 git에서 커밋 메시지를 변경할 수 있도록 reword로 표시한 각 커밋을 묻습니다.
및 각( " " " " " " ):wq 메시지로 에서 다음 커밋메시지로 이동합니다.
하지 않고 하려면 을 .:q!
편집: 탐색하려면vim you you you youjkh으로 가다l 되다NORMAL눌러주세요.ESC에 NORMAL하려면 , 를 누릅니다.i를 입력하도록 합니다.INSERT에 textmode를 합니다. 이치노를 누릅니다.ESCNORMAL syslog:)
업데이트: git를 사용하여 모든 것을 취소하는 방법(거의)을 나열한 gitub의 훌륭한 링크입니다.
매뉴얼에 의거하여
오래된 커밋 메시지 또는 여러 커밋메시지 메시지 수정
git rebase -i HEAD~3
위에는 현재 브랜치 상의 마지막 3개의 커밋 목록이 표시됩니다.더 필요한 경우 3을 다른 것으로 변경합니다.리스트는 다음과 같이 표시됩니다.
pick e499d89 Delete CNAME
pick 0c39034 Better README
pick f7fde4a Change the commit message but push the same commit.
변경할 각 커밋메시지 앞에 pick을 reword로 바꿉니다.목록의 두 번째 커밋을 변경했다고 가정하면 파일은 다음과 같습니다.
pick e499d89 Delete CNAME
reword 0c39034 Better README
pick f7fde4a Change the commit message but push the same commit.
커밋 목록 파일을 저장하고 닫으면 커밋 메시지 변경, 커밋 메시지 변경 및 저장을 위한 새 편집기가 나타납니다.
마지막으로 수정된 커밋을 강제로 푸시합니다.
git push --force
완전 비대화형(1) 명령어
난 그냥 내가 쓰는 가명을 공유하려고 했어.비대화형 인터랙티브 리베이스에 기반합니다.git에 추가하려면 다음 명령을 실행합니다(아래 설명 참조).
git config --global alias.amend-to '!f() { SHA=`git rev-parse "$1"`; git commit --fixup "$SHA" && GIT_SEQUENCE_EDITOR=true git rebase --interactive --autosquash "$SHA^"; }; f'
또는 스테이징되지 않은 파일도 처리할 수 있는 버전(스테이징 후 언스테이징을 통해):
git config --global alias.amend-to '!f() { SHA=`git rev-parse "$1"`; git stash -k && git commit --fixup "$SHA" && GIT_SEQUENCE_EDITOR=true git rebase --interactive --autosquash "$SHA^" && git stash pop; }; f'
이 명령어의 가장 큰 장점은 no-vim이라는 것입니다.
(1)물론 리베이스 중에 충돌이 없다는 점을 고려하면
사용.
git amend-to <REV> # e.g.
git amend-to HEAD~1
git amend-to aaaa1111
름amend-to 것 .IMHO와의 을 비교해 .플로우를 비교합니다.--amend:
git add . && git commit --amend --no-edit
# vs
git add . && git amend-to <REV>
설명.
git config --global alias.<NAME> '!<COMMAND>'는 - 를 만듭니다.git 에일리어스는 git 에일리어스입니다.<NAME>명령어 non-timeout 명령어를 합니다.<COMMAND>f() { <BODY> }; f'' - '바시' 기능 - "" function function function - - - -.SHA=`git rev-parse "$1"`;리비전으로 합니다. - git 리비전은 git 리비전으로 변환합니다.SHAgit commit --fixup "$SHA"for - fixup-commit :SHA. 문서 참조GIT_SEQUENCE_EDITOR=true git rebase --interactive --autosquash "$SHA^"
에디터가 들지 않는 는, 「」를 사용할 수 .git rebase --onto.
요?Commit1·첫째, 이전부터 Commit1:
git checkout -b amending [commit before Commit1]
번째, 움켜쥐기, 움켜쥐기, 움켜쥐기Commit1cherry-pick:
git cherry-pick Commit1
하여 " " " " " " 를 만듭니다.Commit1':
git add ...
git commit --amend -m "new message for Commit1"
그리고 마지막으로, 다른 변경 사항을 저장한 후, 나머지 커밋을 에 이식합니다.master새로운 커밋에 가세해 다음과 같이 합니다.
git rebase --onto amending Commit1 master
」를 확인amending " " 의 모든 커밋"Commit1및 (비표준)master(어느 쪽인가) 잘라냅니다.「 Commit 2 」 、 「 Commit 3 」 、 「 Commit 1 」 、 「 Commit 1 」그냥 체리 따면 되는데, 이 방법이 더 쉬워요.
나뭇가지를 치우는 것을 잊지 마세요!
git branch -d amending
git stash+rebase
Gerrit 리뷰를 위해 오래된 커밋을 여러 번 수정해야 할 때는 다음과 같이 하고 있습니다.
git-amend-old() (
# Stash, apply to past commit, and rebase the current branch on to of the result.
current_branch="$(git rev-parse --abbrev-ref HEAD)"
apply_to="$1"
git stash
git checkout "$apply_to"
git stash apply
git add -u
git commit --amend --no-edit
new_sha="$(git log --format="%H" -n 1)"
git checkout "$current_branch"
git rebase --onto "$new_sha" "$apply_to"
)
GitHub 업스트림
사용방법:
- 파일을 .
git add에 있는 git-amend-old $old_sha
는 이것이 --autosquash다른 관련 없는 수정이 찌그러지지 않기 때문입니다.
가장 좋은 옵션은 "Interactive rebase 명령어"를 사용하는 것입니다.
git rebase명령어는 믿을 수 없을 정도로 강력합니다.커밋 메시지 편집, 커밋 결합, 정렬 등을 할 수 있습니다.커밋을 다시 작성할 때마다 내용에 관계없이 각 커밋에 대해 새로운 SHA가 생성됩니다.이 명령어는 특히 다른 개발자와 협력하여 작업할 경우 큰 영향을 미칠 수 있으므로 사용할 때 주의해야 합니다.당신이 일부 기준을 변경할 때 그들은 당신의 약속과 함께 일을 시작할 수 있습니다.강제적으로 커밋을 푸시하면, 그 커밋은 동기화되지 않게 되어, 나중에 혼란스러운 상황에 처할 가능성이 있습니다.그러니 조심하세요!
만들어 보는 것이
backup이 되지 않는 수 .
이제 이 명령어를 어떻게 사용할까요?
git rebase -i <base>
-i"진보적"의 약자입니다.비인터랙티브모드로 기본 재설정을 실행할 수 있습니다.예:
#interactivly rebase the n commits from the current position, n is a given number(2,3 ...etc)
git rebase -i HEAD~n
HEAD현재 위치를 나타냅니다(브런치 이름 또는 SHA 커밋 가능).~n"n prefore, n prefore"라는 의미입니다.HEAD~n현재 접속하고 있는 커밋보다 앞에 있는 「n」커밋의 리스트가 됩니다.
git rebase에는 다음과 같은 다른 명령어가 있습니다.
p★★★★★★★★★★★★★★★★★」pick약약 、 지는는는는는 해아해해 。r★★★★★★★★★★★★★★★★★」reword: 커밋의 내용은 유지하되 커밋 메시지를 변경합니다.s★★★★★★★★★★★★★★★★★」squash: 이 커밋의 변경을 이전 커밋에 결합합니다(목록에서 위의 커밋)....기타.
주의: Git을 코드 에디터와 연계하여 작업을 심플하게 하는 것이 좋습니다. 시각 하면 이렇게 할 수 .
git config --global core.editor "code --wait"또는 구글에서 원하는 코드 에디터를 GIT와 연관짓는 방법을 검색할 수 있습니다.
의 예git rebase
마지막 2개의 커밋을 변경하고 싶어서 다음과 같이 처리했습니다.
- 커밋을 합니다.「 」
#This to show all the commits on one line $git log --oneline 4f3d0c8 (HEAD -> documentation) docs: Add project description and included files" 4d95e08 docs: Add created date and project title" eaf7978 (origin/master , origin/HEAD, master) Inital commit 46a5819 Create README.md 지금은 사용하고 있습니다.
git rebase커밋메시지를 하려면 , 「2」를 참조해 주세요.$git rebase -i HEAD~2코드 에디터가 열리고 다음과 같이 표시됩니다.pick 4d95e08 docs: Add created date and project title pick 4f3d0c8 docs: Add project description and included files # Rebase eaf7978..4f3d0c8 onto eaf7978 (2 commands) # # Commands: # p, pick <commit> = use commit # r, reword <commit> = use commit, but edit the commit message ...이 2개의 커밋 메시지를 변경하고 싶기 때문입니다., 그럼 제가 입력해 보겠습니다.
r★★★★★★★★★★★★★★★★★」rewordpick그런 다음 파일을 저장하고 탭을 닫습니다.:rebase는 여러 단계 프로세스로 실행되므로 다음 단계는 메시지 업데이트입니다.또한 커밋은 역순으로 표시되므로 마지막 커밋은 그 커밋에 표시되고 첫 번째 커밋은 첫 번째 줄에 표시됩니다.메시지를 업데이트합니다.첫 번째 메시지를 업데이트합니다.
docs: Add created date and project title to the documentation "README.md" # Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. ...저장 후 닫기 두 번째 메시지 편집
docs: Add project description and included files to the documentation "README.md" # Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. ...저장하고 닫습니다.
기본 재배치가 끝날 때까지 다음과 같은 메시지가 나타납니다.
Successfully rebased and updated refs/heads/documentation이치노변경을 표시할 수 있습니다.5dff827 (HEAD -> documentation) docs: Add project description and included files to the documentation "README.md" 4585c68 docs: Add created date and project title to the documentation "README.md" eaf7978 (origin/master, origin/HEAD, master) Inital commit 46a5819 Create README.md그것이 새로운 유저에게 도움이 되었으면 합니다. :)
자동 인터랙티브 기본 재배치 편집에 이어 다시 실행할 수 있는 복귀 커밋
나는 과거의 약속을 자주 고쳐서 그 약속을 위한 대본을 썼다.
워크플로우는 다음과 같습니다.
git commit-edit <commit-hash>편집하고 싶은 커밋이 표시됩니다.
처음에 하고 싶었던 대로 커밋을 수정하고 준비합니다.
도 모릅니다.
git stash save커밋하지 않는 파일을 보관합니다.)을 다시 하다
--amend(예:git commit --amend기본 재배치 완료:
git rebase --continue
을 실시하려면 , 를 실행 .git-commit-edit$PATH:
#!/bin/bash
set -euo pipefail
script_name=${0##*/}
warn () { printf '%s: %s\n' "$script_name" "$*" >&2; }
die () { warn "$@"; exit 1; }
[[ $# -ge 2 ]] && die "Expected single commit to edit. Defaults to HEAD~"
# Default to editing the parent of the most recent commit
# The most recent commit can be edited with `git commit --amend`
commit=$(git rev-parse --short "${1:-HEAD~}")
message=$(git log -1 --format='%h %s' "$commit")
if [[ $OSTYPE =~ ^darwin ]]; then
sed_inplace=(sed -Ei "")
else
sed_inplace=(sed -Ei)
fi
export GIT_SEQUENCE_EDITOR="${sed_inplace[*]} "' "s/^pick ('"$commit"' .*)/edit \\1/"'
git rebase --quiet --interactive --autostash --autosquash "$commit"~
git reset --quiet @~ "$(git rev-parse --show-toplevel)" # Reset the cache of the toplevel directory to the previous commit
git commit --quiet --amend --no-edit --allow-empty # Commit an empty commit so that that cache diffs are un-reversed
echo
echo "Editing commit: $message" >&2
echo
마지막 커밋 변경:
git commit --amend
// or
git commit --amend -m "an updated commit message"
공개 커밋을 수정하지 않습니다.수정된 커밋은 실제로는 완전히 새로운 커밋이며 이전 커밋은 현재 브랜치에는 존재하지 않습니다.
예를 들어, 마지막 3개의 커밋메시지 또는 해당 그룹의 커밋메시지를 변경할 경우 편집하는 마지막 커밋의 부모인 HEAD~2^ 또는 HEAD~3을 git rebase-i에 인수로서 지정합니다.마지막 3개의 커밋을 편집하려고 하기 때문에 ~3을 기억하는 것이 더 쉬울 수 있지만, 실제로는 편집하고 싶은 마지막 커밋의 부모인 4개의 커밋을 지정하고 있다는 점에 유의하십시오.
$ git rebase -i HEAD~3
이 접근방식을 도입했습니다(아마도 인터랙티브한 리베이스의 사용방법과 동일할 것입니다).하지만, 이것은 저에게 있어서 간단한 것입니다.
주의: 이 접근방식은 일상적인 대안이 아닌 사용자가 무엇을 할 수 있는지를 설명하기 위해 제시합니다.스텝이 많기 때문에(몇 가지 주의사항이 있을 수 있습니다)
.0 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★feature-branch
some-commit---0---1---2---(feature-branch)HEAD
하여 " " " 를 .quick-branch기능 브랜치를 리커버리 포인트로 복제할 수도 있습니다(시작 전).
?(git checkout -b feature-branch-backup)
git checkout 0
git checkout -b quick-branch
이제 다음과 같은 작업이 수행됩니다.
0(quick-branch)HEAD---1---2---(feature-branch)
무대가 바뀌고, 다른 건 다 숨겨놨어.
git add ./example.txt
git stash
을 커밋하고 을 다시 하다feature-branch
git commit --amend
git checkout feature-branch
이제 다음과 같은 작업이 수행됩니다.
some-commit---0---1---2---(feature-branch)HEAD
\
---0'(quick-branch)
리베이스feature-branchquick-branch(도중에 발생하는 모든 충돌을 해결합니다).하여 " " " 를 삭제합니다.quick-branch.
git rebase quick-branch
git stash pop
git branch -D quick-branch
결과적으로 다음과 같은 결과가 됩니다.
some-commit---0'---1'---2'---HEAD(feature-branch)
Git은 리베이스를 할 때 (어느 정도까지는 말할 수 없지만) 0 커밋을 복제하지 않습니다.
주의: 모든 커밋 해시는 원래 변경하려고 했던 커밋부터 변경됩니다.
비인터랙티브명령어를 취득하려면 , PATH 에 다음의 내용을 포함한 스크립트를 삽입합니다.
#!/bin/sh
#
# git-fixup
# Use staged changes to modify a specified commit
set -e
cmt=$(git rev-parse $1)
git commit --fixup="$cmt"
GIT_EDITOR=true git rebase -i --autosquash "$cmt~1"
사항 함께)을 준비하여 합니다.git add를 실행하고 나서, 「」를 실행합니다.git fixup <commit-to-modify>물론 충돌이 발생하더라도 대화식으로 진행됩니다.
난 이걸 해결했어
1) 원하는 변경을 포함한 새로운 커밋을 작성한다.
r8gs4r commit 0
2) 어떤 커밋과 병합해야 하는지 알고 있습니다.커밋은 3입니다.
ㅇㅇㅇㅇㅇㅇㅇㅇㅇ.git rebase -i HEAD~4 커밋( # 4의 커밋을 .
3) 인터랙티브한 기본 재배치에서는 최근 커밋이 하단에 배치됩니다.비슷해 보이겠지만
pick q6ade6 commit 3
pick vr43de commit 2
pick ac123d commit 1
pick r8gs4r commit 0
4) 특정 커밋과 Marge할 경우 커밋을 재배치해야 합니다.이렇게 해야 돼요.
parent
|_child
pick q6ade6 commit 3
f r8gs4r commit 0
pick vr43de commit 2
pick ac123d commit 1
다시 한 후에는 해요.p pickf(fixup은 커밋메시지 없이 Marge됩니다) 또는s(커밋 메시지와의 Marge가 실행 시간에 변경될 수 있음)
트리를 살리는 거야
이제 기존 커밋과 병합이 완료되었습니다.
주의: 사용자가 직접 유지 보수하지 않는 한 이 방법은 권장되지 않습니다.만약 당신이 큰 팀 규모를 가지고 있다면, git 트리를 다시 쓰는 것은 허용되지 않는 방법으로, 당신이 알고 있는 다른 습관들과 충돌하게 될 것입니다.보다 적은 커밋으로 트리를 깨끗하게 유지하고 싶다면 이것을 시도해 볼 수 있습니다.그 이외의 경우는 소규모 팀이 바람직하지 않습니다.
로컬 커밋 날짜 및 시간 변경을 포함하여 다음을 수행합니다.
git rebase -i HEAD~6
~6는 표시하는 커밋 이력의 양입니다.
- 경경에서
pick로로 합니다.edit편집할 커밋입니다. - 그런 다음 저장하고 종료합니다(우분투:
Ctrl+OCtrl+X -
- 뛰어요: 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아.
git commit --amend --date="2022-09-02T19:10:04" -m "NEW_MSG"
- 뛰어요: 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아.
-
- 편집이 열리면 저장 후 종료합니다.
-
- 다음으로 확인하고 다음 커밋으로 넘어가거나 마지막 커밋인 경우 종료합니다.
git rebase --continue
- 다음으로 확인하고 다음 커밋으로 넘어가거나 마지막 커밋인 경우 종료합니다.
편집할 커밋이 더 많을 경우 포인트 1부터 반복됩니다.
경우 '확인'을 수행합니다.push
나한테는 레포에서 자격증을 삭제하기 위해서였다.저는 베이스 변경을 시도했지만, 그 과정에서 전혀 관련이 없는 것처럼 보이는 수많은 충돌에 부딪혔습니다. --계속합니다.기본 설정을 변경할 필요가 없습니다.Mac에서 BFG(brew install bfg)라는 툴을 사용합니다.
않은 에는 커밋을 사용하여 수 .git reset HEAD^[1,2,3,4...]
예를들면
git commit <file1> -m "Updated files 1 and 2"
git commit <file3> -m "Updated file 3"
첫 번째 커밋에 file2를 추가하는 것을 잊었습니다...
git reset HEAD^1 // because I only need to go back 1 commit
git add <file2>
그러면 file2가 첫 번째 커밋에 추가됩니다.
이 솔루션은 매우 바보같이 들릴 수 있지만 특정 상황에서는 도움이 될 수 있습니다.
제 친구가 우연히 매우 큰 파일(각각 3GB~5GB의 자동 생성 파일 4개)을 커밋하고 그 위에 추가 코드를 커밋한 후 다음과 같은 문제를 깨달았습니다.git push★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★!
은 파파에 the the the the 。.gitignore컨테이너 폴더 이름을 바꾼 후 노출되어 커밋되었습니다!그 몇개 더 , 「코드의 커밋」은 「코드의 커밋」이 몇 개 더 있었습니다.push(GB의 데이터를 업로드하려고 합니다!)는 영원히 실행 중이었으며, Github의 파일 크기 제한으로 인해 결국 실패합니다.
인터랙티브한 리베이스나 이와 유사한 기능의 문제는, 이러한 큰 파일을 조사하는 것에 대처해, 어떠한 작업에도 오랜 시간이 걸린다는 것이었습니다.그러나 CLI에서 거의 1시간을 보낸 후 파일(및 델타)이 실제로 이력에서 삭제되었는지, 아니면 단순히 현재 커밋에 포함되지 않았는지 확신할 수 없었습니다.푸시도 안 돼서 친구가 너무 막혔어요.
그래서 제가 생각해낸 해결책은
- 의 이름을 git으로 변경합니다.
~/Project-old. - git 폴더를 gitub에서 다시 복제합니다(to
~/Project - 같은 브런치로 체크아웃합니다.
- ★★
cp -r의~/Project-old★★★★★★★★★★★★★★★★★에의 폴더~/Project - 체크인할 필요가 없는 대용량 파일이 다음 중 하나인지 확인합니다.
mved에 ..gitignore★★★★★★★★★★★★★★★★★★. - 「」는 덮어쓰지 .
.git는 최근 된 폴더입니다.~/Project옛날 걸로요.그곳은 문제가 된 역사의 로그가 살고 있는 곳이야! - 이제 변경 내용을 확인합니다.문제가 있는 파일을 제외한 모든 최근 커밋의 결합이어야 합니다.
- 하면, 사항을 확정하는 것이 ★★★★★★★★★★★★★★★★★★,
pushed.'
이 솔루션의 가장 큰 문제는 몇 개의 파일을 수동으로 복사하고 최근의 커밋을 하나로 병합한다는 것입니다(명백히 새로운 커밋 해시).b
큰 장점은 모든 단계에서 매우 명확하고 대용량 파일(및 기밀 파일)에 매우 적합하며 역사에 흔적을 남기지 않는다는 것입니다.
저도 같은 문제가 있었는데, 이런 문제가 있었어요.
- 했다.
x, - 그럼 다시 가고 싶은 곳에 가서 편히 쉬세요
- 그런 다음 새 변경 사항 수정
- 그 후, 원래의 브랜치에서 다른 변경 사항을 모두 선택합니다.
- 원래 브랜치 체크 아웃
- 수정된 복귀 전에 원래 분기를 재설정
- x 분기로 기본 재배치
내 라이더 git 로그:
git checkout -b x 77164a510f1c17ed650b87c2ebf0f7762ac6b2a2 --
git reset --hard 0d038b5e3e3e2adef4bd6aab7653f922c3fdc63f
git add --ignore-errors -A -f -- src/Mores.Warehouse.Core.Api.ClientSdk/Mores.Warehouse.Core.Api.ClientSdk.csproj
git commit -F C:\Users\Hassan\AppData\Local\Temp\git-commit-msg-.txt --amend --
git cherry-pick 77164a510f1c17ed650b87c2ebf0f7762ac6b2a2
git checkout feature/MOR-2947 --
git reset --hard 0d038b5e3e3e2adef4bd6aab7653f922c3fdc63f
git rebase x
언급URL : https://stackoverflow.com/questions/1186535/how-do-i-modify-a-specific-commit
'programing' 카테고리의 다른 글
| Xcode 8 / Swift 3 : "유형 UIView Controller 표현?is unused" 경고 (0) | 2023.04.09 |
|---|---|
| WPF의 dataGridCells에 패딩 설정 (0) | 2023.04.09 |
| 명령줄 인수를 읽고 처리(파스)하려면 어떻게 해야 합니까? (0) | 2023.04.09 |
| VBA + Excel + Try Catch (0) | 2023.04.09 |
| List에서 상속하지 않는 이유는 무엇입니까? (0) | 2023.04.09 |