GIT學習隨筆
GIT學習隨筆
目錄學習參考路徑:
- https://www.liaoxuefeng.com/wiki/896043488029600
- https://study.163.com/course/courseLearn.htm?courseId=1004421003#/learn/video?lessonId=1048771063&courseId=1004421003
- https://www.liaoxuefeng.com/wiki/896043488029600/896067008724000
git pull只是拉取當前分支內容?
git結構
- 工作區
- 暫存區
- 版本區(倉庫區)
git 理解
工作區有一個隱藏目錄.git
,這個不算工作區,而是Git的版本庫。
Git的版本庫裡存了很多東西,其中最重要的就是稱為stage(或者叫index)的暫存區,還有Git為我們自動建立的第一個分支master
,以及指向master
的一個指標叫HEAD
。
為什麼Git新增檔案需要add
,commit
一共兩步呢?因為commit
可以一次提交很多檔案,所以你可以多次add
不同的檔案,比如:
$ git add file1.txt 新增到暫存區 $ git add file2.txt file3.txt $ git commit -m "add 3 files." 提交到版本庫
git建立本地倉庫操作
-
git初始化:
git init
-
git 配置:
git config user.name "name"
git config user.email "email"
-
檢視使用者及郵箱:
git config user.name
git config user.email
-
設定忽略檔案:
新建 .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 --cached [檔名]
git diff HEAD [檔名]
git diff
-abcd -代表檔案修改前的
+abcde +代表檔案修改後的
撤銷
前提:必須是已經跟蹤的檔案。若新增一個檔案未add跟蹤,則不可撤銷。
-
放棄工作區的修改
即還沒有git add .
git checkout -- 目錄/檔案路徑
快取區覆蓋工作區 -
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指向當前分支
-
建立分支:
$ git branch dev
-
切換分支:
$ git checkout dev
-
建立並切換分支:
$ git checkout -b dev
-
推送本地分支到遠端分支:
$ git push --set-upstream origin dev
-
檢視分支:
$ git branch
檢視本地所有的分支名稱$ git branch -a
檢視本地及遠端所有的分支名稱$ git branch -r
檢視遠端所有的分支名稱$ git branch -v
檢視本地所有的分支名稱+版本號+註釋資訊
-
合併分支:
git merge dev
-
刪除本地分支:
$ git branch -d dev
丟棄一個沒有被合併過的分支,可以通過
git branch -D <name>
強行刪除 -
刪除遠端分支1:
- 先刪除本地分支:
$ git branch -d dev
- 再推送到遠端:
$ git push origin :dev
(因為推送到遠端分支是:git push origin dev:dev
)
- 先刪除本地分支:
-
刪除遠端分支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推送了
關聯本地倉庫到遠端倉庫
-
本地初始化一個倉庫:
git init
-
配置:
git config user.name "wpy"
git config.email "email"
-
github建立倉庫
-
關聯倉庫:
-
git remote add origin [email protected]:wpy/倉庫名.git
關聯 -
git push -u origin master
加上了
-u
引數,Git不但會把本地的master
分支內容推送的遠端新的master
分支,還會把本地的master
分支和遠端的master
分支關聯起來,在以後的推送或者拉取時就可以簡化命令 -
之後的提交可以使用
git push origin master
-
檢視遠端庫的資訊
-
檢視遠端倉庫資訊:
$ git remote
$ git remote origin
-
檢視詳細的遠端資訊:
git remote -v
$ git remote -v origin [email protected]:Yong/Feed.git (fetch) origin [email protected]:Yong/Feed.git (push)
-
檢視遠端分支:
git branch -r
$ git branch -r origin/HEAD -> origin/master origin/dev origin/master origin/test
-
檢視本地及遠端所有分支:
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 標籤名