看日記學git摘要~灰經常使用心的教程

看日記學git

linux 命令行

cd
ls / ls -a 
clear
mkdir
rmdir
echo "hi, good day" > hi.txt
touch hello.txt //建立文件
cat hi.txt //打印文件內容 cat -n hi.txt 帶行號打印
rm hello.txt //刪除文件
vim hi.txt //vim編輯hi.txt 同 vi hi.txt
help
tar // tar --help 解壓 tar -xvzf mypro.tat.gz
whoami //當前用戶

linux命令行下的快捷鍵

//光標定位
Ctrl-A 至關於HOME鍵,用於將光標定位到本行最前面
Ctrl-E 至關於End鍵,即將光標移動到本行末尾
Ctrl-B 至關於左箭頭鍵,用於將光標向左移動一格
Ctrl-F 至關於右箭頭鍵,用於將光標向右移動一格

//刪除字符
Ctrl-D 至關於Del鍵,即刪除光標所在處的字符
Ctrl-K 用於刪除從光標處開始到結尾處的全部字符
Ctrl-U 用於刪除從光標開始到行首的全部字符。通常在密碼或命令輸入錯誤時經常使用
Alt-BackSpace 用於刪除本行全部的內容,基本上和Ctrl-U相似。
Ctrl-H 刪除光標左側的一個字符
Ctrl-W 用於刪除當前光標左側的一個單詞

//清屏
Ctrl-L 清屏,至關於clear命令

//導航歷史命令
Ctrl-R 進入歷史命令查找狀態,而後你輸入幾個關鍵字符,就能夠找到你使用過的命令
Ctrl-P 至關於上箭頭鍵,即顯示上一個命令
Ctrl-N 至關於下箭頭鍵,即顯示下一個命令
Alt-. 用於提取歷史命令中的最後一個單詞。你先執行history命令,而後再敲擊此快捷鍵若干下,你就懂了!

Ctrl-T 用於顛倒光標所在處字符和前一個字符的位置。(目前不知道有什麼做用,哪位朋友知道?)
Ctrl-J 至關於回車鍵

//大小寫轉換
Alt-C 用於將當前光標處的字符變成大寫,同時本光標所在單詞的後續字符都變成小寫。
Alt-L 用於將光標所在單詞及所在單詞的後續字符都變成小寫。
Alt-U 用於將光標所在單詞的光標所在處及以後的全部字符變成大寫。

git的基本使用

配置

#設置
git config --global user.name "youname"
git config --global user.email "youemail"
git config --global hello.test onlytest
//全局配置文件位於 %userprofile%/.gitconfig,  本地配置指cmd的當前工做目錄
#獲取
git config --get user.name
git config --get-all user.name  //從各個級別(本地 全局)的配置文件中取配置值
git config --get-regexp user*  //用正則指定想獲取的配置項
#刪除
git config --global --unset hello.test
git config --global --remove-section hello
#顯示
git config -l
git config --global -list
#顯示幫助
git config -h //命令行裏顯示簡要幫助
git config --help //瀏覽器打開git安裝目錄下的html幫助文件

初始化本地git倉庫

//建立目錄 初始化本地git倉庫
mkdir myproject
cd myproject
git init //建立空的git倉庫或從新初始化已有的倉庫,建立.git目錄(objects, refs/heads, refs/tags, HEAD和模板文件)
git init-db //同 git-init
git fsck //檢查倉庫有沒有錯誤
git gc //用垃圾回收機制清除因爲reset形成的垃圾代碼

三棵樹

working(工做目錄) -> index(暫存區) -> HEAD(本地倉庫)

添加文件並提交

git add <file> / git add .
git commit -m "some comments" 
git commit -a -m "add and commit"

查看狀態

git diff //工做目錄 和 index的差別比較
git diff --cached//index和HEAD(最近一次提交)的差別比較 
git diff HEAD //工做目錄同HEAD的比較
git diff <branch1>..<branch2> #分支比較

git status //當前分支狀態

查看日誌

git log / git log -p
git log <tag1>..<tag2> //顯示兩個標籤之間的提交日誌
git log <tag1>.. //顯示tag1標籤以後的提交日誌
git log --since="2 weeks ago"
git log -n 3 //查看最近3次的提交日誌
git log v1.0.. somefolder //somefolder從v1.0後的提交日誌

gitk --since="2 weeks ago"
git show HEAD //查看最近一次提交日誌

撤銷修改

//git reset 是指 撤銷到哪一個commitId,缺省commitId 則爲HEAD
git reset //若當前修改stage了,但未提交,則回退,HEAD->index
git reset HEAD //HEAD->index 同上 

git reset --hard HEAD //working tree, index file 都撤銷到最後一次commit的狀態
git reset --soft HEAD^ //恢復到上一次commit的代碼 soft表示不改動index file和working tree
git reset HEAD //默認是 --mixed, index file 和 commit都會撤銷到最後一次commit以前的狀態, working file不受影響。

git reset -- <file> //撤銷某文件的staged狀態 (git status查看變化) HEAD->index
git reset -- . #撤銷當前文件夾的staged狀態

git rebase //重設基

分支管理

#建立
git branch mybranch //建立分支
git checkout -b local_name origin/remote_name #基於遠端分支建立新分支
如:git checkout -b dev origin/dev,做用是checkout遠程的dev分支,在本地起名爲dev分支,並切換到本地的dev分支
git branch <branchName> <tagName> //基於某標籤創建分支

#查看
git branch -a //顯示全部分支
git branch -r //顯示遠端分支    
git branch  //列出全部分支 
git show-branch //顯示全部分支 信息多一點 
git branch -v //同上

#切換 合併
git checkout mybranch  //切換分支 , 
git checkout -b otherBranch 建立並切換 
git checkout master
//do some change in master
git merge mybranch //合併分支到主幹
//如有衝突 手動解決衝突後,再次提交
vim <file>
git commit -a -m "conflit resolved" //解決衝突後從新提交
gitk //可視化分支查看界面

#刪除
git branch -d mybranch //分支合併到主幹後 刪除分支
git branch -D mybranch //不管分支是否合併 都執行刪除

添加和查看遠端倉庫

git remote add origin repoUrl //添加遠端倉庫

git remote show origin 
#顯示遠端倉庫的詳細信息(fetchUrl pushUrl, branches, "local branches configured for 'git pull'" , "local refs configured for 'git push' ")

推送數據

git push origin localBranch:remoteBranch//推送數據

 //本地master推送到遠程的remaster 如: 
git push origin master:remaster

檢出代碼

//檢出代碼到本地某文件夾, repoUrl能夠爲遠端url或本地路徑 
//(注:只clone遠端倉庫的當前分支,並不是所有分支都clone過來)
git clone <repoUrl> <localDir>

//clone 遠端倉庫的某個分支
git clone -b <remote_branch> <remote_repo> 

//pull的意思是指從遠端git倉庫fetch修改的代碼,
//而後merge到本地的git倉庫當前分支/指定分支中
git pull <repoLocalPath> master 

//根據本地分支-遠程分支的對應關係從遠端拉取更新
//如git clone的倉庫和自動和遠程倉庫的default分支創建對應關係
git pull 

git fetch origin remote_branch_name:local_branch_name
//拉取遠端git倉庫master分支到本地mybranch2分支
git fetch <remoteRepo> master:mybranch2

查看git對象信息(commit, tag, branch)

git show <commitid> //查看某個提交的信息,git log可得到commitid
git show HEAD //HEAD能夠認爲是最近一次commit的 commitid 同 git log -n 1 -p
git show HEAD^ //顯示上一次commit的信息(parent commit)
git show HEAD^^ //顯示上上次commit
git show HEAD~3 //顯示前3次commit
git show HEAD^1 //顯示第1個上次commit(parent commit)

git show <branchName> //顯示分支信息最近一次提交的信息

標籤管理

git tag <tagName> //給最近的提交加標籤 git tag v1.0
git tag <tagName> <commitid> //給某次commit加標籤(起別名)
git show <tagName> //顯示某標籤對應commit的信息

查看git對象

//查看git對象內容(tree, blob, HEAD ,index)
git cat-file -t <id> //-t 獲取id對應對象的類型
git cat-file commit <commitId> //查詢一個commit對象
git cat-file blob <blobId> //查看二進制對象的內容
git ls-tree <treeId> //查看樹對象
git ls-files --stage //查看index file的內容

cd .git
cat HEAD

搜索內容

//內容搜索
git grep "keyword" <branchName> //在某分支的文件中 搜索關鍵字
git grep "keyword" //在全部歷史記錄中搜索

查看幫助

//獲取幫助
git <command> -h //直接在命令行顯示用法
git <command> --help //用瀏覽器打開對應的文檔

一些git命令詳解

1. commit 和 commit -a

commit -a自動地add全部改動的代碼到index file中, 刪除在index file中但不在working tree中的文件,執行commithtml

git log 和 git log -p

git log -p 不只顯示commit日誌,同時顯示每次commit的代碼變更linux

git merge

合併兩個或兩個以上的分支,若自動合併(auto-merge)成功,則變動會被寫入index file,須要再 commit 一下; 若發生衝突,則working tree
會處於一種特殊的狀態(git status, git diff 查看衝突狀況),手工解決衝突後,須要 git add <file> git commitgit

若要撤銷合併,則git reset --hard HEAD //--hard表示將working tree和index file回退到以前的狀態, soft表示撤銷commit的修改,保留working tree和index file的, mixed則表示撤銷index file 和commit的修改,保留working tree的github

fetch的用法

用於從遠端git倉庫拉取更新, git fetch <options> <repo> <refspec> 格式 : , 表示源分支, 表示本地的分支
(dst爲空則用當前分支) , 如: git fetch /home/lucy/myrepo master:lucyworks 從myrepo的master分支拉取內容到本地的lucyworks分支
vim

pull的用法

用於從遠端git倉庫拉取更新併合併到本地的git倉庫中, git pullgit fetchgit merge命令的組合
如: git pull /home/lucy/myrepo從myrepo目錄拉取內容併合併到本地倉庫的當前分支瀏覽器

git pull .至關於git merge, 如: git pull . mybranch . 表示當前倉庫, 忽略了 參數,因此就是把當前倉庫的mybranch分支拉取併合併到當前分支 服務器

常量的使用

  • HEAD: 最近一次提交
  • MERGE_HEAD: merge產生的commit的父commit
  • FETCH_HEAD: 指向 git fetch得到的object和ref信息的存儲位置
  • HEAD^: HEAD的父commit
  • HEAD^^: HEAD的父commit的父commit
  • HEAD^1: HEAD的第一個父commit的信息
  • COMMIT_EDITMSG: 最後一次commit的提交信息

tag的用法

給commit起別名, git tag V3.2 5b88c, git show V3.2app

git項目遷移

只需將開發的文件夾copy到須要的位置便可,須要恢復時,執行一下 git init 便可。測試

git命令進階

git remote

git remote update #更新遠程主機的數據? 如遠端增長或刪除分支
git remote show origin #顯示遠程主機origin的信息 **很實用**
git remote -v #查看遠端倉庫的配置信息

cat -n .git/config #查看本地配置文件

git commit

# 本地修改文件後,不但願commit到遠端倉庫能夠這樣
git commit -m "commit part of changes" -- folderName_or_fileName
git commit --amend # 修改最後一次提交記錄

git show

# 顯示某次提交的內容 
git show commitId
git show  tag1
git show HEAD^
git show branchName

git checkout

git checkout branchName #一般用於切換分支

#撤銷未暫存的修改
git checkout -- <file> # 拋棄未staged的某文件的修改 (index->workspace)
git checkout . # (未staged的狀況下)拋棄工做區修改

git rm

git rm <file> # 從版本庫中刪除文件,同時從工做目錄刪除文件
git rm <file> --cached # 從暫存區中刪除文件,但不刪除工做目錄中對應文件

git revert

git revert commitId # 恢復某次提交的狀態,恢復動做自己也建立次提交對象

git revert HEAD # 恢復最後一次提交的狀態

git diff

git diff <file> # 比較當前文件和暫存區文件差別 git diff

git diff <commitId1>..<commitId2> # 比較兩次提交之間的差別

git diff <branch1>..<branch2> # 在兩個分支之間比較

git diff --staged # 比較暫存區和版本庫差別

git diff --cached # 比較暫存區和版本庫差別

git diff --stat # 僅僅比較統計信息

git log

git log <file> # 查看該文件每次提交記錄

git log -p <file> # 查看每次詳細修改內容的diff

git log -p -2 # 查看最近兩次詳細修改內容的diff //同 git log -p -n 2

git log --stat #查看提交統計信息

Git 本地分支管理

#查看、切換、建立和刪除分支

git branch -r # 查看遠程分支

git branch <new_branchanch> # 建立新的分支

git branch -v # 查看各個分支最後提交信息

git branch --merged # 查看已經被合併到當前分支的分支

git branch --no-merged # 查看還沒有被合併到當前分支的分支

git checkout <branch> # 切換到某個分支

git checkout -b <new_branch> # 建立新的分支,而且切換過去

git checkout -b <new_branch> <branch> # 基於branch建立新的new_branch

git checkout commitId # 把某次歷史提交記錄checkout出來,但無分支信息,切換到其餘分支會自動刪除

git checkout commitId -b <new_branch> # 把某次歷史提交記錄checkout出來,建立成一個分支

git branch -d <branch> # 刪除某個分支

git branch -D <branch> # 強制刪除某個分支 (未被合併的分支被刪除的時候須要強制)

 #分支合併和rebase

git merge <branch> # 將branch分支合併到當前分支

git merge origin/master --no-ff # 不要Fast-Foward合併,這樣能夠生成merge提交

git rebase master <branch> # 將master rebase到branch,
至關於: git checkout <branch> && git rebase master && git checkout master && git merge <branch>

 Git補丁管理(方便在多臺機器上開發同步時用)

git diff > ../sync.patch # 生成補丁

git apply ../sync.patch # 打補丁

git apply --check ../sync.patch #測試補丁可否成功

Git暫存管理

git stash # 暫存

git stash list # 列全部stash

git stash apply # 恢復暫存的內容

git stash drop # 刪除暫存區

Git遠程分支管理

git pull # 抓取遠程倉庫全部分支更新併合併到本地

git pull --no-ff # 抓取遠程倉庫全部分支更新併合併到本地,不要快進合併

git fetch origin # 抓取遠程倉庫更新

git merge origin/master # 將遠程主分支合併到本地當前分支

git checkout --track origin/branch # 跟蹤某個遠程分支建立相應的本地分支

git checkout -b <local_branch> origin/<remote_branch> # 基於遠程分支建立本地分支,功能同上

git push # push全部分支

git push origin master # 將本地主分支推到遠程主分支

git push -u origin master # 將本地主分支推到遠程(如無遠程主分支則建立,用於初始化遠程倉庫)

git push origin <local_branch> # 建立遠程分支, origin是遠程倉庫名

git push origin <local_branch>:<remote_branch> # 建立遠程分支

git push origin  :<remote_branch> #先刪除本地分支(git br -d <branch>),而後再push刪除遠程分支

Git遠程倉庫管理

GitHub

git remote -v # 查看遠程服務器地址和倉庫名稱

git remote show origin # 查看遠程服務器倉庫狀態

git remote add origin git@ github:robbin/robbin_site.git # 添加遠程倉庫地址

git remote set-url origin git@ github.com:robbin/robbin_site.git # 設置遠程倉庫地址(用於修改遠程倉庫地址) 
git remote rm <repository> # 刪除遠程倉庫

建立遠程倉庫

git clone --bare robbin_site robbin_site.git # 用帶版本的項目建立純版本倉庫

scp -r my_project.git git@ git.csdn.net:~ # 將純倉庫上傳到服務器上

mkdir robbin_site.git && cd robbin_site.git && git --bare init # 在服務器建立純倉庫

git remote add origin git@ github.com:robbin/robbin_site.git # 設置遠程倉庫地址

git push -u origin master # 客戶端首次提交

git push -u origin develop # 首次將本地develop分支提交到遠程develop分支,而且track

git remote set-head origin master # 設置遠程倉庫的HEAD指向master分支

也能夠命令設置跟蹤遠程庫和本地庫

git branch --set-upstream master origin/master
相關文章
相關標籤/搜索