git配置相關
檢視git各項配置
$ git config --list
配置使用者名稱和郵箱
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
新增暫存區
$ git add filename1 filename2 filename3 ....
$ git add .
新增版本庫
$ git commit -m"add files"
注意,
commit
操作只會提交已經add了的檔案,也就是已經存在暫存區中的檔案了,沒有add的檔案不會被提交
對比
$ git diff filename1
git diff 是對比上次add(暫存區)和當前修改(工作區)的對比。
diff只能監測行的改動,對行的每一個操作都會被認為刪除當前行,新加了一個不一樣的行。1 deletion(-),1 insertion(+)
簡單理解就是對比add前和add後的對比
特別注意,假如commit了,不要誤認為暫存區區就沒有內容了,diff命令就失效了,此時暫存區內仍有最近一次add的內容,所以diff命令依然會比較當前工作區和暫存區的區別
git diff:是檢視working tree與index file的差別的。
git diff –cached:是檢視index file與commit的差別的。
git diff HEAD:是檢視working tree和commit的差別的。
git diff HEAD — readme.txt 和版本庫對比
git diff — readme.txt 和暫存區對比
git diff HEAD -- readme.txt
命令是對比當前工作區
readme.txt檔案和版本庫
中readme.txt檔案的區別,注意,這個命令跨過了暫存區
進行對比
檢視日誌
完整顯示
$ git log
最近的提交在上面,最早的提交在下面
簡單顯示方式
git log --pretty=oneline
版本回退
HEAD
代表當前版本,HEAD^
代表上一個版本,上上個版本就是HEAD^^
,依次類推,HEAD~25
則是回退到上25個版本,下面命令是回退到上個版本,也可以使用git reset --hard HEAD~
或git reset --hard HEAD~1
一樣的效果
$ git reset --hard HEAD^
也可以通過版本號的方式進行,下面就是回退到git log
裡的版本號為48122212
的版本
$ git reset -hard 48122212
假如有A3、A2、A1三個版,當前在A3版本,使用命令回退到了A2的版本,只要當前命令視窗沒有關閉,可以找到在
git log
時,顯示的A3的版本號,即可使用git reset --hard A3版本號
命令“恢復
”到A3的版本
不過,如果視窗關閉了也沒有事,使用如下命令,即可顯示操作的每一次命令,並且有版本號,此時應該明白如何回退了吧
$ git reflog
修改工作區後回退和add後的回退
vim readme.txt 修改
$ git checkout -- readme.txt 還原修改之前
vim readme.txt 修改
$ git add readme.txt
$ git checkout -- readme.txt 不能還原修改之前
需要
$ git reset HEAD readme.txt 清除暫存區的add
然後再
$ git checkout -- readme.txt 還原之前修改
另外個方法
vim readme.txt 修改
$ git add readme.txt
$ git checkout -- readme.txt 不能還原修改之前
直接
git reset --hard 版本號
直接回退到某版本號,暫存區也清空
刪除檔案回退方法(修改同理)
一、rm只刪除工作區資訊;
使用 git checkout -- file即可恢復;
二、git rm 刪除工作區和暫存區資訊;
1、使用git reset HEAD -- file即可恢復;
2、恢復步驟:
1)先使用git reset HeAD -- file從版本庫把已刪除資訊copy到到暫存區;
2)再使用git checkout -- file從暫存區把已刪除資訊copy到工作區。over!!!
3)這時你就看到刪除的檔案又回來啦。啦啦啦!
三、git commit -m “file”刪除工作區,暫存區和版本庫資訊;
1、使用git reset --hard HEAD^即可恢復或git reset HEAD^。
`特別說明`
git reset --hard HEAD^
徹底撤銷最近的提交。引用回退到前一次,而且工作區和暫存區都會回退到上一次提交的狀態。自上一次以來的提交全部丟失。
git reset HEAD^ <指定檔案,不寫即全部>
工作不改變,但是暫存區會回退到上一次提交之前,引用也會回退一次。
2、恢復步驟:
1) git reset HEAD^ <指定檔案,不寫即全部>
1)最後,使用git checkout -- file從暫存區把已刪除資訊copy到工作區。
1)這時你就看到刪除的檔案又回來啦。啦啦啦!
以上我都親自試過,很好用。
遠端庫
origin
是遠端庫的預設名稱,也可以改成自己喜歡的名字,無意外,建議預設
本地庫關聯遠端庫(先有本地庫,後有遠端庫,二者要關聯)
git remote add origin 這裡換成github上的庫地址
或者克隆遠端庫到本地(本地庫沒有,直接克隆遠端庫到本地)
git clone 這裡換成github上的庫地址
修改本地庫和遠端庫的關聯
git remte origin set-url 這裡換成github上的庫地址
master
是遠端庫的名字,也是預設的,建議不動
使用關聯遠端庫的方式的推送
# `-u`的意思是關聯本地`master`和遠端庫的意思`master`
# 往後的推送命令就是用git push origin master推送即可,不需要加-u了,
# 只是第一次要加而已
git push -u origin master
使用克隆的方式的推送
git push origin master
檢視遠端庫
git remote -v
分支
Git鼓勵大量使用分支:
檢視分支:git branch
建立分支:git branch <name>
切換分支:git checkout <name>
建立+切換分支:git checkout -b <name>
此時就在分支下進行編輯,之後一樣add和commit進行操作~
合併某分支到當前分支:git merge <name>
(此為快速合併Fast forward
,出現衝突的時候就必須手動清除衝突了)
刪除分支:git branch -d <name>
清除衝突
建分支,add和commit切換回master,在master下merge 下dev
分支報錯了,需要清除衝突!
$ git merge dev
Auto-merging readme.txt
CONFLICT (content): Merge conflict in readme.txt
Automatic merge failed; fix conflicts and then commit the result.
檢視衝突檔案如下,HEAD
代表當前分支內容,dev
代表分支內容,手動去掉衝突內容或者直接全部不要寫新的內容都可以,反正要去掉<<<<
、====
、>>>>
、HEAD
、dev
這幾個標記
<<<<<<< HEAD
Creating a new branch is quick & simple.
=======
Creating a new branch is quick AND simple.
>>>>>>> dev
之後再add和commit,此時分支衝突就解決了
$ git add readme.txt
$ git commit -m "conflict fixed"
[master 59bc1cb] conflict fixed
不過不太建議使用
Fast forward
快速合併模式,為什麼後面說明
檢視分支情況,簡單版
git log --graph --pretty=oneline --abbrev-commit
檢視分支情況,詳細版
git log --graph
為什麼不建議使用Fast forward
模式?
因為使用Fast forward
快速何必模式,會丟失分支資訊,看不出做出個分支合併的操作,多人開發時,出現問題不好定位,所以merge的時候使用普通模式--no-ff
原來的git merge dev
改成如下命令
git merge --no-ff -m "merge with no-ff" dev
意思是使用普通模式合併(會保留分支資訊),這樣git會merge的時候生成一個新的commit
檢視時使用下面命令,就可以看出分支合併的操作了
git log --graph --pretty=oneline --abbrev-commit