關於git使用,咱們內部服務使用gitlab,相關使用教程就再也不贅述了。 如下說的都是windows環境下使用,異曲同工。git官網android
git init
我一般不多直接在本地初始化一個倉庫,你們基本都是從遠程clone,即使是建立新項目,在gitlab web頁面也是直接選擇建立新project,而後供你們拉取進行開發。現有項目路徑下(空文件夾,也能夠不空),命令行模式 執行 git init 就會建立一個.git文件夾子目錄,表示當前目錄以及歸入版本管理。git
git add
大多數狀況下,用這個命令將文件添加到項目中用來追蹤後續文件變化。
來自官網解釋——將這個命令理解爲「添加內容到下一次提交中」而不是「將一個文件添加到項目中」要更加合適。
舉個例子(如下操做都在android studio中)
我先建立了一個test.txt的文件,studio就自動增長到版本控制中,此時隨便編輯一下,查詢狀態以下,有一個文件待提交,有一個修改未在待提交,此時執行commit 只會提交建立文件的部分,不會提交編輯後的部分,能夠在提交前執行一次
git add app/test.txt 而後執行提交就會提交修改後的部分,大多數狀況下在項目中建立的文件都須要進行版本管理,極少數狀況建立的本地文件不須要進行管理,可是在studio中建立的時候就自動添加進管理了,在commit前能夠經過執行git reset HEAD 將剛建立的文件移出版本追蹤(僅限於建立後未提交的文件)。web
#git status
On branch localTest
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: app/test.txt
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: app/test.txt
複製代碼
除了移出剛建立的文件版本,還能夠經過編輯倉庫內的.gitignore文件來添加須要忽略的文件或者文件夾,
如下是官方例子,觸類旁通能應付大多數狀況了windows
# no .a files 全部.a結尾的文件不跟蹤
*.a
# but do track lib.a, even though you're ignoring .a files above
# 忽略取反,我已經忽略的全部的.a文件,可是我但願跟蹤lib.a文件能夠單獨添加
!lib.a
# only ignore the TODO file in the current directory, not subdir/TODO
#忽略當前目錄下的TODO文件,可是不會忽略子目錄中的TODO
/TODO
# ignore all files in the build/ directory 忽略build目錄下全部文件
build/
# ignore doc/notes.txt, but not doc/server/arch.txt 忽略doc目錄下的.txt文件可是不忽略子目錄中的
doc/*.txt
# ignore all .pdf files in the doc/ directory 忽略doc目錄下的全部.pdf文件包括子目錄
doc/**/*.pdf
複製代碼
關於比較 git diff 我沒用過命令,都是在studio 右鍵文件compare with branch絲滑得多。服務器
git commit -m "-m引號內的內容爲本次提交的說明"
經過此命令提交在暫存區的修改,還能夠經過添加-a 命令將已跟蹤但未添加到暫存區的修改提交。
舉個例子,我如今已經有了test.txt 文件,我修改內容爲abc 此時,按正常流程,
我須要先 git add text.txt 再執行git commit -m "test2"才能成功提交,經過添加-a 標籤,能省略add步驟
直接執行git commit -a -m "test2"成功提交剛剛的修改app
git rm
同時刪除本地文件並提交,studio下這個操做直接刪除後提交完事,說個特殊的,個人test.txt 上一個版本添加到追蹤的,可是這個版本我不想追蹤它了,可是我本地還想繼續用它,只是再也不歸入版本控制, 執行命令git rm --cached text.txt 此時文件text.txt依舊在本地目錄裏不會被刪除,同時下一次提交到倉庫的修改行爲變成刪除文件text.txtgitlab
F:\AndroidStudioProjects\test>git rm --cached app/test.txt
rm 'app/test.txt'
F:\AndroidStudioProjects\test>git status
On branch localTest
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
deleted: app/test.txt
複製代碼
這個很少說了,直接git log 輸出密密麻麻看得煩,能夠這樣
git log --pretty=oneline -5 輸出最近5次提交而且單行顯示,爽多了
git log --stat -5 最近5次提交信息,而且帶有簡略信息,好比修改了哪些文件
git reflog 查看每次head變動時的日誌(包括提交),已經刪除的分支也能檢測,能夠用來恢復誤刪的分支節點fetch
先說一種狀況,比方說我修改了test.txt 建立了abc.txt文件,提交備註寫成了「修復bug1」,可是我此次提交漏掉了abc,並且修復的是bug2,粗暴的作法是再提交一次修改完事,可是就會有兩次提交記錄。若是隻但願有一次提交記錄,而且修正備註,能夠經過--amend命令按順序作以下操做ui
git commit -m '修復bug2'
git add abc.txt
git commit --amend
複製代碼
完成後以前提交的記錄就會被本次提交的記錄覆蓋,修正以前的提交。
已經修改但還沒有提交時,撤銷對某個文件的修改,studio沒這麼折騰,直接右鍵revert完事url
git checkout -- test.txt
複製代碼
恢復成修改前的狀態。
git remote -v 查看遠程倉庫簡寫(一般clone後自動建立的簡寫是origin)和地址
git remote add [remote-name] [url] 添加新的遠程倉庫
git remote set-url [remote-name] [url] 修改遠程倉庫地址
git fetch [remote-name] 拉取遠程倉庫信息但不會對當前工做進行合併
git pull [remote-name] 拉取數據後會嘗試合併當前分支
git push [remote-name] [branch-name] 推送新分支到遠程倉庫
git remote rename [oldName] [newName] 修改遠程倉庫在本地的名稱
git remote rm [remote-name] 移除遠程倉庫,只是移除本地與遠程的關聯,不是把遠程服務器上的倉庫給刪除了。
git tag 列出全部標籤
git tag -a [tagname] -m "tag說明" 一般都是打附註標籤
也能夠對某次修改補打標籤
git tag -a [tagname] -m "tag說明" [須要打標籤的提交記錄哈希值前6位]
git push origin [tagname] 推送標籤到遠程倉庫
git tag -d [tagname] 刪除本地倉庫上的標籤
git push [remote-name] :refs/tags/[tagname] 刪除遠程倉庫的標籤
git checkout [tagname] 單純檢出打標籤時的文件版本,不作修改
git checkout -b [branch-name] [tagname] 檢出打標籤時的文件版本並建立新分支,用於修改後提交新版本
git branch [branch-name] 建立新分支 git checkout [branch-name] 切換到指定分支 git branch -d [branch-name] 刪除分支 studio右下角直接操做完成以上操做痛快 git branch -v 查看當前已有分支列表 git branch --merged 查看哪些分支已合併到當前分支 git branch --no-merged 查看哪些分支未合併到當前分支 git branch -u [oringin/branch-name] 修改當前分支跟蹤的遠程分支