git 實用命令

1.安裝git

安裝最新版本

#add-apt-repository ppa:git-core/ppa
#apt-get update
#apt-get install git
# git --version
git version 2.16.1已經2018年最新的了
安裝完後配置姓名和郵箱
# git config --global user.name "xxx"
# git config --global user.email "xxx.xx"

2.創建版本庫repository

# git init
已初始化空的 Git 倉庫於 /home/xx/github/test/.git/

3.向倉庫添加文件

# git add readme.txt
# git commit -m "add a readme file" //commit可以一次提交多個文件

4.查看倉庫的狀態

# git status
# 位於分支 master
# 尚未暫存以備提交的變更:
#   (使用 "git add <文件>..." 更新要提交的內容)
#   (使用 "git checkout -- <文件>..." 丟棄工作區的改動)
#
#   修改:     readme.txt
如果文件被修改可以通過git diff查看被修改的內容
# git diff readme.txt 
diff --git a/readme.txt b/readme.txt
index 2ed92d3..8d64031 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1 +1,2 @@
 This is a test git
+I like git 

5.查看提交日誌

# git log
commit d348a228ea9ecc20f7a19a72786b586aaf3b40c8 (HEAD -> master)
Date:   Thu Feb 1 14:21:31 2018 +0800

    add name

commit cb710a78ba786020ba5a67e1df2f09064e6a1846
Date:   Thu Feb 1 14:19:25 2018 +0800

    add my idea

commit 5abfd56c4af0b1c4beeeb501e58d44e774548dcd
Date:   Thu Feb 1 14:12:35 2018 +0800

    add a readme file
通過git show commit id可以查看版本修改的內容
# git show d348a228ea9ecc20f7a19a72786b586aaf3b40c8
在git中用HEAD表示當前版本HEAD^表示上一個版本

6.版本回退

# git reset --hard HEAD
HEAD 現在位於 d348a22 add name
# git reset --hard HEAD^
HEAD 現在位於 cb710a7 add my idea
# git reset --hard HEAD^
HEAD 現在位於 5abfd56 add a readme file

如果連續執行兩次則回到最初的版本了
HEAD 現在位於 5abfd56 add a readme file
現在想回到add name的那個版本
git reset --hard d348a22
現在又回來了,又回到最新的變化了
# git reflog
記錄了每一次commit id的變更
#git reset --hard commit_id 可以在所有的版本之間穿梭

7.git checkout

使用 “git checkout – <文件>…” 丟棄工作區的改動
回到最近一次git commit或者git add時的狀態

8.刪除文件

如果是用rm刪除了文件想恢復用git checkout 即可
想真的刪除git add /git commit
但是還可以通過# git reset --hard id回去
以可以通過# git rm test.txt刪除test.txt
git rm test.txt
git commit -m ""
以可以通過# git rm test.txt刪除test.txt

9.遠程倉庫

git是分佈式版本控制系統,如果有一臺機器有一個原始版本,別的機器可以“克隆”這個原始版本,沒有主次之分
在服務器上創建一個空的倉庫,有兩種方式使用
一:從這個倉庫克隆出新的倉庫

git clone https://github.com/xxxx/Test.git

二:把一個已有的本地倉庫與之關聯,把本地倉庫的內容推送到服務器倉庫
在本地的倉庫運行:關聯一個遠程庫

# git remote add origin [email protected]:xxxshui/Test.git
已可以輸入git remote add origin https://倉庫的url地址 只是git@比https要快
如果出現fatal:remote origin already exists則執行git remote rm origin
把本地庫所有的內容推送到遠程上
# git push -u origin master //第一次推送master分支的所有內容
出現
Permission denied (publickey).
fatal: 無法讀取遠程倉庫。
由於本地git倉庫和github倉庫之間的傳輸是通過ssh加密的,所以需要設置
創建ssh key
# ssh-keygen -t rsa -C "[email protected]"
生成:/root/.ssh/id_rsa id_rsa.pub
在github上打開Account settings SSH keys頁面
在SSH keys Add new 裏面填寫任意title和剛生成的id_rsa.pub
然後再次執行
git push -u origin master
出現:! [rejected]        master -> master (non-fast-forward)
是因爲github上的Readme.md文件不在本地倉庫中
fix:
# git pull --rebase origin master
# git push -u origin master
push 成功
以後修改或增加內容之後直接git push即可

10.分支管理

分支用於多人協同開發,自已的模塊不影響別人的開發,自已也可以每天提交
進度到自已的分支,開發完後,一次性合併到原來的分支上,安全且不影響別人工作
1)創建分支
git默認有一個主分支叫master分支,HEAD指向master,而master指向提交,HEAD
指向當前分支

# git checkout -b bshui
切換到一個新分支 'bshui'
查看當前分支,當前分支前面會標一個*號
# git branch
* bshui
  master
當切換到bshui分支後我們就可以對倉庫裏的內容進行修改了
# git reflog
253a4ea (HEAD -> bshui) HEAD@{0}: commit: add telephone
f0de74e (origin/master, master) HEAD@{1}: checkout: moving from master to bshui
HEAD指針指向了bshui分支
切回主分支:# git checkout master
當在bshui分支上增加或修改的文件不會出現在master分支上

2)合併分支
把bshui分支的工作成果合併到master分支上

# git merge bshui
更新 f0de74e..aade24f
Fast-forward
 a.txt      | 1 +
 readme.txt | 1 +
 2 files changed, 2 insertions(+)
 create mode 100644 a.txt
合併後就可以把bshui分支給刪掉
# git branch -d bshui
已刪除分支 bshui(曾爲 aade24f)。
-------------------------------
查看分支:git branch
創建分支:git branch <name>
切換分支:git checkout <name>

創建+切換分支:git checkout -b <name>
合併某分支到當前分支:git merge <name>
刪除分支:git branch -d <name>
-------------------------------

3)衝突解決
當master分支和bshui分支都修改了同一個文件readme.txt並且都有提交修改
在合併的時候會出現衝突

# git merge bshui
自動合併 readme.txt
衝突(內容):合併衝突於 readme.txt
自動合併失敗,修正衝突然後提交修正的結果。
我們查看readme.txt的內容
# cat readme.txt 
This is a test git
I like git 
My name is DaemonShui
my telephone is 135xxxxx
<<<<<<< HEAD
haoao
=======
hello
>>>>>>> bshui
手動修改後再次提交就合併完成了
git add readme.txt
git commit -m "dd"

git log --graph可以查看分支合併圖
注意:在合併分支時,用--no-ff參數,表示禁用fast forward
默認的合併是用fast forward模式,這樣就看不出來合併的蹤跡
git merge --no-ff -m "merge with no-ff" bshui 有提次參數
master分支是非常穩定的,用來發布新版本
平時在dev分支上做事,不穩定,當稱定後合併到master分支發佈新版本

4)多人協作開發
查看遠程庫信息,使用git remote -v 會顯示可fetch,push的路徑
origin https://github.com/Kylinshui/test.git (fetch)
origin https://github.com/Kylinshui/test.git (push)
從本地推送分支,使用git push origin branch-name,
如果推送失敗,先用git pull抓取遠程的新提交;
在本地創建和遠程分支對應的分支,使用git checkout -b branch-name origin/branch-name,本地和遠程分支的名稱最好一致
建立本地分支和遠程分支的關聯,使用git branch –set-upstream branch-name origin/branch-name
從遠程抓取分支,使用git pull,如果有衝突,要先處理衝突

11.標籤管理

發佈一個版本時,我們通常先在版本庫中打一個標籤(tag),這樣,就唯一確定了打標籤時刻的版本
tag就是一個讓人容易記住的有意義的名字,它跟某個commit綁在一起
1)創建標籤
在需要打標籤的分支上

git tag v1.0就打上了一個標籤

查看所有的標籤

git tag

v1.0
2)刪除標籤
如果標籤打錯了可以刪除
git tag -d v1.0
3)推送標籤到遠程
git push origin v1.0

參考:
https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

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