您好,登錄后才能下訂單哦!
一.初識
git是分布式版本控制系統,有別于SVN的集中式管理。兩者具體的分析比較可以參考github上的這篇gib與svn的差異比較。個人觀點看,git指令豐富,功能完善,還擁有github這個大殺器,沒有理由不選git.
二.git的文件狀態與工作區域
I:三種狀態:已提交(committed)、已修改(modified)和已暫存(staged)。你的文件可能就處于其中的一種狀態。已提交表示數據已經安全的保存在本地數據庫中。已修改表示修改了文件,但還沒保存到數據庫中。已暫存表示對一個已修改文件的當前版本做了標記,使之包含在下次提交的快照中。
II:Git 項目中的三個工作區域的概念:
Git 倉庫(Repository):Git倉庫是 Git 用來保存項目的元數據和對象數據庫的地方。這是 Git 中最重要的部分,從其它計算機克隆倉庫時,拷貝的就是這里的數據。
工作目錄(Working Directory):工作目錄是對項目的某個版本獨立提取出來的內容。這些從 Git 倉庫的壓縮數據庫中提取出來的文件,放在磁盤上供你使用或修改。
暫存區域(Staging Area):暫存區域 是一個文件,保存了下次將提交的文件列表信息,一般在 Git 倉庫目錄中。
三.git指令整理
I:主體命令
1.git init 初始化操作。進入到本地想建倉庫的目錄, 執行此命令 ,之后便可看到 .git 這個文件夾(隱藏)
2.git add file 將文件添加到緩存
3.git status 查看狀態詳細信息 若加 -s 參數 則是簡略顯示
舉例如:
$
git status -s
M README
MM Rakefile
A lib/git.rb
M lib/simplegit.rb
?? LICENSE.txt
說明:新添加的未跟蹤文件前面有 ??
標記,新添加到暫存區中的文件前面有 A
標記,修改過的文件前面有 M
標記。 你可能注意到了 M
有兩個可以出現的位置,出現在右邊的 M
表示該文件被修改了但是還沒放入暫存區,出現在靠左邊的 M
表示該文件被修改了并放入了暫存區。 例如,上面的狀態報告顯示:README
文件在工作區被修改了但是還沒有將修改后的文件放入暫存區,lib/simplegit.rb
文件被修改了并將修改后的文件放入了暫存區。 而 Rakefile
在工作區被修改并提交到暫存區后又在工作區中被修改了,所以在暫存區和工作區都有該文件被修改了的記錄。
4.git rm -r filename 刪除本地倉庫文件 加 -n 參數 預刪除文件,并不會真的刪除磁盤上文件
5.git rm -f filename 強制刪除 適用于文件在刪除前做過修改并已提交到暫存區域的情況。但這樣的話,刪除的數據不能通過git再恢復
6.git rm --cached filename 只刪除緩存區里的文件
拓展:git rm 命令后面可以列出文件或者目錄的名字,也可以使用 glob 模式。 比方說:
$ git rm log/\*.log
注意到星號 * 之前的反斜杠 \, 因為 Git 有它自己的文件模式擴展匹配方式,所以我們不用 shell 來幫忙展開。 此命令刪除 log/ 目錄下擴展名為 .log 的所有文件。 類似的比如:
$ git rm \*~
該命令為刪除以 ~ 結尾的所有文件。
7.git mv 舊文件名 新文件名 實現對文件重命名
8.git fetch [alias] 更新本地數據文件,然后再執行 git merge [alias]/[branch] 將服務器上的任何更新合到本地的倉庫中
9.git diff 命令顯示已寫入緩存與已修改但尚未寫入緩存的改動的區別
具體參數應用:
尚未緩存的改動:git diff
查看已緩存的改動: git diff --cached
查看已緩存的與未緩存的所有改動:git diff HEAD
顯示摘要而非整個 diff:git diff --stat
10.git reset HEAD 命令用于取消已緩存的內容。
具體參數應用信息:
$ git reset --hard <commit ID> //將本地代碼回退到指定的某次commit,目錄和緩存區的修改都被丟棄
$ git reset --soft <commit ID> //將HEAD指向<commit ID>所在位置,本地的修改(即<commit ID>位置之前的修改)回退到緩存區
$ git reset --mixed <commit ID> //將HEAD指向<commit ID>所在位置,本地的修改(即<commit ID>位置之前的修改)回退到工作目錄
hard/soft/mixed 是reset命令常用的三模式,默認是mixed。除此之外還有merge和keep兩種模式,但是不大常用。
II:推送拉取相關
1.git remote 查看遠端的倉庫
2.git pull 遠端倉庫名 拉取遠程數據倉庫的數據 『合并了 git fetch 遠程倉庫 + git merge 遠程倉庫名 本地分支』
3.git remote add 遠程倉庫名 https://github.com/xxxx/遠程倉庫名.git 建立遠程倉庫
4.git push 遠程倉庫名 本地分支名 推送本地分支倉庫數據到遠程倉庫同名分支下(git 會在遠端倉庫新建一個同名分支)
5.git commit -m "代碼提交信息" 完成這步,對文件所做的改動便會提交到了 HEAD,但是還沒到你的遠端倉庫。(需事先執行 git add操作)
6.git commit -a 可跳過git add 操作 , 直接將文件信息提交
7.git clone url 拷貝一個項目到本地
III.git日志操作
1.git log 查看消息日志
帶有的選項含義:
--oneline 則消息以簡短的形式體現
--reverse 逆向顯示消息信息
--author 制定作者信息 如: git log --authou=kkk -5 顯示 操作為kkk的前5行記錄
--before 制定多少時間以前 如: git log --oneline --before={1.weeks.ago}
--after 相對應before 時間可為: weeks days hours minutes 或者直接敲數字 如: git log --oneline --after={2016-08-02}
--graph 開啟拓撲圖選項
IV:git的標簽操作
1.git tag <name> 用于新建一個標簽,默認為HEAD,也可以指定一個commit id;
2.git tag -a <tagname> -m "blablabla..." 可以指定標簽信息,或直接
git tag 標簽名 但這樣就缺少了相關詳細的說明
3.git tag -s <tagname> -m "blablabla..." 可以用PGP簽名標簽;
4.git tag 可以查看所有標簽。
5.git show tag <tagname> 查看標簽信息
6.git push --tags 將本地所有tag一次推送到遠程 注意默認情況下,git push 并不會把本地標簽傳到遠程倉庫上,需要通過命名制定上傳
7.git push 遠程倉庫 tagname 將本地單個標簽往遠程倉庫推
8.git fetch origin tag <tagname> 獲取遠程倉庫的tag
9.git tag -d <tagname> 刪除本地tag
10.git push origin --delete tag <tagname> 刪除遠程倉庫的tag
11.git tag -a tagname 標簽校驗和 可實現對標簽進行后期補打標簽 校驗和信息的獲取方式命令: git log --pretty=oneline --abbrev-commit
×××標記即為歷史提交對應的校驗信息
V:git分支操作
1.git branch 查看分支
2.git branch -r 查看遠程分支
3.git branch 分支名 本地創建分支
4.git checkout -b 分支名 本地創建分支,并自動切換到給分支
5.git checkout 分支名 切換到相應的分支
6.git branch -d 分支名 刪除本地分支
7.git push 遠程倉庫名 --delete <遠程倉庫分支名> 刪除遠程倉庫的分支
8.git branch -m devel develop 重命名本地分支 如: 將devel修改為 develop
9.git merge 要合的分支名 合并分支
附參考信息:
1.https://git-scm.com/book/zh/v2
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。