Git基本操作
安裝完Git,在開始菜單打開Git Bash後,先設置Git登錄信息
git config --global user.name "Name"
git config --global user.email "[email protected]"
常見文件位置操作:
pwd #當前目錄
cd
mkdir #新建文件夾
第一步,將當前目錄變爲git的本地版本庫(倉庫)。文件在工作區中,工作區與電腦裏的目錄相同。
git init
第二步,添加add文件到暫存區(Stage)。注意添加多個文件的格式,否則會被識別爲untracked File。
git add 1.txt
git add 2.txt 3.txt #添加多個文件
第三步,一次性提交所有暫存區文件到本地版本庫master分支(分支可切換)中,-m參數message意爲本次說明。
git commit -m '此版本說明'
文件的add + commit + push/pull命令經常會用到,具體見下文。
恭喜你!基本的操作已經學會了。至此代碼們提交到了Git的工作區中,可以開始恣意縱情的寫代碼了,有不同的修改也可以根據提交記錄恢復。
工作區、暫存區、版本庫關係如下圖所示:
文檔版本管理
git status #查詢Git當前狀態,常用。
git diff 1.txt #查詢代碼與暫存區的修改區別
git log #查詢git歷史,顯示太多時按q退出。加--graph參數圖形化顯示
git reflog #查詢歷史版本號
修改出問題了怎麼辦,嘗試下版本回退,但是在還沒把本地版本庫推送到遠程前。reset既可以回退,也可以把暫存區回退到工作區。Git自動創建的第一個分支叫master,指向master的一個指針叫HEAD。
git reset --hard HEAD^
git reset --hard HEAD^^ #回退到上上次
git reset --hard HEAD~77 #回退第前77次修改
git reset --hard HEAD 8yfhY45 #回退到具體的版本號
撤銷此次修改
git checkout -- 1.txt
刪除暫存區中add的文件,不影響工作區的實際文件
git rm --cache 1.txt #帶--cache參數不影響實際文件;或者-f參數將實際文件也刪除
刪除暫存區及工作區文件,如果commit過了可用 ‘checkout – 版本’ 撤銷,否則就找不到啦~
rm 1.txt
刪除及整理某次commit歷史
git rebase -i HEAD~1 #刪除上次的
git rebase -i 9fbf10 #對id前幾位爲9fbf10之後的commit進行rebase
git rebase #將分叉的commit歷史整理成一條直線,但本地的分叉提交歷史會被修改
想忽略某些文件不提交,需新建.gitignore文件寫入要忽略的文檔名
touch .gitignore
# 在git bash中命令新建.gitignore,打開並寫入如下規則的目錄:
*.log #所有log格式文件
*.temp
/folder # /某文件夾
1.txt #具體的某文檔名
連接GitHub遠程倉庫
通過驗證SSH Key將本地的testgit倉庫與Github倉庫連接,遠程庫的名字是origin:
git remote add origin https://github.com/Aeron9000/testgit #與遠程倉庫建立連接
git push -u origin master #本地倉庫推送到遠程倉庫,第一次帶-u參數關聯本地遠程
git push origin master #本地推送到遠程倉庫,推送主分支master
git pull origin master #拉取遠程倉庫master分支並與本地合併
git fetch origin master #只拉取遠程倉庫到本地。合併還要merge origin/master
git clone https://github.com/Aeron9000/testgit #遠程倉庫克隆到本地
Git分支管理
git branch chs #創建chs分支
git checkout -b chs #創建並切換到chs分支,只切換不帶-b參數
git branch #查看本地分支
git branch -r #查看遠程現在分支
git merge chs #在master下與chs合併。加--no-ff參數可保留原分支,往前走一個版本
git branch -d chs #刪除chs分支
注:
在當前分支下刪除此分支則會報錯,
error: Cannot delete branch ‘chs’ checked out at 'C:/Users/testgit’
如果分支合併產生衝突,則在merge之後(可用git status查詢),修改1.txt並再次add + commit該文件可以解決衝突。
遠程協作管理,遠程庫的默認名是origin:
git merge –no-ff -m “註釋” bno #不用Fast Forword模式合併
git stash #隱藏該分支
git stash list
git stash pop #恢復該分支並刪除stash list中的
git remote #查詢遠程庫
git remote -v #查詢遠程庫詳細信息
git remote rm origin #刪遠程庫
多人協作
git push origin chs #chs分支推送到遠程庫
git checkout -b chs origin/chs #遠程origin的chs分支到本地
git pull #最新的提交從origin/chs抓下,在本地合併解決衝突
推送分支步驟:
- master分支是主分支,因此要時刻與遠程同步。
- 一些修復bug分支不要推送,可以先合併到主分支上,然後把主分支master推送到遠程。
多人協作模式:
- 首先,試圖用git push origin chs推送自己的修改。
- 如果推送失敗,則因爲遠程分支比你的本地更新早,需要用git pull試圖合併。
- 如果合併衝突,則需要解決衝突,並在本地提交,再用git push origin branch-name推送。
常見報錯應對
- " Your branch is up to date with ‘origin/master’. "
分支問題,需要新建並切換checkout到新分支再add+commit,等merge分支後再push到遠程倉庫。
- " Updates were rejected because the tip of your current branch is behind hint: its remote counterpart. Integrate the remote changes (e.g. hint: ‘git pull …’) before pushing again."
git push -f -u origin master 強推至遠程服務器,會強制刪除遠程倉庫中衝突文件。或者,git pull origin master --allow-unrelated-histories
- " Changes not staged for commit. "
沒有add文件,或者儘管add了但是存在大小寫不對應問題。
- " Please enter a commit message to explain why this merge is necessary."
因爲本地庫的代碼跟遠程庫有衝突需要合併,可修改完後按ESC,然後輸入":wq"
學習更多詳細的Git參考:
https://www.liaoxuefeng.com/wiki/896043488029600