1. 程式人生 > 其它 >Git 基本操作和使用

Git 基本操作和使用

最近專案需求,學了一下git的基本操作,留作備份

1, 建立倉庫

  git init

  git init pcm

  

 我們也可以從遠端git倉庫這種拷貝專案

  克隆倉庫: git clone <指定倉庫>

  git clone <指定倉庫> <本地目錄>

  

比如說我們要克隆go語言的git倉庫程式碼

  

git clone http://gitlab.com/xxx/gitlab/go.git

  

執行該命令後,會在當前目錄下建立一個名為grit的目錄,其中包含一個.git 的目錄,用於儲存下載下來的所有版本記錄。

如果要自己定義要新建的專案目錄名稱,可以在上面的命令末尾指定新的名字:

  

git clone http://gitlab.com/xxx/gitlab/go.git mygrit

  

配置命令:

  git config -e //針對當前倉庫

  git config -e --global 針對系統上所有倉庫

  

Git 常見的基本操作有6個命令:

 git clone ,git push ,git add ,git commit ,git checkout ,git pull 
git分為workspace :工作區。staging area :暫存區/快取區 。local repository 版本庫或者本地倉庫。remote repository :遠端倉庫

git init --- 初始化倉庫。

git add . ----新增檔案到暫存區

git commit -am "名稱"  -- 將暫存區內容新增到倉庫中

  

命令說明
git init 初始化倉庫
git clone 拷貝一份遠端倉庫,也就是下載一個專案。

提交和修改

git 的工作就是建立和儲存你的專案的快照以及之後的快照對比。

下列是建立和提交專案的快照的命令

命令說明
git add 新增檔案到倉庫
git status 檢視倉庫當前的狀態,顯示有變更的檔案。
git diff 比較檔案的不同,即暫存區和工作區的差異。
git commit 提交暫存區到本地倉庫。
git reset 回退版本。
git rm 刪除工作區檔案。
git mv 移動或重新命名工作區檔案。

提交日誌

命令說明
git log 檢視歷史提交記錄
git blame <file> 以列表形式檢視指定檔案的歷史修改記錄

遠端操作:

命令說明
git remote 遠端倉庫操作
git fetch 從遠端獲取程式碼庫
git pull 下載遠端程式碼併合並
git push 上傳遠端程式碼併合並

git 分支管理

乎每一種版本控制系統都以某種形式支援分支。使用分支意味著你可以從開發主線上分離開來,然後在不影響主線的同時繼續工作。

有人把 Git 的分支模型稱為必殺技特性,而正是因為它,將Git從版本控制系統家族裡區分出來。

建立分支命令:

  git branch (branchname)

  

切換分支命令:

 

 git checkout (branchname)

  

當你切換分支的時候,Git會用該分支的最後提交的快照替換你的工作目錄的內容,所有多個分支不需要多個目錄。

合併分支:

  git merge 

  

你可以多次合併到統一分支,也可以在合併之後直接刪除被併入的分支。

比如說:

mkdir gitDemo

cd gitDemo

git init

touch test.log

git add .

git commit -am "test"

  

Git 分支管理

列出分支

列出分支基本命令:

git branch

  

沒有引數時候,git branch 會列出你在本地的分支

git branch

*master

  

此例子就是,我們有一個叫做master的分支,並且該分支是當前分支

當你執行git init 或者git clone遠端的倉庫後,預設情況下git 會為你建立一個master分支

如果要手動建立分支,執行

git branch (branchname) //git checkout -b 分支名

git branch testing

git branch

*master 

testing

  

現在我們看到一個新的分支testing

當你以此方式在上次提交更新之後建立新分支,如果後來又有更新提交,然後又切換到了testing分支,git將還原你的工作目錄到你建立分支時候的樣子。

切換分支:

 git checkout (branchname)

  

我們也可以用checkout建立分支

 git checkout -b (branchname)

 

刪除分支

git branch -d (branchname)

  

分支合併:

一旦有某個分支獨立內容,你終究會希望將它合併到你的主分支。你可以使用一下命令將任何分支合併到當前分支中:

git branch 

*master

newtest

ls

test1.log test2.log

git merge newtest  //將newtest 分支合併到master分支上

  

合併完成之後刪除分支:

git branch -d newtest

  

合併衝突:

合併衝突不僅僅是簡單地檔案新增,移除的操作,Git也會合並修改。

git branch

*master

  

首先,我們建立一個叫做 change_site 的分支,切換過去,我們將 runoob.php 內容改為:

<?php
echo 'runoob';
?>

  

建立 change_site 分支:

$ git checkout -b change_site
Switched to a new branch 'change_site'
$ vim runoob.php
$ head -3 runoob.php
<?php
echo 'runoob';
?>
$ git commit -am 'changed the runoob.php'
[change_site 7774248] changed the runoob.php
 1 file changed, 3 insertions(+)

  

將修改的內容提交到 change_site 分支中。 現在,假如切換回 master 分支我們可以看內容恢復到我們修改前的(空檔案,沒有程式碼),我們再次修改 runoob.php 檔案。

$ git checkout master
Switched to branch 'master'
$ cat runoob.php
$ vim runoob.php    # 修改內容如下
$ cat runoob.php
<?php
echo 1;
?>
$ git diff
diff --git a/runoob.php b/runoob.php
index e69de29..ac60739 100644
--- a/runoob.php
+++ b/runoob.php
@@ -0,0 +1,3 @@
+<?php
+echo 1;
+?>
$ git commit -am '修改程式碼'
[master c68142b] 修改程式碼
 1 file changed, 3 insertions(+)

  

現在這些改變已經記錄到我的 "master" 分支了。接下來我們將 "change_site" 分支合併過來。

$ git merge change_site
Auto-merging runoob.php
CONFLICT (content): Merge conflict in runoob.php
Automatic merge failed; fix conflicts and then commit the result.

$ cat runoob.php     # 代開檔案,看到衝突內容
<?php
<<<<<<< HEAD
echo 1;
=======
echo 'runoob';
>>>>>>> change_site
?>

  

我們將前一個分支合併到 master 分支,一個合併衝突就出現了,接下來我們需要手動去修改它。

$ vim runoob.php 
$ cat runoob.php
<?php
echo 1;
echo 'runoob';
?>
$ git diff
diff --cc runoob.php
index ac60739,b63d7d7..0000000
--- a/runoob.php
+++ b/runoob.php
@@@ -1,3 -1,3 +1,4 @@@
  <?php
 +echo 1;
+ echo 'runoob';
  ?>

  

在 Git 中,我們可以用 git add 要告訴 Git 檔案衝突已經解決

$ git status -s
UU runoob.php
$ git add runoob.php
$ git status -s
M  runoob.php
$ git commit
[master 88afe0e] Merge branch 'change_site'

  

現在我們成功解決了合併中的衝突,並提交了結果。

Git檢視提交歷史

git 提交歷史一般常用兩個命令

git log --- 檢視歷史提交記錄

git blame <file> 以列表形式檢視指定檔案的歷史修改記錄。

  

在使用 Git 提交了若干更新之後,又或者克隆了某個專案,想回顧下提交歷史,我們可以使用git log命令檢視

$ git log
commit d5e9fc2c811e0ca2b2d28506ef7dc14171a207d9 (HEAD -> master)
Merge: c68142b 7774248
Author: runoob <[email protected]>
Date:   Fri May 3 15:55:58 2019 +0800

    Merge branch 'change_site'

commit c68142b562c260c3071754623b08e2657b4c6d5b
Author: runoob <[email protected]>
Date:   Fri May 3 15:52:12 2019 +0800

    修改程式碼

commit 777424832e714cf65d3be79b50a4717aea51ab69 (change_site)
Author: runoob <[email protected]>
Date:   Fri May 3 15:49:26 2019 +0800

    changed the runoob.php

commit c1501a244676ff55e7cccac1ecac0e18cbf6cb00
Author: runoob <[email protected]>
Date:   Fri May 3 15:35:32 2019 +0800

  

我們可以用 --oneline 選項來檢視歷史記錄的簡潔版本

$ git log --oneline
$ git log --oneline
d5e9fc2 (HEAD -> master) Merge branch 'change_site'
c68142b 修改程式碼
7774248 (change_site) changed the runoob.php
c1501a2 removed test.txt、add runoob.php
3e92c19 add test.txt
3b58100 第一次版本提交

  

git blame

      如果要檢視指定檔案的修改記錄可以使用 git blame 命令,格式如下:
git blame <file>

  

git blame 命令是以列表形式顯示修改記錄,如下例項:

$ git blame README 
^d2097aa (tianqixin 2020-08-25 14:59:25 +0800 1) # Runoob Git 測試
db9315b0 (runoob    2020-08-25 16:00:23 +0800 2) # 菜鳥教程 

  

git撤銷本地修改與回退版本

.1 使用git checkout撤銷本地修改

即放棄對本地已修改但尚未提交的檔案的修改,還原其到未修改前的狀態。
注意: 已 add/ commit 的檔案不適用個方法,應該用本文提到的第二種方法。

命令如下:

git checkout . # 撤銷對所有已修改但未提交的檔案的修改,但不包括新增的檔案
git checkout [filename] # 撤銷對指定檔案的修改,[filename]為檔名

  

2. 使用 git reset 回退專案版本

可以回退到任意已經提交過的版本。已 add / commit 但未 push 的檔案也適用。

命令如下:

git reset --hard [commit-hashcode]
# [commit-hashcode]是某個 commit 的雜湊值,可以用 git log 檢視

  

因此一般用法是先用 git log 檢視具體commit的雜湊值,然後 reset 到那個版本。