컨텐츠로 건너뛰기

실행 취소 및 다시 실행 명령

개요

OpenCode의 /undo/redo 명령은 코드 수정 및 대화 기록을 관리하기 위한 강력한 기능을 제공합니다. 이러한 명령을 사용하면 변경사항을 되돌리거나 복원할 수 있어 개발 워크플로우에 유연성과 제어력을 제공합니다.

명령 참조

/undo

대화의 마지막 메시지 또는 코드 수정을 취소합니다. 이에는 Git 저장소가 필요합니다.

단축키: Ctrl+X U

/redo

이전에 취소한 메시지 또는 코드 수정을 다시 실행합니다. 이에는 Git 저장소가 필요합니다.

단축키: Ctrl+X R

작동 원리

OpenCode는 대화 중에 이루어진 변경사항을 추적하기 위해 Git의 버전 제어 기능을 사용합니다. /undo를 사용하면 다음과 같이 작동합니다:

  1. 대화의 현재 상태를 기록합니다
  2. 이전 상태로 되돌아갑니다
  3. 이 변경을 반영하도록 Git 기록을 업데이트합니다

마찬가지로 /redo를 사용하면 다음과 같이 작동합니다:

  1. Git 기록에서 이전에 취소된 변경사항을 확인합니다
  2. 가장 최근에 취소된 상태를 복원합니다
  3. 이 복원을 반영하도록 대화를 업데이트합니다

작동 데모

기본 실행 취소/다시 실행 워크플로우

# 대화 시작
> 이진 검색 알고리즘을 구현하는 방법을 설명하세요

# 코드 구현이 포함된 응답 받기
AI: Python에서의 이진 검색 구현 예시입니다...

# 다른 언어를 묻고 싶다는 것을 깨닫기
> /undo

# JavaScript 구현 요청
> JavaScript에서 이진 검색 알고리즘을 구현하는 방법을 설명하세요

# JavaScript 구현 받기
AI: JavaScript에서의 이진 검색 구현 예시입니다...

# 결국 Python 버전이 더 좋다고 결정
> /undo
> /redo

# 이제 JavaScript 구현으로 돌아감

코드 수정 워크플로우

# 파일로 시작
> @src/utils.js

# AI에게 코드 리팩토링 요청
> 이 코드를 화살표 함수를 사용하도록 리팩토링하세요

# AI가 파일 수정
AI: 화살표 함수를 사용하도록 코드를 리팩토링했습니다...

# 변경사항 검토 후 마음에 들지 않음
> /undo

# 다른 리팩토링 방법 요청
> 이 코드를 더 설명적인 변수명을 사용하도록 리팩토링하세요

# AI가 새로운 변경 적용
AI: 변수명을 설명적으로 업데이트했습니다...

일반적인 시나리오

1. 오류 수정

시나리오: 잘못된 질문을 하거나 잘못된 정보를 제공한 경우.

해결책:

> Python에서 for 루프의 구문은 무엇입니까?
AI: Python에서 for 루프를 작성하는 방법입니다...
> /undo
> Java에서 for 루프의 구문은 무엇입니까?

2. 다양한 접근 방식 탐색

시나리오: 문제에 대한 여러 솔루션을 탐색하려는 경우.

해결책:

> JavaScript에서 배열을 정렬하는 방법은?
AI: Array.sort() 사용하여 배열을 정렬하는 방법입니다...
> /undo
> 내장 메서드를 사용하지 않고 JavaScript에서 배열을 정렬하는 방법은?
AI: 버블 정렬 알고리즘을 구현하는 방법입니다...
> /undo
> /redo
# 첫 번째 솔루션으로 돌아감

3. 코드 변경 관리

시나리오: 원본 코드를 잃지 않고 다양한 코드 변경을 시도하려는 경우.

해결책:

> @src/app.js
> 이 코드를 성능을 위해 최적화하세요
AI: ...를 통해 코드를 최적화했습니다
> /undo
> 이 코드를 가독성을 위해 리팩토링하세요
AI: ...를 통해 코드를 읽기 쉽게 리팩토링했습니다
> /undo
> 두 가지 최적화를 결합하세요

4. 부적절한 제안에서 복구

시나리오: AI가 작동하지 않거나 버그를 도입하는 솔루션을 제공한 경우.

해결책:

> 내 코드의 이 버그를 수정하세요: @src/error.js
AI: ...를 통해 버그를 수정했습니다
> !node test.js
Error: ...
> /undo
> 다른 방법으로 이 버그를 수정하세요

실행 취소 기능의 중요성

실행 취소 기능은 다음과 같은 이유로 중요합니다:

  1. 안전망: 변경사항이 예상대로 작동하지 않는 경우 변경을 되돌리는 방법을 제공합니다
  2. 실험: 물건을 망치지 않는 두려움 없이 다양한 접근 방식을 시도하도록 격려합니다
  3. 학습: 다양한 솔루션을 나란히 비교할 수 있습니다
  4. 효율성: 변경사항이 기대에 맞지 않는 경우 수동 재작업을 피하고 시간을 절약합니다
  5. 자신감: 복잡한 코드 변경을 탐색할 자신감을 줍니다

모범 사례

실행 취소/다시 실행을 사용할 때

  • 대규모 변경 전: 깨끗한 상태에서 시작하기 위해 이전 변경을 취소합니다
  • 예상치 못한 결과 받은 후: 알려진 좋은 상태로 돌아가기 위해 취소합니다
  • 여러 옵션 탐색 시: 다른 솔루션을 비교하기 위해 실행 취소/다시 실행을 사용합니다
  • 코드 검토 중: 원본 코드를 보기 위해 변경을 취소한 후 수정을 보기 위해 다시 실행합니다

효과적인 사용을 위한 팁

  • 키보드 단축키 사용: 시간을 절약하기 위해 실행 취소에는 Ctrl+X U를, 다시 실행에는 Ctrl+X R을 사용하세요
  • 다른 명령과 결합: 긴 대화를 관리하기 위해 /undo/compact와 결합하세요
  • Git 요구 사항에 주의: 이러한 명령을 사용하기 전에 프로젝트가 Git 저장소에 있는지 확인하세요
  • Git 상태 확인: 어떤 변경이 추적되고 있는지 이해하려면 때때로 !git status를 확인하는 것이 도움이 됩니다

문제 해결

일반적인 문제

  1. Git 초기화되지 않음: Git 관련 오류가 표시되면 !git init을 사용하여 저장소를 초기화하세요
  2. 취소할 변경이 없음: /undo가 작동하지 않으면 대화의 시작 부분에 도달했을 수 있습니다
  3. 다시 실행할 변경이 없음: /redo가 작동하지 않으면 가장 최근 상태에 도달했을 수 있습니다
  4. Git 충돌: 드물게 Git 충돌이 발생할 수 있습니다 - 표준 Git 도구를 사용하여 해결하세요

오류 메시지

  • “Git repository not found”: 프로젝트 디렉토리에서 Git 저장소를 초기화하세요
  • “No changes to undo”: 대화의 시작 부분에 도달했습니다
  • “No changes to redo”: 가장 최근 상태에 도달했습니다

고급 사용법

Git 명령과 결합

보다 강력한 버전 제어를 얻기 위해 OpenCode의 실행 취소/다시 실행 명령을 Git 명령과 결합할 수 있습니다:

# OpenCode를 사용하여 변경하기
> @src/main.js
> 이 함수에 오류 처리를 추가하세요

# Git 상태 확인
> !git status

# 필요한 경우 취소
> /undo

# 만족하면 변경사항 커밋
> !git add src/main.js
> !git commit -m "Add error handling"

계획 모드에서의 실행 취소/다시 실행

계획 모드를 사용할 때 실행 취소/다시 실행 명령은 유사하게 작동하지만 계획 상태에도 영향을 줍니다:

> /plan
> Task 1: 사용자 인증 구현
> Task 2: 데이터베이스 통합 추가
> Task 3: API 엔드포인트 생성
> /plan finalize

# 계획을 수정하기 위해 취소
> /undo
> Task 3: RESTful API 엔드포인트 생성
> /plan finalize

결론

/undo/redo 명령은 OpenCode에서 코드 수정 및 대화 기록을 관리하기 위한 필수 도구입니다. 실험을 위한 안전망과 다양한 접근 방식을 비교하는 방법을 제공함으로써 이러한 명령은 보다 자신감 있게 효율적으로 작업할 수 있도록 합니다. 최상의 결과를 얻기 위해 Git과 결합하여 사용하는 것을 잊지 마세요. 필요한 경우 언제든지 되돌아갈 수 있다는 것을 알고 있기 때문에 다양한 솔루션을 시도하는 데 주저하지 마세요.