工作區(qū) < - 緩沖區(qū) <- 版本庫
提交代碼的更改一共分2個階段。
- 1.從工作目錄,提交到stage。
- 2.從stage提交到master。
從工作目錄提交到stage,需要用add或者rm命令,只提交到stage,而沒有提交到master,是不會自動同步到master的。
從stage提交到master用commit命令。
兩種回退操作:
- 1.stage回退到工作目錄, 是用來取消提交操作的;
- 2.master回退到工作目錄, 是用來回滾操作的;
撤銷修改
git checkout -- xxx 讓這個文件回到最近一次git commit或git add時的狀態(tài)。
git reset HEAD xxx可以把暫存區(qū)的修改撤銷掉
- 場景1:當你改亂了工作區(qū)某個文件的內(nèi)容,想直接丟棄工作區(qū)的修改時,用命令git checkout -- file。
- 場景2:當你不但改亂了工作區(qū)某個文件的內(nèi)容,還添加到了暫存區(qū)時,想丟棄修改,分兩步,第一步用命令git reset HEAD file,就回到了場景1,第二步按場景1操作。
- 場景3:已經(jīng)提交了不合適的修改到版本庫時,想要撤銷本次提交,參考版本回退一節(jié),不過前提是沒有推送到遠程庫。
git init 初始化倉庫
git add 添加文件
git commit -m "描述" 上傳文件
git status 查看狀態(tài)
git dif 查看區(qū)別
git reset --hard HEAD^ 恢復(fù)到上一個版本
git reset --hard HEAD^^ 恢復(fù)到上上一個版本
git reset --hard HEAD~100 恢復(fù)到100之前的版本
git log #查看當前版本及之前版本的id 加--pretty=oneline簡化顯示
git log --pretty=oneline
git reflog #查看所有版本的id
git reset --hard xxx 根據(jù)git reflog得到的編號恢復(fù)到那個版本
刪除文件
git rm xxx
git commit -m "remove test.txt"
刪除錯誤要還原
git checkout -- xxx
git checkout其實是用版本庫里的版本替換工作區(qū)的版本,無論工作區(qū)是修改還是刪除,都可以“一鍵還原”。
已有的本地倉庫與之關(guān)聯(lián)
git remote add origin git@github.com:jianpingye/learngit.git
去除本地倉庫與遠程倉庫的關(guān)聯(lián)
git remote rm origin
git push -u origin master本地庫的所有內(nèi)容推送到遠程庫上 第一次
git push origin master本地庫的所有內(nèi)容推送到遠程庫上
git clone克隆一個本地庫
git remote查看遠程庫的信息
git remote -v 顯示更詳細的信息
git push origin branch-name從本地推送分支
git checkout -b branch-name origin/branch-name在本地創(chuàng)建和遠程分支對應(yīng)的分支
git branch --set-upstream branch-name origin/branch-name建立本地分支和遠程分支的關(guān)聯(lián)
創(chuàng)建分支
git checkout -b dev git checkout命令加上-b參數(shù)表示創(chuàng)建并切換,相當于以下兩條命令:
git branch dev 創(chuàng)建分支
git checkout dev 卻換分支
git branch命令查看當前分支
git merge命令用于合并指定分支到當前分支
git branch -d dev刪除分支
查看分支:git branch
創(chuàng)建分支:git branch <name>
切換分支:git checkout <name>
創(chuàng)建+切換分支:git checkout -b <name>
合并某分支到當前分支:git merge <name>
刪除分支:git branch -d <name>
強行刪除:git branch -D <name>
分支沖突:合并時顯示分支沖突先merge 后修改<<<<分支1 <<<<分支2 之間的沖突內(nèi)容,然后在提交. 當前分支會比被合并的分支多commit一次
git log --graph --pretty=oneline --abbrev-commit #查看分支情況
git merge --no-ff <name> #禁用Fast forward,不刪除分支,合并后保留分支
BUG分支:正在dev分支工作,需要修改bug并提交,應(yīng)該先把dev當前工作區(qū)stash儲藏起來.修改完bug提交后在使用 git stash pop恢復(fù)dev的內(nèi)容到工作區(qū).
git stash #儲藏當前工作區(qū)
git stash list #查看
git stash apply <stashid> #恢復(fù)指定內(nèi)容到工作區(qū),不在stash內(nèi)刪除..stashid通過git stash list查詢
git stash drop <stashid> #刪除
git stash pop #恢復(fù)stash的內(nèi)容到工作區(qū),并在stash內(nèi)刪除
git tag <name>新建一個標簽,默認為HEAD,也可以指定一個commit id;
建帶有說明的標簽,用-a指定標簽名,-m指定說明文字
git tag -a <tagname> -m "blablabla..."可以指定標簽信息;
可以通過-s用私鑰簽名一個標簽:
git tag -s <tagname> -m "blablabla..."可以用PGP簽名標簽;
git tag可以查看所有標簽。
git push origin <tagname>可以推送一個本地標簽;
git push origin --tags可以推送全部未推送過的本地標簽;
git tag -d <tagname>可以刪除一個本地標簽;
git push origin :refs/tags/<tagname>可以刪除一個遠程標簽。
更新
git fetch:相當于是從遠程獲取最新版本到本地,不會自動merge
git fetch origin master
git log -p master..origin/master
git merge origin/master
首先從遠程的origin的master主分支下載最新的版本到origin/master分支上
然后比較本地的master分支和origin/master分支的差別
最后進行合并
git pull:相當于是從遠程獲取最新版本并merge到本地
git pull origin master
上述命令其實相當于git fetch 和 git merge
在實際使用中,git fetch更安全一些
因為在merge前,我們可以查看更新情況,然后再決定是否合并