Git 基礎使用詳解

寫在最前:

Git❓一小時學會 Git

一、基本命令

1、git status #查看修改狀態

# 查看指定文件狀態
git status [filename]

# 查看所有文件狀態
git status

2、git pull origin master #拉取遠程倉庫 master 分支合併到本地,master 根據場景換成其它分支名

3、git add file #添加文件到暫存區,可用 * or . 添加所有

# 添加指定文件到暫存區
$ git add [file1] [file2] ...

# 添加指定目錄到暫存區,包括子目錄
$ git add [dir]

# 添加當前目錄的所有文件到暫存區
$ git add .

4、git commit -m "commit message" #提交暫存區到倉庫區(提交到本地版本庫,並添加註釋,註釋表明此次修改內容,要清晰準確)

# 提交暫存區到倉庫區
$ git commit -m [message]

# 提交暫存區的指定文件到倉庫區
$ git commit [file1] [file2] ... -m [message]

# 提交工作區自上次commit之後的變化,直接到倉庫區,跳過了add,對新文件無效
$ git commit -a

# 提交時顯示所有diff信息
$ git commit -v

# 使用一次新的commit,替代上一次提交
# 如果代碼沒有任何新變化,則用來改寫上一次commit的提交信息
$ git commit --amend -m [message]

# 重做上一次commit,幷包括指定文件的新變化
$ git commit --amend [file1] [file2] ...

5、git push origin master #將本地版本提交到遠程倉庫 master 分支,master 根據場景換成其它分支名(將本地的 master 分支推送到 origin 主機的 master 分支,如果後者不存在,則會被新建)

對大部分日常工作來說, 上面幾個命令基本就夠用了。

二、新建項目

1、設置用戶名與郵箱(用戶標識,必要)

當你安裝 Git 後首先要做的事情是設置你的用戶名稱和 e-mail 地址。這是非常重要的,因爲每次 Git 提交都會使用該信息。它被永遠的嵌入到了你的提交中

$ git config --global user.name "wufei"  # 名稱
$ git config --global user.email [email protected]   # 郵箱

只需要做一次這個設置,如果你傳遞了 --global 選項,因爲 Git 將總是會使用該信息來處理你在系統中所做的一切操作。如果你希望在一個特定的項目中使用不同的名稱或 e-mail 地址,你可以在該項目中運行該命令而不要 --global 選項。 總之--global爲全局配置,不加爲某個項目的特定配置

2. 從本地到遠程

項目開發的時候,有時候是先在本地建一個項目,再提交到遠程倉庫的。

  1.  創建項目目錄(或通過 IDE 創建),命令行 cd 到項目目錄
  2.  執行 git init , 將在項目目錄創建 .git 目錄
  3.  執行 git add * ,將所有文件添加到暫存區,這裏要先創建一個 .gitignore 文件,將不需要版本維護的文件添加進去忽略,不然各種 IDE 編譯文件夾,環境相關文件都加到版本庫去了。刪除文件用 git rm file_name
  4.  執行 git commit -m "upload project" ,提交到本地倉庫
  5.  在 gitlab 或 github 上創建一個倉庫,並將倉庫地址複製下來
  6.  執行 git remote add origin git@server-name:path/repo-name.git ,關聯遠程倉庫,倉庫地址如果是 http 開頭則要用戶名密碼,如果是 git 開頭,則是走的 ssh 協議,需要將你本機的 ssh 公鑰添加到遠程倉庫服務上。
  7.  執行 git push -u origin master ,推送本地倉庫內容到遠程倉庫

這樣在遠程倉庫目錄,就能看到你提交上去的文件內容了。

3. 從遠程到本地

更多的時候,是遠程倉庫已有項目了,需要下載到本地開發

  1.  git clone git@server-name:path/repo-name.git , 將遠程倉庫的內容下載到本地,這裏倉庫地址的處理同上
  2. 修改內容
  3.  git add * ,將修改的內容添加到暫存區
  4.  git commit -m "fix xxx issue" ,提交到本地倉庫
  5.  git push -u origin master , 推送本地倉庫內容至遠程倉庫

版本回退

有時候改了文件,想反悔怎麼辦,git 給你“後悔藥”。

單個文件的還原:

  •  git checkout file_name ,丟棄工作區的修改,還原到上次提交(commit)的版本,
  •  git reset HEAD file_name ,把暫存區的修改撤銷掉(unstage),重新放回工作區。即還原到上次添加到暫存區(add)的版本

這裏涉及幾個場景

  •  場景1:當你改亂了工作區某個文件的內容,想直接丟棄工作區的修改時,用命令 git checkout file_name
  •  場景2:當你不但改亂了工作區某個文件的內容,還添加到了暫存區時(執行了 add,但沒執行 commit),想丟棄修改,分兩步,第一步用命令 git reset HEAD file_name,就回到了場景1,第二步按場景1操作。
  •  場景3:已經提交了不合適的修改到版本庫時,想要撤銷本次的全部提交,參考下面的整個版本的還原,不過前提是沒有推送到遠程庫。

整個版本的還原:

  •  git reset --hard HEAD^^, 回退到上上個版本
  •  git reset --hard 3628164, 回退到具體某個版本 3628164 是具體某個 commit_id 縮寫

找不到 commit_id? git reflog 可查看每一個命令的歷史記錄,獲取對應操作的 commit_id。git log [--pretty=oneline], 可查看 commit 記錄

上一個版本就是 HEAD^,上上一個版本就是 HEAD^^,往上 100 個版本寫成 HEAD~100。3628164 是具體某個 commit_id,不需要寫全,只需要唯一確定就行,可往前進也可往後退。(git windows2.20.1 版貌似不支持對 HEAD^ 的操作)

多人協作

  1.  首先,可以試圖用 git push origin branch_name 推送自己的修改;
  2.  如果推送失敗,則因爲遠程分支比你的本地更新,需要先用 git pull 試圖合併;
  3.  如果合併有衝突,則手動解決衝突,並在本地提交;
  4.  沒有衝突或者解決掉衝突後,再用 git push origin branch-name 推送就能成功!

如果 git pull 提示“no tracking information”,則說明本地分支和遠程分支的鏈接關係沒有創建,用命令 git branch –set-upstream branch-name origin/branch-name

在本地創建和遠程分支對應的分支,使用 git checkout -b branch-name origin/branch-name,本地和遠程分支的名稱最好一致

分支管理

平時開發時需要創建子分支來實現你的功能模塊,然後再合併到主分支中。

  •  git checkout -b your_branch_name , 創建並切換分支
  •  git branch , 查看分支,標有*號表示當前所在分支
  •  git merge dev , 合併指定 dev 分支到當前分支
  •  git merge --no-ff -m "merge with no-ff" dev , 合併分支並生成commit記錄
  •  git branch -d dev , 刪除分支

git checkout -b dev = git branch dev + git checkout dev

Fast-forward 合併,“快進模式”,也就是直接把 master 指向 dev 的當前提交,所以合併速度非常快。存在衝突的不能 fast forward。git merge --no-ff -m "merge with no-ff" dev Fast forward 模式下,刪除分支後,會丟掉分支信息。如果強制禁用 Fast forward 模式,Git 就會在 merge 時生成一個新的 commit,這樣,從分支歷史上就可以看出分支信息

標籤管理

當發佈版本時,一般需要對當前版本進行標籤記錄,以便後續進行版本查看或回退。

  •  git tag tag_name , 對當前分支打標籤
  •  git tag , 查看所有標籤
  •  git tag v0.9 6224937 ,針對某個具體 commit id 打標籤
  •  git show tag_name , 查看標籤信息
  •  git tag -a v0.1 -m "version 0.1 released" 3628164 , 帶有說明的標籤
  •  git tag -d v0.1 , 刪除標籤
  •  git push origin tag_name , 推送標籤到遠程
  •  git push origin --tags , 一次性推送所有標籤

刪除已經推送到遠程的標籤:

  •  git tag -d v0.9 , 先本地刪除
  •  git push origin :refs/tags/v0.9 , 然後從遠程刪除

提高效率的 Tips

配置命令別名

# 查看系統config
git config --system --list
  
# 查看當前用戶(global)配置
git config --global --list

# 查看當前倉庫配置信息
git config --local --list

 

git config --global alias.st status # 後面可以用 git st 來代替 git status 了

git config --global alias.ck checkout  # 後面可以用 git ck 來代替 git checkout 了

git config --global alias.cm 'commit -m' # 後面可以用 git cm 來代替 git commit -m 了

git pull origin master 或 git push origin master, 可直接 git pull 或 git push, 如果出現“no tracking information”的提示,則說明本地分支和遠程分支的鏈接關係沒有創建,用命令 git branch --set-upstream-to=origin/master master 建立關聯即可。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章