Git 筆記
*
廖雪峰 git 教程
git clone git地址
git pull 拉取文件到本地
如果需要提交文件,先push
廢棄某個加在了緩沖區的文件
git checkout -- aa.txt
------------- git添加一個文件 --
git add aa.txt
------------- git撤銷本地所有未提交的更改 [有效]-------------------
1. git clean -df
2. git reset --hard
第一個命令只刪除所有untracked的文件,如果文件已經被tracked, 修改過的文件不會被回退。
而第二個命令把tracked的文件revert到前一個版本,對於untracked的文件(比如編譯的臨時文件)都不會被刪除。
====================
git push origin master
gitk 可以打開可視窗口
================== 20170511 ============
1,新增加一個文件,修改從工作區添加到stage區
git add file1 [file2] [file3] 可以添加多個文件
2,git commit -m "你的備註"
git init 初始化倉庫
git checkout -- filename, 舍棄這個文件的修改
git diff filename,查看文件修改的地方
修改文件後,提交時,依然兩步走,add,commit
如果直接commit提交,會說 not staged for commit,意思是文件還沒有準備好提交
git log --pretty=oneline 可以看提交記錄
============== 版本回退 =========
當前版本是HEAD,前一個版本是HEAD^,再前一個版本是HEAD^^,往上100個版本是 HEAD~100
git reset --hard HEAD^,返回到上一個版本,開始一直出錯,後來鍵盤改為大寫 寫HEAD^,就可以了
如果【git bash】窗口還沒有關閉,上面用git log是看到了一長串id,例如 9c4102.....,
如果恢復到上面幾個版本後,後悔了,可以重新找回來,例如 git reset --hard 9c4102,就這幾位數字就可以,能唯一標識就行
a001,b002,c003,版本,從c一直還原到a,然後又想恢復到c版本,則可以用上面的 git reset --hard c003XX
如果【git bash】關閉了,例如第二天開機來找,後悔了,又忘記了commit id,怎麽辦,git reflog
可以記錄你每次的命令記錄
==========
HEAD指向當前版本,git reset --hard commit_id 允許你在各個版本中來回穿梭
想回到過去,git log 看一下你想去過去哪個版本
想回到未來,git reflog 看一些你想去當前時光軸往後(即未來)的 哪個版本
==========
git diff HEAD filename 工作區和當前版本比較
============== 工作區,stage區,master
git checkout -- filename,修改還沒有add到暫存區了,舍棄修改,(從工作區舍棄修改)
git reset HEAD filename,修改已經add到暫存區了,舍棄修改(從stage區舍棄stage狀態,但還在工作區),
然後還輔以git checkout -- filename,讓工作區的也舍棄修改,世界和諧了
==============
場景1:當你改亂了工作區某個文件的內容,想直接丟棄工作區的修改時,用命令git checkout -- filename。
場景2:當你不但改亂了工作區某個文件的內容,還添加到了暫存區時,想丟棄修改,分兩步,第一步用命令git reset HEAD file,就回到了場景1,第二步按場景1操作。
場景3:已經提交了不合適的修改到版本庫時,想要撤銷本次提交,參考版本回退一節,不過前提是沒有推送到遠程庫。
==============
提交的文件刪除後,git檢測到了
如果確實要刪除,兩個步驟:1,git rm 文件名,2,git commit -m "備註:刪除了某個文件"
如果這個文件是誤刪,則 git checkout -- test.txt,(git checkout)其實是用版本庫中的版本替換工作區的版本,如論工作區修改或刪除,都可以一鍵還原
---------------
遠程倉庫
[email protected]:luojq/learngit.git
一,本地先有了一個learngit的項目,然後push到遠程倉庫
1,在gitlab上面建立了一個learngit的項目,然後讓本地與遠程倉庫關聯
git remote add origin [email protected]:luojq/learngit.git
2,把本地推送給遠程,-u是因為遠程倉庫現在是空的
git push -u origin master
3,以後本地提交,
git push origin master ?? origin/master
二,遠程倉庫先有了一個項目,然後clone到本地
[email protected]:archive/workprocess.git
git clone [email protected]:archive/workprocess.git
[email protected]:luojq/catAPI.git
========== 分支
新建一個分支dev,並切換到該分支上,【-b 表示創建並切換】
git checkout -b dev
相當於1,git branch dev, 2,git checkout dev
在分支上修改,然後切換到master上,合並分支的修改,步驟:
1,git checkout dev 切換到分支dev上,然後去修改東西,例如readme.txt
2,git checkout master ,切換回到主幹
3,git merge dev,在主幹上合並dev分支的修改【合並某分支到當前分支】
4,git branch -d dev ,dev完成了它的使命,刪除該分支,這 過河拆橋啊
顯示的好看一些
git log --graph --pretty=oneline --abbrev-commit
使用【強制禁用fast forward模式合並分支:--no-ff】
git merge --no-ff -m "merge with no-ff" devbranch
git stash 暫存
git stash list 查看
1,git stash apply [stash@{0}] 重新恢復[指定的stash,如果有多個]
2,git stash drop 刪除暫存stash
1和2 可以合並為 git stash pop,恢復並刪除
說明stash 是一個棧
git branch -D <分支名>,如果一個分支上的修改已經add,commit了,然後刪除,會提示沒有merge,此命令強制刪除分支
============= 從遠程倉庫clone下來的項目 ==========
1,git remove -v 查看遠程 抓取和推送的 具體信息
2,
git push origin master
git push origin <目的分支例如dev>
在本電腦的另一個目錄clone下遠程倉庫,
然後
想把遠程的dev 創建到本地來,
git checkout -b dev origin/dev 出現問題,原因是我clone前 之前的一個版本沒有將dev分支 push 到遠程倉庫
所以先 1, git pull
2, git checkout -b dev origin/dev 就可以了
3,我在dev分支上,git push origin dev,將本地dev分支的更新push到遠程dev分支上去了
共三步,add,commit,push
其他人在自己的dev分支修改後,提交到了遠程的dev分支
你想把遠程的dev更新 同步到 本地的dev分支上
1,git branch --set-upstream dev origin/dev (指定本地dev 與 遠程dev 的鏈接)
2,git pull(僅這步是不行的)
===============================
因此,多人協作的工作模式通常是這樣:
首先,可以試圖用git push origin branch-name推送自己的修改;
如果推送失敗,則因為遠程分支比你的本地更新,需要先用git pull試圖合並;
如果合並有沖突,則解決沖突,並在本地提交;
沒有沖突或者解決掉沖突後,再用git push origin branch-name推送就能成功!
如果git pull提示“no tracking information”,則說明本地分支和遠程分支的鏈接關系沒有創建,用命令git branch --set-upstream branch-name origin/branch-name。
這就是多人協作的工作模式,一旦熟悉了,就非常簡單。
=============================================