1. 程式人生 > >git基本命令(基於廖雪峰的git教程)

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]後面,可在此配置別名