git基本命令(基於廖雪峰的git教程)
建立版本庫(在合適的位置):
$ mkdir learngit(目錄名)
$ cd learngit(檔名)
顯示當前目錄:
$ pwd
將目錄變成Git可以管理的倉庫:
$ git init
將檔案新增到倉庫:
$ git add <file>
將檔案提交到倉庫:
$ git commit -m <message>
git add命令實際上就是把要提交的所有修改放到暫存區(stage),git commit可以一次性把暫存區的所有修改提交到分支。
顯示倉庫當前的狀態:
$ git status
檢視difference:
$ git diff
$ git dif #是工作區(work dict)和暫存區(stage)的比較
$ git diff --cached #是暫存區(stage)和分支(master)的比較
$ git diff HEAD #檢視工作區和版本庫裡面最新版本的區別
e.g. $ git diff HEAD -- readme.txt #檢視工作區和版本庫中readme.txt檔案的區別
檢視提交歷史:
$ git log
git中HEAD表示當前版本,上個版本就是HEAD^,上上個版本是HEAD^^...往上100個版本寫成HEAD~100.
將當前版本回退到上個版本:
$ git reset --hard HEAD^
檢視歷史命令:
$ git reflog
指定回到某個版本:
$git reset --hard <id>(版本號)
撤銷工作區的修改:
$ git checkout -- <file>
一種是<file>自修改後還沒有被放到暫存區,現在,撤銷修改就回到和版本庫一模一樣的狀態
一種是<file>已經新增到暫存區後,又做了修改,現在,撤銷修改就回到新增暫存區後的狀態
總之,就是讓檔案回到最近一次git commit或git add時的狀態
撤銷暫存區的修改:
$ git reset HEAD <file>
再撤銷工作區的修改就回到了亂改前的狀態
在檔案管理器中刪除檔案:
$ rm <file>
從版本庫中刪除檔案(避免工作區和版本庫不一致):
$ git rm <filr>
並且提交:$ git commit -m "remove <file>"
恢復檔案,即用版本庫中的版本替換工作區的版本:
$ git checkout -- <file>
將本地分支的修改推送至遠端庫:
$ git push origin(預設,可修改) <branch-name>
克隆倉庫:
$ git clone
檢視分支:
$ git branch
建立分支:
$ git branch <name>
切換分支:
$ git checkout <name>
建立+切換分支:
$ git checkout -b <name>
合併某分支到當前分支:
$ git merge <name>
刪除分支:
$ git branch -d <name>
強行刪除分支:
$ git branch -D <name> #未合併的分支
刪除 一些 沒有 git add 的 檔案:
$ git clean -f
帶引數的git log檢視分支的合併情況:
$ git log --graph --pretty=oneline ==abbrev-commit
解決衝突:
當git無法自動合併分支時,就必須先解決衝突。解決衝突後,再提交,合併完成。
解決衝突就是吧git合併失敗的檔案手動編輯為我們希望的內容,再提交。
禁用Fast forward模式合併分支:
通常,git預設用Fast forward模式合併分支,但這種模式刪除分支後會丟失分支資訊。
禁用Fast forward模式就會在merge時生成一個新的commit,這樣就可以從分支歷史上看出分支資訊.
$ git merge --no-ff -m 'discription' <branch-name>
“儲藏”當前工作現場:
$ git stash
恢復工作:
$ git stash list #檢視stash內容
$ git stash apply #恢復,恢復後stash內容不會刪除
$ git stash drop #恢復的同時刪除stash內容
檢視遠端庫的資訊:
$ git remote
$ git remote -v #顯示更詳細的資訊
多人協作的工作模式:
1.首先,可以試圖用git push origin <branch-name>推送自己的修改;
2.如果推送失敗,則因為遠端分支比你的本地更新,需要先用git pull試圖合併;
3.如果合併有衝突,則解決衝突,並在本地提交;
4.沒有衝突或者解決掉衝突後,再用git push origin <branch-name>推送就能成功。
如果git pull提示no tracking information,則說明本地分支和遠端分支的連結關係沒有建立,用命令
git branch --set -upstream-to <branch-name> origin/<branch-name>
將分岔的提交歷史“整理”成一條直線:
$ git rebase #看上去更直觀,缺點是本地的分叉提交已經被修改過了
建立標籤:
$ git tag <tagname> #當前分支最新提交的commit
$ git tag <tagname> <commit id> #當前分支的歷史提交記錄
指定標籤資訊:
$ git tag -a <tagname> -m 'discription'
檢視所有標籤:
$ git tag
注意,標籤是不按照時間順序列出,而是按照字母拍排序的。
檢視標籤資訊:
$ git show <tagname>
刪除標籤:
$ git tag -d <tagname>
推送某個本地標籤到遠端:
$ git push origin <tagname>
一次性推送全部尚未推送到遠端的本地標籤:
$ git push origin --tags
刪除已經推送到遠端的標籤:
先從本地刪除$ git tag -d <tagname>
再從遠端刪除$ git push origin :refs/tags/<tagname> #注意origin後面有空格
忽略特殊檔案:
忽略某些檔案時,需要編寫 .gitignore
.gitignore檔案本身要放到版本庫裡,並且可以對 .gitignore作版本管理
配置別名:
$ git config --golbal alias st status #st就表示status
$ git config --golbal alias unstage 'reset HEAD' #unstage就表示reset HEAD
--global是全域性引數,在該電腦的所有git倉庫下都有用
每個git倉庫的配置檔案都放在 .git/config檔案中,別名就在 .git/config檔案中的[alias]後面,可在此配置別名