git 學習筆記

1.   Centos 安裝、卸載 git

yum install gitgit

yum remove gitgithub

2.   安裝完成最後一步設置:

$ git config --global user.name "Your Name"網絡

$ git config --global user.email email@example.comapp

 

3.   建立版本庫

首先,選擇一個合適的地方,建立一個空目錄:ssh

$ mkdir learngitfetch

$ cd learngitspa

$ pwd指針

/Users/michael/learngit日誌

第二步,經過git init命令把這個目錄變成Git能夠管理的倉庫:code

$ git init

Initialized empty Git repository in /Users/michael/learngit/.git/

4.       把文件添加到版本庫

編寫一個readme.txt文件,內容以下:

Git is a version control system.

Git is free software.

第一步,用命令git add告訴Git,把文件添加到倉庫:

$ git add readme.txt

第二步,用命令git commit告訴Git,把文件提交到倉庫(-m後面輸入的是本次提交的說明):

$ git commit -m "wrote a readme file"

[master (root-commit) cb926e7] wrote a readme file

 1 file changed, 2 insertions(+)

 create mode 100644 readme.txt

 

爲何Git添加文件須要add,commit一共兩步呢?由於commit能夠一次提交不少文件,因此你能夠屢次add不一樣的文件,好比:

$ git add file1.txt

$ git add file2.txt file3.txt

$ git commit -m "add 3 files."

 

 

 

要隨時掌握工做區的狀態,使用git status命令。

若是git status告訴你有文件被修改過,用git diff能夠查看修改內容

 

在Git中查看歷史記錄,顯示從最近到最遠的提交日誌:

$ git log

$ git log --pretty=oneline

一大串相似3628164...882e1e0的是commit id(版本號)

 

5.   把readme.txt回退到上一個版本

$ git reset --hard HEAD^

用HEAD表示當前版本,上一個版本就是HEAD^,上上一個版本就是HEAD^^,固然往上100個版本寫100個^比較容易數不過來,因此寫成HEAD~100。

或:

$ git reset --hard 3628164(3628164指版本號)

版本號不必寫全,前幾位就能夠了,Git會自動去找。固然也不能只寫前一兩位,由於Git可能會找到多個版本號,就沒法肯定是哪個了。

 

Git提供了一個命令git reflog用來記錄你的每一次命令:

 

6.   工做區和暫存區

工做區(Working Directory)

就是你在電腦裏能看到的目錄,好比個人learngit文件夾就是一個工做區

 

版本庫(Repository)

工做區有一個隱藏目錄.git,這個不算工做區,而是Git的版本庫。

Git的版本庫裏存了不少東西,其中最重要的就是稱爲stage(或者叫index)的暫存區,還有Git爲咱們自動建立的第一個分支master,以及指向master的一個指針叫HEAD。

 

 

git diff HEAD -- readme.txt命令能夠查看工做區和版本庫裏面最新版本的區別:

7.   撤銷修改

丟棄工做區的修改:

$ git checkout -- readme.txt

 

把暫存區的修改撤銷掉(unstage),從新放回工做區:

$ git reset HEAD readme.txt

8.   刪除文件

$ git rm test.txt

rm 'test.txt'

$ git commit -m "remove test.txt"

[master d17efd8] remove test.txt

 1 file changed, 1 deletion(-)

 delete mode 100644 test.txt

 

 

 

9.   遠程倉庫

第1步:建立SSH Key。

$ ssh-keygen -t rsa -C youremail@example.com

 

 

 

第2步:登錄GitHub

打開「Account settings」,「SSH Keys」頁面:

而後,點「Add SSH Key」,填上任意Title,在Key文本框裏粘貼id_rsa.pub文件的內容

 

 

 

 

添加遠程庫--先有本地庫,後有遠程庫的時候,如何關聯遠程庫

登錄GitHub,而後,在右上角找到「Create a new repo」按鈕,建立一個新的倉庫:

 

 

在本地的learngit倉庫下運行命令:

$ git remote add origin git@github.com:JaceyKan/LearnPython.git

遠程庫的名字就是origin,這是Git默認的叫法,也能夠改爲別的,可是origin這個名字一看就知道是遠程庫

 

下一步,就能夠

把本地庫的全部內容推送到遠程庫上:

$ git push -u origin master

因爲遠程庫是空的,咱們第一次推送master分支時,加上了-u參數,Git不但會把本地的master分支內容推送的遠程新的master分支,還會把本地的master分支和遠程的master分支關聯起來,在之後的推送或者拉取時就能夠簡化命令。

 

從如今起,只要本地做了提交,就能夠經過命令:

$ git push origin master

 

查看/刪除已創建的遠程庫

 

 

從遠程庫克隆---先建立遠程庫,而後,從遠程庫克隆

用命令git clone克隆一個本地庫:

$ git clone git@github.com:JaceyKan/gitskills.git

 

問題1:git push -u origin master出錯

ssh: Could not resolve hostname github.com: Name or service not known

fatal: The remote end hung up unexpectedly

 

緣由:網絡不通,沒法ping通github

 

設置好網絡就能夠了

 

 

 

 

建立與合併分支

首先,咱們建立dev分支,而後切換到dev分支:

$ git checkout -b dev

Switched to a new branch 'dev'

 

git checkout命令加上-b參數表示建立並切換,至關於如下兩條命令:

$ git branch dev

$ git checkout dev

Switched to branch 'dev'

 

而後,用git branch命令查看當前分支:

$ git branch

* dev

  master

 

切換回master分支:

$ git checkout master

Switched to branch 'master'

 

合併指定分支到當前分支,把dev分支的工做成果合併到master分支上:

$ git merge dev

Updating d17efd8..fec145a

Fast-forward

 readme.txt |    1 +

 1 file changed, 1 insertion(+)

 

刪除dev分支:

$ git branch -d dev

Deleted branch dev (was fec145a).

 

查看分支:git branch

建立分支:git branch <name>

切換分支:git checkout <name>

建立+切換分支:git checkout -b <name>

合併某分支到當前分支:git merge <name>

刪除分支:git branch -d <name>

 

用帶參數的git log也能夠看到分支的合併狀況:

$ git log --graph --pretty=oneline --abbrev-commit

*   59bc1cb conflict fixed

|\

| * 75a857c AND simple

* | 400b400 & simple

|/

* fec145a branch test

...

 

準備合併dev分支,請注意--no-ff參數,表示禁用Fast forward:

$ git merge --no-ff -m "merge with no-ff" dev

Merge made by the 'recursive' strategy.

 readme.txt |    1 +

 1 file changed, 1 insertion(+)

由於本次合併要建立一個新的commit,因此加上-m參數,把commit描述寫進去。

 

把當前工做現場「儲藏」起來,等之後恢復現場後繼續工做:

$ git stash

Saved working directory and index state WIP on dev: 6224937 add merge

HEAD is now at 6224937 add merge

 

查看被儲藏起來的工做現場:

$ git stash list

stash@{0}: WIP on dev: 6224937 add merge

工做現場還在,Git把stash內容存在某個地方了,可是須要恢復一下,有兩個辦法:

 

一是用git stash apply恢復,可是恢復後,stash內容並不刪除,你須要用git stash drop來刪除;

 

另外一種方式是用git stash pop,恢復的同時把stash內容也刪了:

 

能夠屢次stash,恢復的時候,先用git stash list查看,而後恢復指定的stash,用命令:

$ git stash apply stash@{0}

 

強行刪除分支:

$ git branch -D feature-vulcan

 

多人協做

查看遠程庫的信息:

$ git remote

origin

或者顯示更詳細的信息:

$ git remote -v

origin  git@github.com:michaelliao/learngit.git (fetch)

origin  git@github.com:michaelliao/learngit.git (push)

上面顯示了能夠抓取和推送的origin的地址。若是沒有推送權限,就看不到push的地址。

 

推送分支,就是把該分支上的全部本地提交推送到遠程庫。

推送時,要指定本地分支:

$ git push origin master

 

多人協做的工做模式

1.首先,能夠試圖用git push origin branch-name推送本身的修改;

2.若是推送失敗,則由於遠程分支比你的本地更新,須要先用git pull試圖合併;

3.若是合併有衝突,則解決衝突,並在本地提交;

4.沒有衝突或者解決掉衝突後,再用git push origin branch-name推送就能成功!

5.若是git pull提示「no tracking information」,則說明本地分支和遠程分支的連接關係沒有建立,用命令

git branch --set-upstream branch-name origin/branch-name

相關文章
相關標籤/搜索