Git 學習之路

290760-e8491f69473bf200.jpg

目錄

  • clone
  • add
  • commit
  • checkout
  • pull
  • push
  • branch
  • reset
  • diff
  • log
  • status
  • tag
  • rebase
  • cherry
  • stash
  • config
  • revert
  • reflog
遠程倉庫操作

檢出倉庫:$ git clone git://github.com/jquery/jquery.git
查看遠程倉庫:$ git remote -v
添加遠程倉庫:$ git remote add [name] [url]
刪除遠程倉庫:$ git remote rm [name]
修改遠程倉庫:$ git remote set-url --push [name] [newUrl]
拉取遠程倉庫:$ git pull [remoteName] [localBranchName]
推送遠程倉庫:$ git push [remoteName] [localBranchName]

分支操作

  • 提交本地分支到遠程分支
    如果想把本地的某個分支test提交到遠程倉庫,并作為遠程倉庫的master分支,或者作為另外一個名叫test的分支,如下:
    $ git push origin test:master // 提交本地test分支作為遠程的master分支
    $ git push origin test:test // 提交本地test分支作為遠程的test分支
  • 刪除遠程分支:
    git push origin :branch-name
    冒號前面的空格不能少,原理是把一個空分支push到server上,相當于刪除該分支。

分支(branch)操作相關命令
查看本地分支:$ git branch
查看遠程分支:$ git branch -r (如果還是看不到就先 git fetch origin 先)
創建本地分支:$ git branch [name] ----注意新分支創建后不會自動切換為當前分支
切換分支:$ git checkout [name]
創建新分支并立即切換到新分支:$ git checkout -b [name]
直接檢出遠程分支:$ git checkout -b [name] [remoteName] (如:git checkout -b myNewBranch origin/dragon)

git clone

git clone <repository> <directory>,將repository指向的版本庫創建一個克隆到directory目錄中。目錄directory相當于克隆版本庫的工作區,文件都會檢出,版本庫位于工作區下得.git目錄中。
git clone --bare <repository> <directory.git>
git clone --mirror <repository> <directory.git>
上面的兩種克隆版本都不包含工作區,直接就是版本庫的內容,這樣的版本庫稱為裸版本庫。

git branch

git branch,顯示當前所在的分支
git branch <branchname>,創建新的分支branchname
git branch -d <branchname> ,刪除名稱為branchname的分支

git checkout

git checkout branchname,會改變HEAD頭指針,主要用于切換分支
git checkout -b branchname,用于創建一個新的分支,并且切換到創建的新的分支上
git checkout --filename,用暫存區中的filename文件來覆蓋工作區中的filename文件
git checkout branch --filename,用版本庫中的filename文件來覆蓋暫存區和工作區中的filename文件
git checkout <commit> --filename,用指定提交中的文件覆蓋暫存區和工作區中對應的文件
git checkout -- .或者git checkout .,用暫存區的所有文件直接覆蓋本地文件,取消所有的本地的修改,是一條危險的操作

git rm

rm命令刪除的文件只是在本地進行了刪除,尚未添加到暫存區,也就是說,直接在工作區刪除,對暫存區和版本庫沒有任何影響。
git rm命令會將刪除動作加入暫存區,這是執行提交動作,就從真正意義上執行了文件刪除

git reset

把當前分支指向另一個位置,并且有選擇的變動工作目錄和索引
git reset --hard <commit>,替換引用的指向,替換暫存區和工作區
git reset --soft <commit>,只更改引用的指向,不影響暫存區和工作區的內容,但是**將commitID之后的修改置為暫存區狀態,版本庫的內容變更為上個提交之前的內容**。撤銷版本庫的提交至暫存區git reset,用HEAD指向的目錄樹重置暫存區,不會影響工作區的內容,但是暫存區和版本庫的內容就變更為commitID 之前的。撤銷版本庫和暫存區的提交至工作區,變為未提交狀態`
git reset -- filename,將文件filename的改動撤出暫存區,暫存區其他文件不變,但不影響工作區。

git add

git add 在提交你修改的文件之前,你需要把它們添加到暫存區。如果該文件是新創建的,你可以執行將該文件添加到暫存區
git add . Git會遞歸地將你執行命令時所在的目錄中的所有文件添加上去,所以如果你將當前的工作目錄作為參數,它就會追蹤那兒的所有文件
git add -u 使用-u參數調用了git add命令,會將本地有改動(包括刪除和修改)的已經追蹤的文件標記到暫存區中。
git add -A 使用-A參數會將添加所有改動的已跟蹤文件和未跟蹤文件。
git add -i,交互式的方式進行添加。

git status

git status,查看你的代碼在緩存與當前工作目錄的狀態
git status -s,將結果以簡短的形式輸出

git diff

git diff <file> 比較當前文件和暫存區文件差異 git diff
git diff <id1><id2> 比較兩次提交之間的差異
git diff <branch1> <branch2> # 在兩個分支之間比較
git diff --staged 比較暫存區和版本庫差異
git diff --cached 比較暫存區和版本庫差異
git diff HEAD <file> 工作區和分支版本庫
git diff --stat 僅僅比較統計信息

git cat-file

git cat-file -t 查看Git對象的類型,主要的git對象包括tree,commit,parent,和blob等。
git cat-file -p,查看Git對象的內容

git log

git log --oneline 可以顯示更加短小的提交ID.
git log --graph 顯示何時出現了分支和合并等信息.
git log --pretty=raw 顯示提交對象的parent屬性.

git config

git config <section>.<key>,讀取和更改INI配置文件的內容。
git config <section>.<key> <value>,修改INI配置文件中某個配置的鍵值
在全局空間中添加新的用戶
git config --global user.name "harvey liu"
git config --global user.email harvey_liu@163.com
設置git命令的別名
git config --global alias.ci commit
git config --global alias.co checkout
刪除git全局配置文件中的用戶名
git config --unset --global user.name
git config --unset --global user.email

git revert

撤銷某次提交
git revert HEAD^ , HEAD之前的提交的反轉提交,不會影響工作區,只是針對版本庫

  • 注意事項

在clone完成之后,Git 會自動為你將此遠程倉庫命名為origin(origin只相當于一個別名,運行git remote –v或者查看.git/config可以看到origin的含義),并下載其中所有的數據,建立一個指向它的master 分支的指針,我們用(遠程倉庫名)/(分支名) 這樣的形式表示遠程分支,所以origin/master指向的是一個remote branch(從那個branch我們clone數據到本地),但你無法在本地更改其數據。

  1. **git branch -r **
    (to show remote branches git knows about)
    origin/HEAD -> origin/master
    origin/master
    可以發現origin/master是遠程分支

$git diff origin/master master (show me the changes between the remote master branch and my master branch).

需要注意的是,remotes/origin/master和origin/master的指向是相同的

  1. git push origin master
    origin指定了你要push到哪個remote

master其實是一個“refspec”,正常的“refspec”的形式為”+<src>:<dst>”,冒號前表示local branch的名字,冒號后表示remote repository下 branch的名字。注意,如果你省略了<dst>,git就認為你想push到remote repository下和local branch相同名字的branch。比如:
**$git push origin master:master **
(在local repository中找到名字為master的branch,使用它去更新remote repository下名字為master的branch,如果remote repository下不存在名字是master的branch,那么新建一個)

$git push origin master (省略了<dst>,等價于“git push origin master:master”)

$git push origin master:refs/for/mybranch (在local repository中找到名字為master的branch,用他去更新remote repository下面名字為mybranch的branch)

**$git push origin HEAD:refs/for/mybranch **(HEAD指向當前工作的branch,master不一定指向當前工作的branch,所以我覺得用HEAD還比master好些)

**$git push origin :mybranch **(再origin repository里面查找mybranch,刪除它。用一個空的去更新它,就相當于刪除了)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1. 安裝 Github 查看是否安裝git: $ git config --global user.name "...
    Albert_Sun閱讀 13,699評論 9 163
  • 說人的身上總共有206根骨頭 也說上帝創造女人時是取男人身上的一根肋骨創造的,所以女人只有找到他來自的那個身體,才...
    安心小姐閱讀 193評論 0 0
  • 一路上葵花的心一直懸著,怕城志見到自己會不高興。好不容易到了車站,四下搜尋沒有看到城志的身影,葵花懸著的心...
    妖尾醬閱讀 260評論 0 0
  • 不知從何時起,后知后覺的我發現柔寶愛講故事了,昨晚說…媽媽,我給你兩個故事,你給我講兩個故事好嗎?本來又困又累的我...
    東澤666閱讀 80評論 0 0
  • 這一個月寫感恩日記和每日一萬步,似乎成了我每天的一個習慣。初期堅持每天一萬步的目的是可以讓我能和明星孕媽媽一樣可以...
    能量團隊閱讀 516評論 2 1