1. 程式人生 > >git的常用指令學習

git的常用指令學習

一、GIT的本地操作

1.安裝Git

較新的Ubuntu是整合的Git的,若沒安裝,使用一條簡單的指令即可

$ git
The program 'git' is currently not installed. You can install it by typing:
$ sudo apt-get install git

2.建立版本庫

第一步:選擇一個合適的地方,建立一個空目錄:

$ mkdir learngit
$ cd learngit
$ pwd//pwd顯示當前目錄
/Users/michael/learngit
```一、GIT的本地操作
第二步:在這個目錄下初始化倉庫:

```python
$ git init
Initialized empty Git repository in
/Users/michael/learngit/.git/

現在,用git管理的檔案使用以下程式碼進行管理

$ git add readme.txt //可以多新增幾次
$ git commit -m "說明註釋"//可以看到自己每次版本具體修改情況
  1 file changed, 1 insertion(+), 1 deletion(-)

3.版本回退

我們使用git log命令檢視我們的檔案改變了什麼內容
git log指令顯示了從最近到最遠的提交日誌 ,如果嫌棄輸出內容多,可以加上pretty=oneline 引數

$ git log
commit 1094adb7b9b3807259d8cb349e7df1d4d6477073
(HEAD -> master) Author: Michael Liao <[email protected].com> Date: Fri May 18 21:06:15 2018 +0800 append GPL commit e475afc93c209a690c39c13a46716e8fa000c366 Author: Michael Liao <[email protected].com> Date: Fri May 18 21:03:36 2018 +0800 add distributed commit eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0 Author:
Michael Liao <[email protected].com> Date: Fri May 18 20:59:18 2018 +0800 wrote a readme file

現在,我們可以使用以下命令將檔案回退到上個版本

$ git reset --hard HEAD^ //^”的意思是把版本回退到上個版本 兩個版本就是"^^"一百個就是“HEAD~100”
現在檢視一下git log的狀態
HEAD is now at e475afc add distributed

現在檢視一下git log的狀態

$ git log
commit e475afc93c209a690c39c13a46716e8fa000c366 (HEAD -> master)
Author: Michael Liao <[email protected].com>
Date:   Fri May 18 21:03:36 2018 +0800

    add distributed

commit eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0
Author: Michael Liao <[email protected].com>
Date:   Fri May 18 20:59:18 2018 +0800

    wrote a readme file

現在,“append GPL”已經看不到了,如果想恢復這個版本,使用

$ git reset --hard 1094a
HEAD is now at 83b0afe append GPL

如果終端關閉,查不到了過去的版本號怎麼辦?使用以下指令

$ git reflog
e475afc [email protected]{1}: reset: moving to HEAD^
1094adb (HEAD -> master) [email protected]{2}: commit: append GPL
e475afc [email protected]{3}: commit: add distributed
eaadf4e [email protected]{4}: commit (initial): wrote a readme file

4.工作區和暫存區

首先介紹以下工作區的概念,比如上面目錄learningit就是我們的工作區,git的具體結構如下圖:
Git的三個區域
​​第一步我們使用 git add 實際上是把檔案修改從工作區新增到了暫存區(stage)
第二步使用 git commit 提交更改,實際上就是把檔案修改提交到了當前分支(master)
可以簡單理解為,需要提交的檔案修改通通放到暫存區,然後,一次性把所有內容都提交到了當前分支。
可以使用 git status 檢視當前的版本狀態。

5.管理修改

注意這個例子:第一次修改->git add ->第二次修改-> git commit ,此時只是提交了一次,因為commit命令只是提交了暫存區的版本修改,對於本地工作區的修改,commit是不提交的。我們可以使用 git diff HEAD --file 命令檢視工作區和版本庫最新版本的區別。

6.撤銷修改

如果你在工作區的檔案被你修改的出現了一個BUG,側可以使用以下命令丟棄工作區的修改:

$ git checkout -- readme.txt// file name

命令 的意思是,把檔案在工作區的修改全部撤銷,有兩種情況:
一種是檔案修改後,還沒有add到暫存區,這條指令就會把檔案撤銷修改回到和版本庫一模一樣的狀態;
另一種是檔案已經新增到了暫存區,又在本地做了修改,這條指令就撤銷修改回到新增到暫存區的狀態。
總之,優先回到add的狀態,add為空時,回到commit的狀態。

如果暫存區的檔案也是有BUG的,但還沒有提交,我們可以使用reset命令將暫存區的修改撤銷掉,並重新回退到工作區:

$ git reset HEAD readme.txt
Unstaged changes after reset:
M    readme.txt

可見 git reset 命令既可以回退版本,也可以將暫存區的修改撤銷掉。

7.刪除檔案

當你把工作區中的檔案,使用rm file 命令刪除了,此時,git是知道你刪除了檔案,此時工作區和版本庫的內容就不一致了,使用git status 可以看到那些檔案被刪除了,現在有兩個選擇,第一種情況是想從版本庫中刪除檔案,那麼這樣操作

$ git rm test.txt
rm 'test.txt'

$ git commit -m "remove test.txt"
[master d46f35e] remove test.txt
 1 file changed, 1 deletion(-)
 delete mode 100644 test.txt

第二種情況是刪錯了,那麼使用checkout檔案可以恢復到最新版本。

$ git checkout -- test.txt

git checkout 其實是用版本庫裡的版本替換工作區的版本,無論工作區是修改還是刪除,都可以一鍵還原。

二、Git的遠端操作(遠端倉庫)

1.新增SSH key

首先,linux系統下在主目錄裡面看看是否含有.ssh檔案,如果有id_rsaid_rsa.pub檔案那麼直接跳過這一步,否則使用以下命令建立SSH key:

$ ssh-keygen -t rsa -C "[email protected]"

一路回車使用預設設定即可。
現在看主目錄裡面是否有.ssh檔案,如果有,進入這個目錄複製id_rsa.pub裡面的內容。
現在登入GitHub,–Settings–SSH and GPG keys—New SSH key(其中titile隨便寫即可)
現在你可以通過你的本地主機向GitHub上傳你的程式碼了。

2.新增遠端倉庫

在自己的主頁上找到"Create a new repo"按鈕,建立一個新的倉庫,在name處填入learningit,現在成功建立了一個新的git倉庫。

現在根據GitHub的提示,在本地的learningit倉庫下執行命令:

$ git remote add origin [email protected].com:BoAn95/learngit.git

BoAn95要替換成自己的GitHub賬戶名,否則登入不上去。

新增後遠端庫的名字就叫做origin,這是git的預設叫法,也可以改成別的。

之後,我們可以把本地庫的所有內容推送到遠端庫上:

$ git push -u origin master
Counting objects: 20, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (15/15), done.
Writing objects: 100% (20/20), 1.64 KiB | 560.00 KiB/s, done.
Total 20 (delta 5), reused 0 (delta 0)
remote: Resolving deltas: 100% (5/5), done.
To github.com:michaelliao/learngit.git
 * [new branch]      master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.

其中,把本地庫的內容推送到遠端用的是git push命令,實際上是把當前分支master推送到遠端。
遠端庫的是空的,我們第一次推送master分支時,加上了-u引數,Git不但會把本地的master分支推送到遠端的新的mater分支,還會自動關聯他們兩個。以後在推送或者拉取時候可以簡化命令。

之後使用命令:

git push origin master

就可以把本地分支的最新修改推送到GitHub。

3.從遠端庫克隆

之前,已經瞭解了已經有本地庫,如何關聯遠端庫。
現在,我們先建立遠端庫,然後,從遠端庫克隆。
先在GitHub上建立一個新的倉庫,名字叫做gitskills。
勾選Initialize this repository with a README,這樣倉庫裡面自動建立一個README.md檔案。
至此,遠端倉庫已經建立好了,下面使用git clone克隆一個本地庫:

$ git clone [email protected].com:BoAn95/gitskills.git
Cloning into 'gitskills'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 3
Receiving objects: 100% (3/3), done.

進入gitskills目錄看看,已經有README.md檔案了。

三、分支管理