Git 學習筆記

1、建立版本庫

  第一步先建立一個空的目錄   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添加文件須要addcommit一共兩步呢?由於commit能夠一次提交不少文件,因此你能夠屢次add不一樣的文件,好比:

$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "add 3 files." 

2、時光機穿梭

  前面已經成功添加了文件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,如今,你又能夠乘坐時光機回到將來了。 

3、遠程倉庫

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


4、分制管理

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

相關文章
相關標籤/搜索