1. 程式人生 > 其它 >GIT學習隨筆

GIT學習隨筆

GIT學習隨筆

目錄

學習參考路徑:

  1. https://www.liaoxuefeng.com/wiki/896043488029600
  2. https://study.163.com/course/courseLearn.htm?courseId=1004421003#/learn/video?lessonId=1048771063&courseId=1004421003
  3. https://www.liaoxuefeng.com/wiki/896043488029600/896067008724000

git pull只是拉取當前分支內容

git結構

  • 工作區
  • 暫存區
  • 版本區(倉庫區)

git 理解

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

Git的版本庫裡存了很多東西,其中最重要的就是稱為stage(或者叫index)的暫存區,還有Git為我們自動建立的第一個分支master,以及指向master的一個指標叫HEAD

為什麼Git新增檔案需要addcommit一共兩步呢?因為commit可以一次提交很多檔案,所以你可以多次add不同的檔案,比如:

$ git add file1.txt                新增到暫存區
$ git add file2.txt file3.txt
$ git commit -m "add 3 files."     提交到版本庫

git建立本地倉庫操作

  1. git初始化:git init

  2. git 配置:

    git config user.name "name"

    git config user.email "email"

  3. 檢視使用者及郵箱:

    git config user.name

    git config user.email

  4. 設定忽略檔案:

    新建 .gitignore檔案,在這個檔案中寫入忽略規則。

    忽略py檔案:*.py

    忽略t目錄:/t

檢視日誌

git log 檢視提交的記錄

git log --pretty=oneline / git log --oneline 一行展示

git log -p 展示修改了哪些檔案,修改的內容是什麼

git reflog 記錄你的每一次命令

gitk 圖形化介面檢視提交記錄

git log -n 檢視最近的n次提交

git克隆

# git拉取遠端指定分支
$ git clone 遠端倉庫地址 -b 遠端分支 [本地檔案目錄]

# 檢視git的配置資訊
git config -l

git注意點

工作區的檔案A內容與遠端區檔案A內容不一致,pull之後會覆蓋工作區檔案A內容
暫存區的檔案A內容與遠端區檔案A內容不一致,必須commit 或者 stash後才能pull(否則報錯),然後解決衝突

commit前的內容都可以暫存,git pull之後解決衝突即可

切換分支前必須commit 或者 stash

解決衝突的兩種方式

解決方式1:
    git add .
    git commit -m '註釋'
    git pull,有衝突
    解決衝突,繼續提交推送

解決方式2:【git在不想commit的情況下進行git pull操作】
    git stash save '註釋'
    git pull
    git stash pop index
    解決衝突,繼續提交推送

git stash使用

# 暫存(commit前的內容都可以暫存)
git stash save '本次暫存的標識名字'

# 檢視暫存記錄
git stash list

# 恢復指定的暫存工作, 暫存記錄儲存在list內,需要通過list索引index取出恢復
# pop命令恢復,恢復後,刪除儲存在list內記錄
git stash pop stash@{index}
# apply命令恢復,恢復後,暫存區域會保留當前的記錄
git stash apply stash@{index}

# 刪除list內的某個暫存
git stash drop stash@{index}

# 刪除全部暫存
git stash clear

比較差異

git diff 學習

git diff [檔名]

git diff --cached [檔名]

git diff HEAD [檔名]

git diff
-abcd      -代表檔案修改前的
+abcde     +代表檔案修改後的

撤銷

前提:必須是已經跟蹤的檔案。若新增一個檔案未add跟蹤,則不可撤銷。

  1. 放棄工作區的修改 即還沒有git add .

    git checkout -- 目錄/檔案路徑 快取區覆蓋工作區

  2. git checkout 版本號 目錄/檔案路徑 版本庫覆蓋工作區,並覆蓋快取區

版本回退

git reset --hard HEAD^ 回退上個版本

git reset --hard HEAD~10 回退10個版本

git reset --hard <版本號> 回退到指定的版本號

向前或向後切換版本(指標的移動)

HEAD表示當前最新版本
HEAD^表示當前最新版本的前一個版本
HEAD^^表示當前最新版本的前兩個版本,以此類推...

HEAD~1表示當前最新版本的前一個版本
HEAD~10表示當前最新版本的前10個版本,以此類推...

撤銷與回退版本的對比

git checkout 版本號 .

分支master執行版本號不變,只是將其他版本的內容覆蓋到了當前版本

git reset --hard 版本號

分支master指向其他版本號。

git checkout 版本號 .

王鵬遠@DESKTOP-7348GT4 MINGW64 ~/Desktop/BCD (master)
$ git reflog
f29b04a (HEAD -> master) HEAD@{0}: commit: C3
85cb019 HEAD@{1}: commit: C2
54a8043 HEAD@{2}: commit (initial): C1

王鵬遠@DESKTOP-7348GT4 MINGW64 ~/Desktop/BCD (master)
$ git log --oneline
f29b04a (HEAD -> master) C3
85cb019 C2
54a8043 C1

git reset --hard 版本號

$ git reflog
f1d7e32 (HEAD -> master) HEAD@{0}: commit: C3
18a1f87 HEAD@{1}: reset: moving to 18a1
571589f HEAD@{2}: commit: C2
18a1f87 HEAD@{3}: commit (initial): C1

王鵬遠@DESKTOP-7348GT4 MINGW64 ~/Desktop/ABC (master)
$ git log --oneline
f1d7e32 (HEAD -> master) C3
18a1f87 C1
刪除檔案

https://www.liaoxuefeng.com/wiki/896043488029600/900002180232448

分支

重點理解:master是一個初始分支,master指向最新的提交,HEAD指向當前分支

  1. 建立分支:$ git branch dev

  2. 切換分支:$ git checkout dev

  3. 建立並切換分支:$ git checkout -b dev

  4. 推送本地分支到遠端分支:$ git push --set-upstream origin dev

  5. 檢視分支:

    $ git branch 檢視本地所有的分支名稱

    $ git branch -a 檢視本地及遠端所有的分支名稱

    $ git branch -r 檢視遠端所有的分支名稱

    $ git branch -v 檢視本地所有的分支名稱+版本號+註釋資訊

  1. 合併分支:git merge dev

  2. 刪除本地分支:$ git branch -d dev

    丟棄一個沒有被合併過的分支,可以通過git branch -D <name>強行刪除

  3. 刪除遠端分支1:

    1. 先刪除本地分支:$ git branch -d dev
    2. 再推送到遠端:$ git push origin :dev (因為推送到遠端分支是:git push origin dev:dev)
  4. 刪除遠端分支2:git push origin --delete 分支名

切換分支的一個注意點

在dev分支下修改了一個已經commit的檔案,此時修改的檔案在commit之前無法切換分支

可以使用git stash 暫存

$ git checkout master

error: Your local changes to the following files would be overwritten by checkout:
        b.txt
Please commit your changes or stash them before you switch branches.

檢視分支的合併情況

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

git log --graph

解決衝突

衝突解決:修改檔案內容

修改後操作:

$ git add readme.txt 
$ git commit -m "conflict fixed"

遠端倉庫

建立SSH Key

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

GitHub允許你新增多個Key。假定你有若干電腦,你一會兒在公司提交,一會兒在家裡提交,只要把每臺電腦的Key都新增到GitHub,就可以在每臺電腦上往GitHub推送了

關聯本地倉庫到遠端倉庫
  1. 本地初始化一個倉庫:git init

  2. 配置:git config user.name "wpy" git config.email "email"

  3. github建立倉庫

  4. 關聯倉庫:

    1. git remote add origin [email protected]:wpy/倉庫名.git 關聯

    2. git push -u origin master

      加上了-u引數,Git不但會把本地的master分支內容推送的遠端新的master分支,還會把本地的master分支和遠端的master分支關聯起來,在以後的推送或者拉取時就可以簡化命令

    3. 之後的提交可以使用git push origin master

檢視遠端庫的資訊
  1. 檢視遠端倉庫資訊:$ git remote

    $ git remote
    origin
    
  2. 檢視詳細的遠端資訊:git remote -v

    $ git remote -v
    origin  [email protected]:Yong/Feed.git (fetch)
    origin  [email protected]:Yong/Feed.git (push)
    
  3. 檢視遠端分支:git branch -r

    $ git branch -r
      origin/HEAD -> origin/master
      origin/dev
      origin/master
      origin/test
    
  4. 檢視本地及遠端所有分支:git branch -a

    $ git branch -a
      dev
      master
    * test
      remotes/origin/HEAD -> origin/master
      remotes/origin/dev
      remotes/origin/master
      remotes/origin/test
    
推送本地分支到遠端分支

本地開好分支,然後推送到遠端

$ git checkout -b dev 	//建立並切換到分支dev
$ git push origin dev:dev
//推送本地的dev(冒號前面的)分支到遠端origin的dev(冒號後面的)分支(沒有會自動建立)

通俗方式二:

抓取遠端分支(切換遠端分支)

遠端先開好分支,然後拉取到本地

切換到遠端dev分支,在本地起同名分支,並切換到本地的這個同名分支

git checkout -b dev origin/dev 			//檢出遠端的dev分支到本地

開發完成後推送分支到遠端:

$ git push origin dev

通俗方式二:

刪除遠端分支

git push origin --delete 遠端分支名

error:

回退版本---修改內容/commit---push(報錯)---pull(衝突,合併)---add---commit---push

aaa@DESKTOP-2EBU1DH MINGW64 ~/Desktop/lx (test)
$ git commit -m "three 3"
[test 88c7878] three 3
 1 file changed, 2 insertions(+), 1 deletion(-)

aaa@DESKTOP-2EBU1DH MINGW64 ~/Desktop/lx (test)
$ git push
To github.com:wangpy-github/lx.git
 ! [rejected]        test -> test (non-fast-forward)
error: failed to push some refs to '[email protected]:wangpy-github/lx.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

aaa@DESKTOP-2EBU1DH MINGW64 ~/Desktop/lx (test)
$ git pull
Auto-merging b.txt
CONFLICT (content): Merge conflict in b.txt
Automatic merge failed; fix conflicts and then commit the result.

版本打標籤

本地打標籤:

git tag -a 標籤名 -m '標籤描述'

推送標籤到遠端倉庫:

git push origin 標籤名

刪除本地標籤

git tag -d 標籤名

刪除遠端倉庫標籤

git push origin --delete tag 標籤名