Git / git push ба git pull

git push ба git pull

Локал дахь commit-уудыг remote руу илгээж, remote-ийн шинэчлэлтийг локал руу татах хоёр үндсэн команд — git push ба git pull.

git push — remote руу илгээх

Локал commit-уудыг remote repository руу илгээх:

bash
git push origin main

Синтакс:

bash
git push <remote-нэр> <branch-нэр>

origin — remote-ийн нэр. main — илгээж буй branch.

Анх удаа push хийхэд нэвтрэх нэр, нууц үг (эсвэл Personal Access Token) асуух болно. SSH key тохируулсан бол асуухгүй.

git push -u — upstream тохируулах

-u тугийг ашиглан локал branch-ийг remote branch-тэй холбоно:

bash
git push -u origin main
код
Branch 'main' set up to track remote branch 'main' from 'origin'.

Нэг удаа -u ашигласны дараа хожим зүгээр git push гэхэд Git origin main гэдгийг өөрөө ойлгоно:

bash
git push        # ← origin main гэж дахин бичих шаардлагагүй

-u нь --set-upstream-ийн товчлол. Шинэ branch анх удаа push хийхэд заавал ашиглана.

Upstream tracking

Upstream tracking нь локал branch болон remote branch хоорондын холболт. Тохируулсны дараа:

bash
git status
код
On branch main
Your branch is ahead of 'origin/main' by 2 commits.
  (use "git push" to publish your local commits)

Локал нь remote-оос хэдэн commit урагш байгааг, буюу remote нь хэдэн commit урагш байгааг харуулна. Ингэснээр синхрончлолын байдлыг хянахад хялбар.

Одоогийн tracking тохируулгыг харах:

bash
git branch -vv
код
* main  a1b2c3d [origin/main: ahead 2] feat: профайл хуудас нэмэх

git pull — remote-аас татах

Remote-ийн шинэчлэлтийг локал руу татах:

bash
git pull

Upstream тохируулагдсан бол remote болон branch-ийг дахин заах шаардлагагүй.

Тодорхой remote ба branch заах:

bash
git pull origin main

git pull нь дотроо хоёр үйлдэл хийдэг:

код
git pull  =  git fetch  +  git merge
  1. git fetch — remote-ийн шинэ commit-уудыг татаж авна (ажлын фолдерт нөлөөлөхгүй)
  2. git merge — тэр commit-уудыг одоогийн branch-тэй нэгтгэнэ

git pull --rebase — merge-ийн оронд rebase

bash
git pull --rebase
код
git pull --rebase  =  git fetch  +  git rebase

Ялгаа: remote-ийн шинэчлэлтийг merge хийхийн оронд rebase хийдэг тул merge commit үүсэхгүй, түүх шулуун үлдэнэ.

Олон хөгжүүлэгчтэй bagт git pull --rebase нийтлэг ашиглагддаг — merge commit-уудаас цэвэр байдаг.

Үүнийг анхдагч болгох:

bash
git config --global pull.rebase true

Шинэ branch push хийх

Локалд үүсгэсэн шинэ branch-ийг remote руу анх удаа илгээх:

bash
git switch -c feature/шинэ-боломж
# ... commit хийх ...
git push -u origin feature/шинэ-боломж

Force push — хүчлэн илгээх

Rebase буюу amend хийсний дараа remote-тай зөрчилдвөл хэвийн push хаагддаг. Хүчлэн бичиж хаях:

bash
git push --force-with-lease

--force-with-lease нь -f / --force-оос аюулгүй — remote-д өөрийн мэдэлгүй шинэ commit байвал хүчлэн push хийхгүй, анхааруулна. Бусдын ажлыг санамсаргүйгээр устгахаас сэргийлнэ.

Хуваалцсан branch дээр force push хийхгүй байх — зөвхөн өөрийн branch дээр ашиглана.

Практик workflow

bash
# Өглөө ажлаа эхлэхэд
git pull                          # Шинэчлэлт татах

# Ажлын явцад
git switch -c feature/шинэ-зүйл
# ... код бичих, commit хийх ...

# GitHub руу илгээх
git push -u origin feature/шинэ-зүйл

# Pull Request үүсгэх → GitHub дээр
# Code review → Merge → main шинэчлэгдэнэ

# main шинэчлэлт татах
git switch main
git pull

Дараагийн хичээлд:

git fetch ашиглан remote-ийн шинэчлэлтийг merge хийлгүйгээр зөвхөн татах аргыг судална.