Git 버전 서버에서 사전 수정된 파일과 사후 수정된 파일을 얻는 방법은 무엇입니까?

Git 버전 서버에서 사전 수정된 파일과 사후 수정된 파일을 얻는 방법은 무엇입니까?

이제 이것이 커밋 ID 41f9f4e392ab50db264e0328de7d69f1f10646eb이고 수정된 커밋 ID 코드만 가져오고 싶습니다.

수정된 파일을 보는 데 사용합니다 . Linux 명령을 통해 수정된 버전과 사전 수정된 버전을 git show 41f9f4e392ab50db264e0328de7d69f1f10646eb어떻게 다운로드할 수 있나요 ? 어쨌든 코드를 쉽게 병합할 수 있도록 git커밋 ID 전후의 차이점을 비교하고 싶습니다 .41f9f4e392ab50db264e0328de7d69f1f10646eb

어떤 아이디어라도 도움이 될 것입니다. 미리 감사드립니다.

답변1

특정 커밋 전후의 파일 상태를 보려면 상위 항목을 확인하세요.

git checkout 41f9f4e3~1

그런 다음 스스로 커밋합니다.

git checkout 41f9f4e3

하지만, 이런 식으로 변경 사항의 세부 사항을 볼 필요가 거의 없습니다. 귀하의 경우 커밋을 다른 브랜치에 적용하려면 다음을 선택하세요.

git checkout ${target_branch}
git cherry-pick -x 41f9f4e3

( ${target_branch}적절하게 교체). 이 -x옵션은 체리픽 소스가 포함된 커밋 메시지에 설명을 추가합니다.

답변2

모두에게 감사드립니다. 올바른 방법을 찾았고 여기에 있습니다.

#!/bin/bash
from_id=$1
to_id=$2
#echo $from_id
#echo $to_id
diffpath='patch/diff.log'
newpath='patch/new/'
oldpath='patch/old/'
rm -rf patch
mkdir -p $newpath
mkdir -p $oldpath
git diff $from_id $to_id --raw > $diffpath
cat $diffpath | while  read line
do 
    #echo =====================================
    #echo $line
    OLD_IFS="$IFS"
    IFS=" "
    arr=($line)
    IFS="$OLD_IFS"   
    #echo ${arr[4]}
    filepath=${arr[4]##* }
    #echo $filepath
    newid=${arr[2]%%...}
    #echo $newid
    oldid=${arr[3]%%...}
    #echo $oldid  

   if [ "$newid"x != "0000000"x  ]; then   
     newfilepath=${newpath}${filepath}
     echo $newfilepath
     dirpath=${newfilepath%/*}
     echo $dirpath
     mkdir -p ${dirpath}
     git cat-file -p $newid >  ${newfilepath}
   fi

   if [ "$oldid"x != "0000000"x  ]; then 
     oldfilepath=${oldpath}${filepath} 
     echo $oldfilepath
     dirpath=${oldfilepath%/*}
     echo $dirpath   
     mkdir -p ${dirpath}
     git cat-file -p $oldid >  ${oldfilepath}
   fi   
done 

이 작업을 수행하면 현재 작업 디렉터리에서 patch라는 새 디렉터리를 찾을 수 있습니다.

관련 정보