
โญ src ์ดํ์ ํ์ผ๋ง ๊น์ push ํ๊ณ ์ถ์๋
์ดํด๋ฆฝ์ค ์ํฌ์คํ์ด์ค๋ฅผ C:\Users\joo\Documents\StudyAlgorithm ๊ฒฝ๋ก์์ ์ด์๋๋ฐ
C:\Users\joo\Documents\StudyAlgorithm\StudyAlgorithm\src ์ดํ์ ์๋ ํ์ผ๋ง Git์ ์ฌ๋ฆฌ๊ณ ์ถ๋ค.
.gitignore๋ฅผ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ ํ์ผ๋ค์ ์ ์ธํ๊ณ , src ํด๋๋ง Git์ ์ถ๊ฐํ๋ ๋ฐฉ์์ผ๋ก ์์ ํด์ผ ํ๋ค.
ํด๋ ๊ตฌ์กฐ โผ



C:\Users\joo\Documents\StudyAlgorithm\StudyAlgorithm๋ฅผ ํ๋ก์ ํธ ๋ฃจํธ ๋๋ ํ ๋ฆฌ๋ก ์ค์ ํ๊ณ .gitignore ํ์ผ์ ์ด๊ณ , src ํด๋ ์ธ์ ๋ชจ๋ ํ์ผ์ ์ ์ธํ๋๋ก ์ค์ ํ๋ค.
.gitignore ํ์ผ์ ์๋ ์ฝ๋ ์ถ๊ฐ
/* !/src/
์ด๋ ๊ฒ ํ๋ฉด src ํด๋๋ง Git์ ํฌํจ๋๊ณ , ๋๋จธ์ง ํ์ผ๋ค์ ์ ์ธ๋๋ค.
โ
์์ง Git ์ ์ฅ์๊ฐ ์ด๊ธฐํ๋์ง ์์๋ค๋ฉด, src ํด๋๋ง ํฌํจํ๋๋ก ์ด๊ธฐํ ํ๋ ๋ฒ
cd C:\Users\joo\Documents\StudyAlgorithm\StudyAlgorithm git init
โ
src ํด๋๋ง Git์ ์ถ๊ฐํ๊ธฐ
git add src/
โ
๋ณ๊ฒฝ ์ฌํญ ์ปค๋ฐ
git commit -m "Add src files"
์๊ฒฉ ์ ์ฅ์์ main ๋ธ๋์น๋ก ํธ์
git push origin main
์ด๋ ๊ฒ ํ๋ฉด src ํด๋์ ํ์ผ๋ง Git์ ์
๋ก๋๋๋ค.
C:\Users\joo\Documents\StudyAlgorithm\StudyAlgorithm>git push origin main
To https://github.com/awesomepossumgirl/Algorithm.git
! [rejected] main -> main (non-fast-forward)
error: failed to push some refs to 'https://github.com/awesomepossumgirl/Algorithm.git'
hint: Updates were rejected because a pushed branch tip is behind its remote
hint: counterpart. If you want to integrate the remote changes, use 'git pull'
hint: before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
โ ๋ฌธ์ 1.
ํ์ฌ ๋ก์ปฌ ๋ธ๋์น๊ฐ ์๊ฒฉ ์ ์ฅ์์ main ๋ธ๋์น๋ณด๋ค ๋ค์ณ์ ธ ์๊ธฐ ๋๋ฌธ์ ํธ์๊ฐ ๊ฑฐ๋ถ๋๊ณ ์๋ ๋ฌธ์
โ ํด๊ฒฐํ๊ธฐ ์ํด์๋ ์๊ฒฉ ์ ์ฅ์์ ๋ณ๊ฒฝ ์ฌํญ์ ๋จผ์ ํตํฉํ ํ Push
์๊ฒฉ์ ์ฅ์ ๋ณ๊ฒฝ ์ฌํญ ๊ฐ์ ธ์ค๊ธฐ
git pull --rebase
git pull origin main --rebase
๋ฆฌ๋ฒ ์ด์ค ์๋ฃ ํ ํธ์
git push origin main
๊ฐ์ ํธ์
โ ์๊ฒฉ ์ ์ฅ์์ ์ปค๋ฐ ์ด๋ ฅ์ ๋ฎ์ด์ธ ์ ์๊ธฐ ๋๋ฌธ์ ์ฃผ์
git push origin main --force
error: could not apply 9a83d91... Update .gitignore to exclude .metadata and StudyAlgorithm
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
hint: Disable this message with "git config advice.mergeConflict false"
Could not apply 9a83d91... Update .gitignore to exclude .metadata and StudyAlgorithm
โ ๋ฌธ์ 2.
ํ์ฌ ๋ฆฌ๋ฒ ์ด์ค ์ค์ .gitignore ํ์ผ์์ ์ถฉ๋์ด ๋ฐ์ํ ์ํ์ด๋ค.
์ถฉ๋์ ํด๊ฒฐํ๋ ค๋ฉด, ์ถฉ๋๋ ํ์ผ์ ์๋์ผ๋ก ์์ ํ ํ ๋ค์ ๋ฆฌ๋ฒ ์ด์ค๋ฅผ ์งํํด์ผ ํ๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ
์ถฉ๋ ํ์ผ ํ์ธ ๋ฐ ์์ : ์ถฉ๋์ด ๋ฐ์ํ ํ์ผ (.gitignore)์ ์ด์ด์ ์ถฉ๋์ ํด๊ฒฐํ๋ค. ์ถฉ๋๋ ๋ถ๋ถ์ Git์ด <<<<<<<, =======, >>>>>>>์ ๊ฐ์ ๋ง์ปค๋ก ํ์๋๋ค. ์ด ๋ถ๋ถ์ ์์ ํ ์ต์ข
์ ์ธ .gitignore ํ์ผ์ ์ ์ฅํ๋ค. ์ถฉ๋์ ํด๊ฒฐํ ํ์ ํด๋น ํ์ผ์ ์คํ
์ด์งํ๋ฉด ๋๋ค.


์คํ
์ด์ง
git add .gitignore
๋ฆฌ๋ฒ ์ด์ค ๊ณ์ ์งํ
git rebase --continue
๋ฆฌ๋ฒ ์ด์ค ์ค์ง/์ทจ์
git rebase --abort
๋ฆฌ๋ฒ ์ด์ค ์๋ฃ ํ ํธ์
git push origin main



โ ๋ฌธ์ 3.
์๊ฒฉ ์ ์ฅ์์ ํธ์ ์๋ฃํ์ผ๋ algo01, algo02, algo03 ํจํค์ง๊ฐ ๋ก์ปฌ์์ ์ฌ๋ผ์ง, ๋ก์ปฌ์์ ์ญ์ ๋ ํ์ผ๋ค์ ๋ณต๊ตฌํ๋ ค๋ฉด, Git์์ ์ด์ ์ปค๋ฐ์ผ๋ก ๋์๊ฐ์ ๋ณต์ํด์ผ ํ๋ค.
์ด์ ์ปค๋ฐ ์ฐพ๊ธฐ
git reflog ๋ช
๋ น์ผ๋ก ๋ก์ปฌ์์ ๋ฐ์ํ Git ์์
์ ํ์คํ ๋ฆฌ๋ฅผ ํ์ธํ๊ณ , ์ญ์ ๋๊ธฐ ์ ์ ์ปค๋ฐ๋ ์ํ๋ก ๋๋๋ฆด ์ ์๋ค.
git reflog
์ด์ ์ปค๋ฐ์ผ๋ก ๋์๊ฐ๊ธฐ
์ฌ๊ธฐ์ ์ญ์ ๋๊ธฐ ์ ์ ์ปค๋ฐ์ ์ฐพ์ ํด๋น ์ปค๋ฐ์ผ๋ก ๋์๊ฐ ์ ์๋๋ฐ,
์๋ฅผ ๋ค์ด, HEAD@{3}์ด ํด๋น ์ปค๋ฐ์ด๋ผ๋ฉด checkout ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ค.
git checkout HEAD@{3}
๋ด๊ฐ ๊ฒช์ ๋ฌธ์ ์ฒ๋ผ, algo01 ํจํค์ง์ ๊ทธ ์์ ํ์ผ์ ๋ณต๊ตฌํ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค.
๋์ผํ ๋ฐฉ์์ผ๋ก algo02, algo03 ํจํค์ง๋ ๋ณต๊ตฌํ ์ ์๋ค.
git checkout HEAD -- src/algo01
๋ก์ปฌ ๋ณ๊ฒฝ ์ฌํญ ํ์ธํ๊ณ ๋ณต๊ตฌํ๊ธฐ
git status
`git status` ๋ช
๋ น์ผ๋ก ๋ก์ปฌ์์ ์ด๋ค ๋ณ๊ฒฝ ์ฌํญ์ด ์๋์ง ํ์ธํ ์ ์๋ค. ๋ก์ปฌ์์ ํ์ผ์ด ์ญ์ ๋์์ง๋ง Git์์ ์์ง ์ถ์ ํ์ง ์๊ณ ์์ ์๋ ์๊ธฐ ๋๋ฌธ์ git status๋ก ํ์ฌ ์ํ๋ฅผ ์ ๊ฒํ ์ ์๊ณ , ๋ณ๊ฒฝ ์ฌํญ์ด ์๋ค๋ฉด, ๊ทธ ๋ณ๊ฒฝ ์ฌํญ์ ์ปค๋ฐํ๊ณ ํธ์ํ ์ ์๋ค.
๋ง์ฝ ๋ก์ปฌ์์ ์ญ์ ๋ ํ์ผ๋ค์ด ์ด๋ฏธ Git์์ ์ถ์ ๋๊ณ ์์๋ค๋ฉด, `git restore` ๋ช
๋ น์ ์ฌ์ฉํด ๋ณต๊ตฌํ ์ ์๋ค.
โญalgo01 ํจํค์ง๋ง ๋ณต๊ตฌํ๋ ๋ฒ (ํ์๋ ์ด ๋ฐฉ๋ฒ์ผ๋ก ํด๊ฒฐํจ)
git restore src/algo01
โญ์ ์ฒด์ ์ผ๋ก ๋ณต๊ตฌํ๋ ๋ฒ
git restore .
๊ฐ์ ๋ก ํธ์ํด์ ๋ก์ปฌ๊ณผ ์๊ฒฉ ์ ์ฅ์ ๋ง์ถ๊ธฐ
๋ก์ปฌ๊ณผ ์๊ฒฉ ์ ์ฅ์๊ฐ ๋ค๋ฅธ ์ํ๋ผ๋ฉด, ์๊ฒฉ ์ ์ฅ์์์ ํ์ผ์ ํ์ธํ๊ณ ๋ก์ปฌ ์ํ๋ฅผ ๋ง์ถ๋ ์์ ์ ํด์ผ ํ๋ค.
์ด ๋, ์๊ฒฉ ์ ์ฅ์์ ์ํ๋ฅผ ๋ก์ปฌ๋ก ๊ฐ์ ๋ก ๊ฐ์ ธ์ฌ ์ ์๋ค. ์ด ๋ช ๋ น์ ์๊ฒฉ ์ ์ฅ์์ main ๋ธ๋์น ์ํ๋ก ๋ก์ปฌ ๋ธ๋์น๋ฅผ ๋ฎ์ด์ฐ๊ฒ ๋๋ค. ๊ทธ๋์ ํ์ผ๋ค์ด ๋ณต์ ๋ ์ ์๋ค.
git fetch origin
git reset --hard origin/main

โญ src ์ดํ์ ํ์ผ๋ง ๊น์ push ํ๊ณ ์ถ์๋
์ดํด๋ฆฝ์ค ์ํฌ์คํ์ด์ค๋ฅผ C:\Users\joo\Documents\StudyAlgorithm ๊ฒฝ๋ก์์ ์ด์๋๋ฐ
C:\Users\joo\Documents\StudyAlgorithm\StudyAlgorithm\src ์ดํ์ ์๋ ํ์ผ๋ง Git์ ์ฌ๋ฆฌ๊ณ ์ถ๋ค.
.gitignore๋ฅผ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ ํ์ผ๋ค์ ์ ์ธํ๊ณ , src ํด๋๋ง Git์ ์ถ๊ฐํ๋ ๋ฐฉ์์ผ๋ก ์์ ํด์ผ ํ๋ค.
ํด๋ ๊ตฌ์กฐ โผ



C:\Users\joo\Documents\StudyAlgorithm\StudyAlgorithm๋ฅผ ํ๋ก์ ํธ ๋ฃจํธ ๋๋ ํ ๋ฆฌ๋ก ์ค์ ํ๊ณ .gitignore ํ์ผ์ ์ด๊ณ , src ํด๋ ์ธ์ ๋ชจ๋ ํ์ผ์ ์ ์ธํ๋๋ก ์ค์ ํ๋ค.
.gitignore ํ์ผ์ ์๋ ์ฝ๋ ์ถ๊ฐ
/* !/src/
์ด๋ ๊ฒ ํ๋ฉด src ํด๋๋ง Git์ ํฌํจ๋๊ณ , ๋๋จธ์ง ํ์ผ๋ค์ ์ ์ธ๋๋ค.
โ
์์ง Git ์ ์ฅ์๊ฐ ์ด๊ธฐํ๋์ง ์์๋ค๋ฉด, src ํด๋๋ง ํฌํจํ๋๋ก ์ด๊ธฐํ ํ๋ ๋ฒ
cd C:\Users\joo\Documents\StudyAlgorithm\StudyAlgorithm git init
โ
src ํด๋๋ง Git์ ์ถ๊ฐํ๊ธฐ
git add src/
โ
๋ณ๊ฒฝ ์ฌํญ ์ปค๋ฐ
git commit -m "Add src files"
์๊ฒฉ ์ ์ฅ์์ main ๋ธ๋์น๋ก ํธ์
git push origin main
์ด๋ ๊ฒ ํ๋ฉด src ํด๋์ ํ์ผ๋ง Git์ ์
๋ก๋๋๋ค.
C:\Users\joo\Documents\StudyAlgorithm\StudyAlgorithm>git push origin main
To https://github.com/awesomepossumgirl/Algorithm.git
! [rejected] main -> main (non-fast-forward)
error: failed to push some refs to 'https://github.com/awesomepossumgirl/Algorithm.git'
hint: Updates were rejected because a pushed branch tip is behind its remote
hint: counterpart. If you want to integrate the remote changes, use 'git pull'
hint: before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
โ ๋ฌธ์ 1.
ํ์ฌ ๋ก์ปฌ ๋ธ๋์น๊ฐ ์๊ฒฉ ์ ์ฅ์์ main ๋ธ๋์น๋ณด๋ค ๋ค์ณ์ ธ ์๊ธฐ ๋๋ฌธ์ ํธ์๊ฐ ๊ฑฐ๋ถ๋๊ณ ์๋ ๋ฌธ์
โ ํด๊ฒฐํ๊ธฐ ์ํด์๋ ์๊ฒฉ ์ ์ฅ์์ ๋ณ๊ฒฝ ์ฌํญ์ ๋จผ์ ํตํฉํ ํ Push
์๊ฒฉ์ ์ฅ์ ๋ณ๊ฒฝ ์ฌํญ ๊ฐ์ ธ์ค๊ธฐ
git pull --rebase
git pull origin main --rebase
๋ฆฌ๋ฒ ์ด์ค ์๋ฃ ํ ํธ์
git push origin main
๊ฐ์ ํธ์
โ ์๊ฒฉ ์ ์ฅ์์ ์ปค๋ฐ ์ด๋ ฅ์ ๋ฎ์ด์ธ ์ ์๊ธฐ ๋๋ฌธ์ ์ฃผ์
git push origin main --force
error: could not apply 9a83d91... Update .gitignore to exclude .metadata and StudyAlgorithm
hint: Resolve all conflicts manually, mark them as resolved with
hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
hint: You can instead skip this commit: run "git rebase --skip".
hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
hint: Disable this message with "git config advice.mergeConflict false"
Could not apply 9a83d91... Update .gitignore to exclude .metadata and StudyAlgorithm
โ ๋ฌธ์ 2.
ํ์ฌ ๋ฆฌ๋ฒ ์ด์ค ์ค์ .gitignore ํ์ผ์์ ์ถฉ๋์ด ๋ฐ์ํ ์ํ์ด๋ค.
์ถฉ๋์ ํด๊ฒฐํ๋ ค๋ฉด, ์ถฉ๋๋ ํ์ผ์ ์๋์ผ๋ก ์์ ํ ํ ๋ค์ ๋ฆฌ๋ฒ ์ด์ค๋ฅผ ์งํํด์ผ ํ๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ
์ถฉ๋ ํ์ผ ํ์ธ ๋ฐ ์์ : ์ถฉ๋์ด ๋ฐ์ํ ํ์ผ (.gitignore)์ ์ด์ด์ ์ถฉ๋์ ํด๊ฒฐํ๋ค. ์ถฉ๋๋ ๋ถ๋ถ์ Git์ด <<<<<<<, =======, >>>>>>>์ ๊ฐ์ ๋ง์ปค๋ก ํ์๋๋ค. ์ด ๋ถ๋ถ์ ์์ ํ ์ต์ข
์ ์ธ .gitignore ํ์ผ์ ์ ์ฅํ๋ค. ์ถฉ๋์ ํด๊ฒฐํ ํ์ ํด๋น ํ์ผ์ ์คํ
์ด์งํ๋ฉด ๋๋ค.


์คํ
์ด์ง
git add .gitignore
๋ฆฌ๋ฒ ์ด์ค ๊ณ์ ์งํ
git rebase --continue
๋ฆฌ๋ฒ ์ด์ค ์ค์ง/์ทจ์
git rebase --abort
๋ฆฌ๋ฒ ์ด์ค ์๋ฃ ํ ํธ์
git push origin main



โ ๋ฌธ์ 3.
์๊ฒฉ ์ ์ฅ์์ ํธ์ ์๋ฃํ์ผ๋ algo01, algo02, algo03 ํจํค์ง๊ฐ ๋ก์ปฌ์์ ์ฌ๋ผ์ง, ๋ก์ปฌ์์ ์ญ์ ๋ ํ์ผ๋ค์ ๋ณต๊ตฌํ๋ ค๋ฉด, Git์์ ์ด์ ์ปค๋ฐ์ผ๋ก ๋์๊ฐ์ ๋ณต์ํด์ผ ํ๋ค.
์ด์ ์ปค๋ฐ ์ฐพ๊ธฐ
git reflog ๋ช
๋ น์ผ๋ก ๋ก์ปฌ์์ ๋ฐ์ํ Git ์์
์ ํ์คํ ๋ฆฌ๋ฅผ ํ์ธํ๊ณ , ์ญ์ ๋๊ธฐ ์ ์ ์ปค๋ฐ๋ ์ํ๋ก ๋๋๋ฆด ์ ์๋ค.
git reflog
์ด์ ์ปค๋ฐ์ผ๋ก ๋์๊ฐ๊ธฐ
์ฌ๊ธฐ์ ์ญ์ ๋๊ธฐ ์ ์ ์ปค๋ฐ์ ์ฐพ์ ํด๋น ์ปค๋ฐ์ผ๋ก ๋์๊ฐ ์ ์๋๋ฐ,
์๋ฅผ ๋ค์ด, HEAD@{3}์ด ํด๋น ์ปค๋ฐ์ด๋ผ๋ฉด checkout ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ค.
git checkout HEAD@{3}
๋ด๊ฐ ๊ฒช์ ๋ฌธ์ ์ฒ๋ผ, algo01 ํจํค์ง์ ๊ทธ ์์ ํ์ผ์ ๋ณต๊ตฌํ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค.
๋์ผํ ๋ฐฉ์์ผ๋ก algo02, algo03 ํจํค์ง๋ ๋ณต๊ตฌํ ์ ์๋ค.
git checkout HEAD -- src/algo01
๋ก์ปฌ ๋ณ๊ฒฝ ์ฌํญ ํ์ธํ๊ณ ๋ณต๊ตฌํ๊ธฐ
git status
git status
๋ช
๋ น์ผ๋ก ๋ก์ปฌ์์ ์ด๋ค ๋ณ๊ฒฝ ์ฌํญ์ด ์๋์ง ํ์ธํ ์ ์๋ค. ๋ก์ปฌ์์ ํ์ผ์ด ์ญ์ ๋์์ง๋ง Git์์ ์์ง ์ถ์ ํ์ง ์๊ณ ์์ ์๋ ์๊ธฐ ๋๋ฌธ์ git status๋ก ํ์ฌ ์ํ๋ฅผ ์ ๊ฒํ ์ ์๊ณ , ๋ณ๊ฒฝ ์ฌํญ์ด ์๋ค๋ฉด, ๊ทธ ๋ณ๊ฒฝ ์ฌํญ์ ์ปค๋ฐํ๊ณ ํธ์ํ ์ ์๋ค.
๋ง์ฝ ๋ก์ปฌ์์ ์ญ์ ๋ ํ์ผ๋ค์ด ์ด๋ฏธ Git์์ ์ถ์ ๋๊ณ ์์๋ค๋ฉด, git restore
๋ช
๋ น์ ์ฌ์ฉํด ๋ณต๊ตฌํ ์ ์๋ค.
โญalgo01 ํจํค์ง๋ง ๋ณต๊ตฌํ๋ ๋ฒ (ํ์๋ ์ด ๋ฐฉ๋ฒ์ผ๋ก ํด๊ฒฐํจ)
git restore src/algo01
โญ์ ์ฒด์ ์ผ๋ก ๋ณต๊ตฌํ๋ ๋ฒ
git restore .
๊ฐ์ ๋ก ํธ์ํด์ ๋ก์ปฌ๊ณผ ์๊ฒฉ ์ ์ฅ์ ๋ง์ถ๊ธฐ
๋ก์ปฌ๊ณผ ์๊ฒฉ ์ ์ฅ์๊ฐ ๋ค๋ฅธ ์ํ๋ผ๋ฉด, ์๊ฒฉ ์ ์ฅ์์์ ํ์ผ์ ํ์ธํ๊ณ ๋ก์ปฌ ์ํ๋ฅผ ๋ง์ถ๋ ์์ ์ ํด์ผ ํ๋ค.
์ด ๋, ์๊ฒฉ ์ ์ฅ์์ ์ํ๋ฅผ ๋ก์ปฌ๋ก ๊ฐ์ ๋ก ๊ฐ์ ธ์ฌ ์ ์๋ค. ์ด ๋ช ๋ น์ ์๊ฒฉ ์ ์ฅ์์ main ๋ธ๋์น ์ํ๋ก ๋ก์ปฌ ๋ธ๋์น๋ฅผ ๋ฎ์ด์ฐ๊ฒ ๋๋ค. ๊ทธ๋์ ํ์ผ๋ค์ด ๋ณต์ ๋ ์ ์๋ค.
git fetch origin
git reset --hard origin/main