第一步先建立一個空的目錄 mkdir www 。php
[root@caiji home]# cd www
[root@caiji www]# pwd
/home/www
第二步,經過git init
命令把這個目錄變成Git能夠管理的倉庫:git
[root@caiji www]# git init
Initialized empty Git repository in /home/www/.git/github
若是沒有看到.git 目錄,那麼 .git目錄默認是隱藏的,能夠用 ls -ah 查看web
[root@caiji www]# ls -ah
. .. .gitbash
如今編寫一個 index.php 文件,內容以下:app
<?phpwebapp
phpinfo();spa
?>.net
把一個文件放到Git倉庫只須要兩步。命令行
第一步,用命令git add
告訴Git,把文件添加到倉庫:
[root@caiji www]# git add index.php
執行上面的命令,沒有任何顯示,這就對了,Unix的哲學是「沒有消息就是好消息」,說明添加成功。
第二步,用命令git commit
告訴Git,把文件提交到倉庫:
[root@caiji www]# git commit -m "add phpinfo"
[master (root-commit) 9f44988] add phpinfo
1 file changed, 3 insertions(+)
create mode 100644 index.php
git commit
命令, -m
後面輸入的是本次提交的說明,能夠輸入任意內容,固然最好是有意義的,這樣你就能從歷史記錄裏方便地找到改動記錄。
嫌麻煩不想輸入-m "xxx"
行不行?確實有辦法能夠這麼幹,可是強烈不建議你這麼幹,由於輸入說明對本身對別人閱讀都很重要。實在不想輸入說明的童鞋請自行Google,我不告訴你這個參數。
git commit
命令執行成功後會告訴你,1個文件被改動(咱們新添加的readme.txt文件),插入了兩行內容(readme.txt有兩行內容)。
爲何Git添加文件須要add
,commit
一共兩步呢?由於commit
能夠一次提交不少文件,因此你能夠屢次add
不一樣的文件,好比:
$ git add file1.txt $ git add file2.txt file3.txt $ git commit -m "add 3 files."
前面已經成功添加了文件index.php,如今修改index.php 內容以下:
<?php
echo "1234";
phpinfo();
?>
運行git status
命令看看結果:
[root@caiji www]# git status
# On branch master
# 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: index.php
#
no changes added to commit (use "git add" and/or "git commit -a")
git status
命令可讓咱們時刻掌握倉庫當前的狀態,上面的命令告訴咱們,index.php被修改過了,但尚未準備提交的修改。
雖然Git告訴咱們index.php被修改了,但若是能看看具體修改了什麼內容,天然是很好的。好比你休假兩週回來,第一天上班時,已經記不清上次怎麼修改的index.php,因此,須要用git diff
這個命令看看:
[root@caiji www]# git diff index.php
diff --git a/index.php b/index.php
index cf60860..cc8b2a3 100644
--- a/index.php
+++ b/index.php
@@ -1,3 +1,4 @@
<?php
+echo "1234";
phpinfo();
?>
知道對index.php文件作了什麼修改, 提交修改和提交新文件是同樣的兩步,第一步是git add
:
[root@caiji www]# git add index.php
一樣沒有任何輸出。在執行第二步git commit
以前,咱們再運行git status
看看當前倉庫的狀態:
[root@caiji www]# git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: index.php
#
git status
告訴咱們,將要被提交的修改包括index.php,下一步,就能夠放心地提交了:
[root@caiji www]# git commit -m "add echo"
[master c695a71] add echo
1 file changed, 1 insertion(+)
提交後,咱們再用git status
命令看看倉庫的當前狀態:
[root@caiji www]# git status
# On branch master
nothing to commit, working directory clean
1.版本回退
在Git中,咱們用git log
命令查看:
[root@caiji www]# git log
commit c695a7133a454fa879b74e2830756fecb1eb62f5
Author: wqy <1491617068@qq.com>
Date: Wed May 17 11:04:10 2017 +0800
add echo
commit 9f44988f04e5b594c99e3f012f183174ab04d541
Author: wqy <1491617068@qq.com>
Date: Wed May 17 10:21:05 2017 +0800
add phpinfo
git log
命令顯示從最近到最遠的提交日誌 , 若是嫌輸出信息太多,看得眼花繚亂的,能夠試試加上--pretty=oneline
參數:
[root@caiji www]# git log --pretty=oneline
c695a7133a454fa879b74e2830756fecb1eb62f5 add echo
9f44988f04e5b594c99e3f012f183174ab04d541 add phpinfo
把當前版本「add echo」回退到 上一個版本 「add phpinfo」 使用git reset
命令:
[root@caiji www]# git reset --hard HEAD^
HEAD is now at 9f44988 add phpinfo
index.php 文件回退到版本 「add phpinfo」
[root@caiji www]# cat index.php
<?php
phpinfo();
?>
用git log
再看看如今版本庫的狀態:
[root@caiji www]# git log
commit 9f44988f04e5b594c99e3f012f183174ab04d541
Author: wqy <1491617068@qq.com>
Date: Wed May 17 10:21:05 2017 +0800
add phpinfo
若是因爲操做失誤 想回到 「add echo」版本, 只要上面的命令行窗口尚未被關掉,找到那個「add echo 」 commit id
是 c695a713........ , 因而就能夠指定回到將來的某個版本:
[root@caiji www]# git reset --hard c695
HEAD is now at c695a71 add echo
版本號不必寫全,前幾位就能夠了,Git會自動去找。固然也不能只寫前一兩位,由於Git可能會找到多個版本號,就沒法肯定是哪個了。
再看一下 index.php文件內容 :
[root@caiji www]# cat index.php
<?php
echo "1234";
phpinfo();
?>
在Git中,老是有後悔藥能夠吃的。當你用$ git reset --hard HEAD^
回退到add phpinfo
版本時,再想恢復到add echo
,就必須找到add echo
的commit id。Git提供了一個命令git reflog
用來記錄你的每一次命令:
[root@caiji www]# git reflog
c695a71 HEAD@{0}: reset: moving to c695
9f44988 HEAD@{1}: reset: moving to HEAD^
c695a71 HEAD@{2}: commit: add echo
9f44988 HEAD@{3}: commit (initial): add phpinfo
終於舒了口氣,第三行顯示add echo
的commit id是 c695a71,如今,你又能夠乘坐時光機回到將來了。
1.添加遠程倉庫
要關聯一個遠程庫,使用命令 git remote add origin git@github.com:wangqiyincode/webapp.git;
關聯後,使用命令git push -u origin master
第一次推送master分支的全部內容;
此後,每次本地提交後,只要有必要,就可使用命令git push origin master
推送最新修改;
2. 從遠程庫克隆
要克隆一個倉庫,首先必須知道倉庫的地址,而後使用git clone
命令克隆。
git clone git@github.com:wangqiyincode/webapp.git
1.建立與合併分支
查看分支:git branch
建立分支:git branch <name>
git branch dev
切換分支:git checkout <name>
git checkout dev
建立+切換分支:git checkout -b <name>
git checkout -b dev
合併某分支到當前分支:git merge <name>
git merge dev
刪除分支:git branch -d <name>
git branch -d dev
2.分支管理策略
git merge <name>
git merge dev (合併 dev 分支)
git merge --no-ff -m "merge with no-ff" <name>
git merge --no-ff -m 'merge with no-ff' dev ( 合併dev
分支,注意--no-ff
參數,表示禁用Fast forward
, 本次合併要建立一個新的commit,因此加上-m
參數,把commit描述寫進去。 )
合併後,用git log
查看分支歷史:
$ git log --graph --pretty=oneline --abbrev-commit
* 0a53d6f merge with no-ff |\ | * ab1f3b9 add php |/ * 6821d5f add info |\ | * 4972925 add info * | b11c151 &&&&s |/ * e473e89 branch test