git入門
在平常的工作中雖然一直在使用git作爲項目管理的工具,但一直使用的就是
git add
、git commit
、git pull
和git push
,沒有做檢測,因此一直會把一些不應該同步的文件同步,或者提交一些髒代碼,使得原本能執行的程序,變得不能執行。這不能是用簡單的粗心能夠說明。一是自己對git中的命令不熟悉。二是沒有一個好的代碼提交習慣。
工具
我使用git命令練習是使用githug
這個遊戲。
安裝
這個遊戲是使用Ruby
語言編寫的,可以通過:sudo gem install githug
進行安裝
如果,沒有安裝Ruby
使用:sudo apt install ruby
(針對 Ubuntu 16.04) ,如果是其他版本把apt
替換成apt-get
即可。
安裝完後輸入githug
,然後輸入y
出現如下界面:》
然後進入git_hug
文件夾準備開始遊戲。遊戲的玩法可以通過說明查看。
Git命令
init
Git 的init
命令用於創建一個空的Git倉庫或者重新初始化一個已經存在的倉庫。但是講道理這個命令很少用到,除了上次在AWS上搭建Blog時使用到了一次。
config
config
命令通常是用於配置git的一些屬性,同過git config
,可以發現 config
下帶如下參數:
但比較常見的做法是設置自己的郵箱和用戶名
git config --global user.name "hsulei"
git config --global user.email "[email protected]"
add
add
指令通常用於添加文件索引到庫中,git add .
或者git add xxx
(xxx爲指定文件名)
commit
commit
命令用於將以及add
的文件添加到庫中。在每次提交的時候需要使用-m
後面添加上提交的信息。用一種情況是當提交完成之後,突然發現了漏了一些文件沒有提交。很多的做法是在單獨提交一次。但是這樣是不合理的,在這種情況下可以使用--amend
子命令:
git add a.txt
git commit --amand
在commit
的時候可以帶時間。使用--date
參數
git commit -m"add date" --date "2016-12-2 23:23:23"
clone
clone
用於克隆一個倉庫到本地。
git clone xxx //xxx爲具體的倉庫地址
git clone xxx location //xxx爲具體的倉庫地址,location爲要clone到的本地庫路徑
.gitignore
這不是一個命令。在所有的git倉庫中都會有一個.gitignore
文件,這個文件是用來控制一些文件不應該添加到git倉庫中的忽略文件。在.gitignore
文件中填寫要忽略的文件的路徑,就可以在下次提交時,將這些文件忽略掉。比如寫Android的一些編譯文件。在.gitignore
中可以忽略一類文件。例如使用vim
編輯後產生的.swp
文件。在.gitignore
中添加:
*.swp
但是有時候在忽略一類文件的時候,需要提交某一個特定的文件,比如忽略所有的.a
文件,但是,需要提交lib.a
文件,此時我們就可以在.gitignore
文件中這樣寫:
*.a
!lib.a
status
使用 git status
命令可查看提交的記錄,可以看到哪些文件提交了,哪些文件還沒有添加到庫中:
綠色的部分是已經被git追蹤到的,紅色的還沒有提交到庫中的。
rm
git rm
用來告訴git ,需要將哪些文件從倉庫中刪除,同時將這個操作記錄下來,如果只是簡單的rm
只是將該文件從物理硬盤上刪除,但是沒有將其從git記錄中刪除。
stash
有時候,做了修改,但是突然來了命令,要緊急需改bug,那這次的修改不能提交。可以用stash
命令將當前的修改暫存,當bug修改完成並且commit
了之後,在使用git stash pop
命令恢復,繼續新功能開發。
mv
mv
移動或重命名一個文件、目錄或符號連接,比如,我們想把一個old.txt
重命名成new.txt
,此時我們就能使用:
git mv old.txt new.txt
log
log
通過該命令,可以查看代碼的提交記錄。
tag
tag
通過該命令,可以添加一個標籤,但是在提交的時候,git是不會自動提交該標籤的,需要在使用push
,命令的時候添加--tag
參數。
reset
reset
可以將錯誤提交的文件取消提價狀態 :
git reset xx
reset
可以將當前地 HEAD
重置到制定的位置,如果希望變更保持在staging area
,那麼就添加--soft
checkout
checkout
有很多的左右:
- 撤銷變更
- 切換分支
git checkout xxx //xxx爲要撤銷的文件名稱
git checkout -b xxx //xxx爲分支名
git checkout xxx //xxx爲tag名稱
remote
remote
命令可以查看當前的倉庫。
git remote
使用-v
子命令可以查看查看的URL地址。
可以使用add
子命令,添加一個倉庫的地址。
git remote add xxx //xxx爲倉庫的url地址
pull
pull
命令用於從倉庫中拉取數據。
push
push
用於向指定的倉庫中提交數據。
rebase
rebase
命令也是用於合併,但是這個合併和merge
命令不同。?
diff
diff
命令用於查看改動變化:
git diff xxx //xxx爲要查看的文件名
使用了該命令後的效果如下:
在修改的地方使用了不同但是和標記來表示:紅色表示刪除的,綠色的表示添加的。
blame
blame
命令用於查找文件每個部分是有誰修改的
branch
branch
命令用於拉取分支。如果忘記開啓新的分支就修改並提交了代碼,也是使用branch
帶指定參數,使新的分支基於任意一次提交:
git branch test HEAD
使用-d
參數就可以刪除一個分支。
merge
merge
指令用於合併分支
git merge test
fetch
fetch
指令將更新的代碼拉回本地,但是不進行合併。