*git
廖雪峯 git 教程bash
git clone git地址app
git pull 拉取文件到本地gitlab
若是須要提交文件,先push測試
廢棄某個加在了緩衝區的文件
git checkout -- aa.txtspa
------------- git添加一個文件 --
git add aa.txt.net
------------- git撤銷本地全部未提交的更改 [有效]-------------------
1. git clean -df
2. git reset --hard
第一個命令只刪除全部untracked的文件,若是文件已經被tracked, 修改過的文件不會被回退。
而第二個命令把tracked的文件revert到前一個版本,對於untracked的文件(好比編譯的臨時文件)都不會被刪除。orm
====================
git push origin masterblog
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)實際上是用版本庫中的版本替換工做區的版本,如論工做區修改或刪除,均可以一鍵還原
---------------
遠程倉庫
git@192.168.0.60:luojq/learngit.git
一,本地先有了一個learngit的項目,而後push到遠程倉庫
1,在gitlab上面創建了一個learngit的項目,而後讓本地與遠程倉庫關聯
git remote add origin git@192.168.0.60:luojq/learngit.git
2,把本地推送給遠程,-u是由於遠程倉庫如今是空的
git push -u origin master
3,之後本地提交,
git push origin master ?? origin/master
二,遠程倉庫先有了一個項目,而後clone到本地
git@192.168.0.60:archive/workprocess.git
git clone git@192.168.0.60:archive/workprocess.git
git@192.168.0.60: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。
這就是多人協做的工做模式,一旦熟悉了,就很是簡單。
=============================================
標籤
git tag v1.0
git log --pretty=oneline --abbrev-commit
git tab v0.9 6577556 ,有時候忘了給以前的打一下標籤,能夠git log 查看標籤,而後 此處末尾的是commit_id
git show <tagname>
=================
===================
工做的模式
1,git checkout xzg-ljq ,切換到本身的分支
2,git merge xzg 把xzg分支最新的東西拿下來,(仍是從遠程拿??)
3,xzg-ljq分支修改後,commit,(若是須要push到遠程xzg-ljq分支,git push origin xzg-ljq)
4,而後切換到xzg,git checkout xzg
5,而後本地 xzg 從本地 xzg-ljq分支merge東西,git merge xzg-ljq
6,開通了xzg push到遠程的權限後,與其餘同事一塊兒合代碼,push到遠程origin xzg ,, 【git push origin xzg】
=========== 一次性添加全部文檔 ==============
git add . :他會監控工做區的狀態樹,使用它會把工做時的全部變化提交到暫存區,包括文件內容修改(modified)以及新文件(new),但不包括被刪除的文件。
git add -u :他僅監控已經被add的文件(即tracked file),他會將被修改的文件提交到暫存區。add -u 不會提交新文件(untracked file)。(git add --update的縮寫)
git add -A :是上面兩個功能的合集(git add --all的縮寫)
===================
git push origin/xzg
git config user.name 查看當前git用戶
==============================
若是想合併特定的提交到某一分支上
例如 xzg-ljq 某一次提交 想合併到 xzg分支上
76cada - 62ecb3 - b886a0 [xzg-ljq],如今xzg-ljq提交了三次
1,只想合併62ecb3 到xzg 上
git cherry-pick 76cada - 62ecb3
2,想合併某一分支的一系列commits,例如76cada - 62ecb3
能夠基於xzg-ljq分支在新建一個分支,做爲中間橋樑
git checkout newbranch 62ecb3 //62ecb3是那個系列的最後一個commit
git rebase --ontomaster 76cada^,(人家舉例是合併到master上,那我這裏難道ontoxzg-ljq??,待測試)
參考文章:
*