Git常用命令

我的常用:

===================================
** 撤銷工作修改:**
1、git checkout
2、git reset --hard

回滾并提交到某個版本號
git cherry-pick 29d4fa6

===================================

1.創建倉庫

mkdir gitTest
cd gitTest ——創建/home/XXX/gitTest空目錄

2.通過git init命令把這個目錄變成Git可以管理的倉庫:

git init ——初始化Git倉庫

3.用命令git add告訴Git,把文件添加到倉庫(實際上就是把文件修改添加到暫存區):

git add filename

4.用命令git commit告訴Git,把文件提交到倉庫(實際上就是把暫存區的所有內容提交到當前分支):

git commit -m "有意義的附加說明"

5.隨時掌握工作區的狀態

git status

6.查看文件被修改的內容

git diff

7.查看代碼的歷史版本號

git log
git log --pretty=oneline ——要求版本信息只能在一行中顯示

8.HEAD指向的版本就是當前版本,因此,Git允許我們在版本的歷史之間穿梭

git reset --hard commit_id
或git reset --hard HEAD(HEAD^等等)

9.查看命令歷史,以便確定要回到未來的哪個版本

git reflog

10.弄明白Git的工作區(當前分區)和暫存區

11.理解Git是如何跟蹤修改的,每次修改,如果不add到暫存區,那就不會加入到commit中

12.撤銷修改

命令git checkout -- filename
意思就是,把filename文件在工作區的修改全部撤銷,這里有兩種情況:

  • 一種是filename自修改后還沒有被放到暫存區,現在,撤銷修改就回到和版本庫一模一樣的狀態;
  • 一種是filename已經添加到暫存區后,又作了修改,現在,撤銷修改就回到添加到暫存區后的狀態。

總之,就是讓這個文件回到最近一次git commit或git add時的狀態。

  • 場景1:當你改亂了工作區某個文件的內容,想直接丟棄工作區的修改時,用命令git checkout -- file
    git checkout其實是用版本庫里的版本替換工作區的版本,無論工作區是修改還是刪除,都可以“一鍵還原”。
  • 場景2:當你不但改亂了工作區某個文件的內容,還添加到了暫存區時,想丟棄修改,分兩步,第一步用命令git reset HEAD file,就回到了場景1,第二步按場景1操作。
  • 場景3:已經提交了不合適的修改到版本庫時,想要撤銷本次提交,版本回退,不過前提是沒有推送到遠程庫。

13.刪除文件
命令git rm用于刪除一個文件。如果一個文件已經被提交到版本庫,那么你永遠不用擔心誤刪,但是要小心,你只能恢復文件到最新版本,你會丟失最近一次提交后你修改的內容。

14.將本地倉庫與github倉庫關聯起來
往里面添加文件:

  touch README.md
  git init
  git add README.md
  git commit -m "first commit"
  git remote add origin  
  git@github.com:sysublackbear/Learmgitfirst.git
  git push -u origin master   

將本地倉庫同步github倉庫:

  • 1 git remote add origin git@github.com:sysublackbear/Learmgitfirst.git
  • 2 git push -u origin master

然后,從現在起,只要本地作了提交,就可以通過命令:
1 git push origin master

把本地master分支的最新修改推送至GitHub

15.多人協作一個項目的時候,我們每個人可以通過從遠程倉庫克隆一份來作為己用。
1 git clone git@github,com:sysublackbear/XXXX.git

16.創建分支并且切換到分支
1 git checkout -b dev2 Switched to a new branch 'dev'

等價于:
1 git branch dev2 git checkout dev3 Switched to branch 'dev'

查看分支:
1 git branch

將次分支合并到主分支上面:
1 git merge dev

刪除分支:
1 git branch -d dev2 Deleted branch dev (was fec145a).

17.解決沖突
當Git無法自動合并分支時,就必須首先解決沖突。解決沖突后,再提交,合并完成。
git log --graph命令可以看到分支合并圖。

18.Bug修復
修復bug時,我們會通過創建新的bug分支進行修復,然后合并,最后刪除;
當手頭工作沒有完成時,先把工作現場git stash一下,然后去修復bug,修復后,再git stash pop,回到工作現場

19.開發新功能
開發一個新功能,最好新建一個分支;
如果要丟棄一個沒有被合并過的分支,可以通過git branch -D name強行刪除。

20.參與開源項目先要克隆一份到本地
1 git clone git@github.com:michaelliao/bootstrap.git

====== git總結文章 ======

git學習網站:https://git-scm.com/book/zh/v1/%E8%B5%B7%E6%AD%A5
git學習思維導圖:http://www.lxweimin.com/p/e2f553942317
深入淺出:http://chengshiwen.com/article/head-first-git/
廖雪峰的git學習網站:
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
git幾個概念
版本庫:文件倉庫,倉庫里的修改刪除,git都能跟蹤歷史,可以在將來某個時刻還原。
工作目錄:本地項目目錄
暫存區域:工作目錄和git目錄之間的中轉區(stage或index)
本地倉庫git目錄:本地代碼提交的目錄
git安裝方法
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137396287703354d8c6c01c904c7d9ff056ae23da865a000
創建版本庫
方法一:在github中新建項目,git clone下來
方法二:在本地已有項目里創建版本庫并關聯遠程倉庫
新建遠程倉庫:
方法一:
curl -u 'username'https://api.github.com/user/repos-d '{"name":"RepoName"}'
方法二:在github網頁版上 右上角“+”號,點擊“New repository”
創建好后會得到一個遠程倉庫鏈接:https://github.com/sunshineMaria/testgit.git
關聯本地代碼與遠程倉庫:
cd testgit (進入項目目錄)
git init (把這個目錄變成Git可以管理的倉庫)
echo "# testgit" >>README.md(新建一個README.md文件,內容為# testgit)
git add . (添加所有工作區文件到暫存區)
git commit -m 'README.md for this project' (提交示例文件到本地倉庫)
git remote add originhttps://github.com/sunshineMaria/testgit.git(為本地版本庫添加名為origin的遠程版本庫)
git push -u origin master (執行推送命令,完成GitHub版本庫的初始化。注意命令行中的-u參數,在推送成功后自動建立本地分支與遠程版本庫分支的追蹤。)
改變項目地址:
git remote set-url originhttps://github.com/sunshineMaria/testgit22.git
git remote -v 查看遠程倉庫信息
說明:調用git commit提交至本地的版本庫,調用git push將本地版本庫推送至遠程版本庫
問題:這里的origin和master指什么?
origin是遠程的意思,master是master分支。git push -u origin master 表示將本地版本庫推送到遠程master分支,-u參數表示在推送成功后自動建立本地分支與遠程版本庫分支的追蹤。
修改、提交和撤銷
Git的基本工作流程如下:
改動文件:在工作目錄中修改、刪除或添加某些文件
暫存文件:對改動后的文件進行快照,保存至暫存區域
提交快照:將保存在暫存區域的文件快照永久轉儲到Git目錄中
git add . 將目標文件快照加到暫存區
git commit -m ‘xxx’ 提交快照到本地倉庫
git commit -a -m ‘xx’ 把所有已修改和已暫存的文件一并提交
git push 將本地版本庫推送到遠程版本庫
git status 查看修改了哪些文件
git reset HEAD file 撤銷加入暫存區的文件到工作區
git checkout file 工作區的某文件恢復到和本地版本庫一樣,工作區修改會被拋棄
git reset -hard origin/master 將本地狀態回退到和遠程的一樣,修改的代碼將會被拋棄
git clean -df 刪除與版本庫不同的新建的文件
差異比較
git diff 比較工作目錄文件和暫存區域快照之間的差異(即修改后還沒有暫存起來的變化內容)
git diff --cached 比較暫存區快照和上次提交之前的差異
git diff [--] 比較工作目錄文件和暫存區快照之間指定文件的差異
git diff --cached [--] 比較暫存區域快照和上次提交之間指定文件或目錄的差異
git diff HEAD 比較工作目錄文件和上次提交的差異
查看提交歷史
git log 按提交時間列出所有更新
git log -p用來顯示每次提交的內容差異
git log -n 查看最近n次提交
git log --stat 查看每次提交的粗略內容
git log 文件名 只關心某個文件的提交歷史
git show 0bce78b 查看某次提交的改動
git blame 文件名 查看目前文件的每一行是哪個提交最后改動的
git log -1 HEAD 文件名 查看文件的最后提交歷史
git log --pretty=online 可以指定使用不同于默認格式的方式展示提交歷史,一行展示,顯示commit id和描述
git log --graph 顯示ASCII圖形表示的分支合并歷史,配合—online更為簡潔
git log --grep 搜索提交說明中匹配pattern的提交
git log --since, --after 僅顯示指定時間之后的提交git log --since=2.weeks
git log —until,--before 僅顯示指定時間之前的提交
git log --pretty=format:"%h - %an, %ar : %s" 定制顯示的記錄的格式
2008 年 10 月期間,提交的但未合并的測試腳本(位于項目的 t/ 目錄下的文件)
git log --pretty="%h - %s" --since="2008-10-01" \ --before="2008-11-01" --no-merges -- t/
Table 2-1.git log --pretty=format常用的選項
選項說明
%H 提交對象(commit)的完整哈希字串
%h 提交對象的簡短哈希字串
%T 樹對象(tree)的完整哈希字串
%t 樹對象的簡短哈希字串
%P 父對象(parent)的完整哈希字串
%p 父對象的簡短哈希字串
%an 作者(author)的名字
%ae 作者的電子郵件地址
%ad 作者修訂日期(可以用 --date= 選項定制格式)
%ar 作者修訂日期,按多久以前的方式顯示
%cn 提交者(committer)的名字
%ce 提交者的電子郵件地址
%cd 提交日期
%cr 提交日期,按多久以前的方式顯示
%s 提交說明
版本切換回退
參考鏈接:
http://yijiebuyi.com/blog/8f985d539566d0bf3b804df6be4e0c90.html
git reset HEAD^ 回退到上一個版本(本地)
git reset 版本號 回退到某一個版本
兩種情況:
1.沒有push
git reset [--soft | --mixed | --hard
默認mixed: 保留源碼,只是將git commit和index信息回退到了某個版本
--soft:保留源碼,只回退到commit信息到某個版本.不涉及index的回退,如果還需要提交,直接commit即可.
--hard:源碼也會回退到某個版本,commit和index 都回回退到某個版本.(注意,這種方式是改變本地代碼源碼)
當然有人在push代碼以后,也使用 reset --hard 回退代碼到某個版本之前,但是這樣會有一個問題,你線上的代碼沒有變,線上commit,index都沒有變,當你把本地代碼修改完提交的時候你會發現全是沖突.....
所以,這種情況你要使用下面的方式
2.已經push:回退本地代碼也想同時回退線上代碼,回滾到某個指定的版本,線上線下保持一致
git revert 版本號
git push


分支管理
git branch 列出本地所有分支
git branch -a 列出本地和遠程
git branch -r 列出遠程所有分支
git branch wxj 創建分支 wxj
git checkout -b wxj 創建+切換至
git checkout wxj 切換分支
git merge wxj 合并某分支到當前分支
git branch -D wxj 刪除未合并的分支
git branch -d wxj 刪除已合并的分支
git push origin wxj 提交wxj分支到遠程分支
git push --set-upstream origin test 提交代碼到遠程分支test,并且建立本地分支和遠程分支關聯
stash儲藏工作現場
git stash 儲藏工作現場
git stash apply 恢復
git stash drop 刪除儲藏的工作現場
git stash pop 恢復+刪除



解決沖突
分支上該文件修改并提交,master該文件也修改并提交。則合并的時候一定會沖突,打開沖突代碼合并沖突,重新提交。
刪除文件
rm從工作目錄中刪除指定文件,但不從暫存區域移除
git rm從版本庫中刪除該文件 git rm后提交 git rm test.txt git commit -m ‘remove text.txt'
git rm --cached ...:僅僅將文件從暫存區域中移除(其狀態變為未跟蹤),不對該文件進行其它操作
git rm -f 強制刪除
git rm -r 遞歸刪除(用于刪除目錄)
git clean 清除未跟蹤文件
git clean -n 顯示將要清除的文
git clean -f 強制清除文件(不包括目錄)
git clean -df 強制清除所有文件和目錄
設置命令別名
git config —global alias.co checkout
git config —global alias.st status
git config —global alias.ci commit
git config —global alias.unstage ‘reset HEAD --'
git config —global alias.last ‘log -1 HEAD’ 最后一次提交信息
可能遇到的問題
你的小伙伴已經向origin/dev分支推送了他的提交,而碰巧你也對同樣的文件作了修改,導致push失敗

解決辦法:
git pull把最新提交從遠程拉下來,然后在本地合并,解決沖突再推送
git pull也失敗


原因是沒有指定本地dev與遠程dev分支的鏈接,根據提示,設置dev和origin/dev的鏈接
git branch --set-upstream dev origin/dev
再pull
標簽管理
創建和使用git ssh key
首先設置git的user name和email
git config --global user.name "XXX"
git config --global user.email "XXX@gmail.com"
git config --list 查看git配置
git config --global user.name 查看某個git配置
https://ruby-china.org/topics/2423
查看是否已經有了ssh密鑰: cd ~/.ssh 如果沒有密鑰則不會有此文件夾
ssh-keygen -t rsa -C “xxx@gmail.com” 生成密鑰
按三個回車,密碼為空,這里一般不適用密鑰
最后得到兩個文件 id_rsa和id_rsa.pub
注意:密鑰生成就不用改了,如果已經生成就到 ~./ssh 文件夾下去找



忽略一些文件、文件夾不提交
在倉庫根目錄下創建名稱為“.gitignore”的文件,寫入不需要的文件夾名或文件,每個元素占一行即可,如
target
bin
*.db
文/sunshine_Maria(簡書作者)原文鏈接:http://www.lxweimin.com/p/bcd155258985著作權歸作者所有,轉載請聯系作者獲得授權,并標注“簡書作者”。

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

推薦閱讀更多精彩內容

  • 分布式版本管理工具 git屬于分布式 svn集中式 git安裝 git初始化一個倉庫 其實就是創建了一個.git隱...
    SnowDragonYY閱讀 1,515評論 0 0
  • 初始化配置 #配置使用git倉庫的人員姓名 git config --global user.name "Your...
    賤精先玍丶閱讀 355評論 0 0
  • statues:diet: meat. failed controlexercise: little conclu...
    歐陽去非閱讀 162評論 0 0
  • 傍晚夜班車披著寶藍的毛衣行駛著 花兒們收下今日呼吸的陽光 準時點亮的燈如同地球上的螢火蟲 傍晚的轎車打著暖光燈各自...
    綠子世界閱讀 194評論 0 0
  • 華燈不累揭夜幕 疲乏惹身伴歸路 此歸彼歸天壤別 天涯一窠在何處
    李橙梨閱讀 231評論 0 0