Git的學習筆記-常用命令

當使用$git diff filename時,filename中的中文差異部分顯示爲亂碼。
原因如下:git diff接受的編碼格式utf-8;而filename又是以gb2312格式編寫的,所以git diff命令就顯示亂碼。
解決方法:filename文件另存爲utf-8的編碼格式


團隊多人協作下需要首先定義好換行符的標準,是按win的CRLF還是UNIX下的LF或者是mac下的CR!!!
git config --global core.autocrlf false :禁用git換行符的自動轉換功能
git config --global user.name "用戶名" :使用該用戶名登陸git
git config --global user.email "[email protected]" :使用該email登陸git
//git config --global 參數,有了這個參數,表示你這臺機器上所有的Git倉庫都會使用這個配置,global全局的
cat +文件名 :在git裏面顯示文件內容,即文檔內容

git init :將當前所在的文件夾設置爲git的版本庫,會在當前目錄下創建.git文件夾, .git文件是用來跟蹤管理版本的
git rm +文件名                          :刪除某一個文件
git rm -rf +文件名 :將該文件夾/文件,連同文件夾下的東西也一起刪除,當我們不需要某個版本庫的時候可使用:git rm -rf .git(慎用!)
git add +文件名 :添加工作區(workspace-即本地的文件)的文件到暫存區(stage/index -暫存區在.git文件夾裏面)
git commit -m +"註釋說明" :將暫存區的所有文件提交到本地倉庫(Respository)/也叫分支(master branch),每次提交都會記錄,我們將這個記錄稱之爲版本雙引號內的註釋說明會在我們使用git log的時候顯示出來,用來備註我們自己提交了什麼,方便我們自己查看
git status :查看當前工作區和暫存區的文件狀態-是否修改、新增、刪除
git diff +文件名 :是工作區(work dict)和暫存區(stage)的比較:對比顯示出目標文件在工作區和暫存區的不同之處
git diff --cached +文件名 :是暫存區(stage)和分支(master)的比較,記住暫存區是add文件後文件纔會在暫存區
git log :查看提交記錄/版本的日誌,版本號爲一序列無意義的數字+小寫英文
git log --pretty=oneline :同上,查看提交記錄/版本的日誌,但精簡爲一行,看起來更方便
git reflog :查看所有命令的日誌,包括提交版本、回退版本等所有的記錄,包括回退版本之前的版本、已被覆蓋的版本
git reset --hard +版本號 :回退到指定版本-將工作區的所有文件重置爲 該版本號的文件,版本號一般寫前面五位系統即會自動識別
git reset --hard HEAD^ :回退到上一個版本
git reset --hard HEAD^^ :回退到上上個版本
git reset --hard HEAD~x :回退到往上數第x個的版本
git checkout --文件名 :丟棄工作區的修改,這時系統內部的操作是用暫存區的同一文件覆蓋掉工作區的文件,如果暫存區沒有文件,就用分支上的同一文件覆蓋
git ls-files :顯示倉庫中的文件

遠程倉庫(Remote)   (remote-name遠程倉庫名)
//連接遠程倉庫前得先創建SSH Key!!本地git倉庫和遠程倉庫的傳輸的是通過SSH加密的
ssh-keygen -t rsa –C “[email protected] :創建SSH,將公鑰裏面的內容粘貼到github頁面的SSH Key裏面,生成一個Key


git remote add origin [email protected]:用戶名/遠程倉庫名.git :SSH方式,連接遠程倉庫,添加一個地址爲git@...,別名爲origin的遠程倉庫
git remote add origin https://github.com/用戶名/遠程倉庫名.git :https方式,連接遠程倉庫,與上面的SSH方式不同的是,這種每次push需要輸入用戶名和密碼!!不推薦
git push -u origin master :第一次將本地倉庫當前的分支master推送到遠程倉庫origin上!需要加-u
git push origin master :以後每次推送就不用加-u了,直接git push +倉庫別名 + master
git clone https://[email protected]:用戶名/遠程倉庫名.git :克隆遠程倉庫到當前文件夾下,不能少了https://
git remote show [remote-name] :查看遠程倉庫的更多信息
git remote set-url [remote-name] [url] :修改遠程倉庫的地址,常用於地址錯誤或將https地址改爲SSH地址
git remote rename 遠程倉庫名 abc1234 :修改遠程倉庫的名字爲abc1234
git remote rm 遠程倉庫名 :刪除遠程倉庫

關於push:
只有當你有所克隆服務器的寫入權限,並且之前沒有人推送過時,git push origin master這條命令才能生效。 
當你和其他人在同一時間克隆,他們先推送到上游然後你再推送到上游,你的推送就會毫無疑問地被拒絕。 
你必須先將他們的工作 pull 拉取下來並將其合併進你的工作後才能推送。
這點和下面的 <2、新建好的倉庫如果存在新的文件 >是一樣的,詳見下面使用多個遠程倉庫的第二點。。。

使用多個遠程倉庫-將文件推送到另一個遠程倉庫
1、首先在github上先建一個遠程倉庫,建好後可執行以下命令
git remote :查看所有已建立連接的遠程倉庫,只顯示倉庫別名
git remote -v :查看所有已建立連接的遠程倉庫,顯示倉庫別名和倉庫的url地址
git remote add <shortname> <url>   :將該新的遠程倉庫與本地建立連接
2、新建好的倉庫如果存在新的文件 :README.md,但本地目錄卻沒有,如果直接使用(git push -u 遠程倉庫別名 master)提交會報錯:error: failed to push some refs to ...,原因爲github中的README.md文件不在本地代碼目錄中,要進行合併
git pull --rebase 倉庫別名 master :將遠程倉庫的東西與本地工作區進行合併,此處需注意工作區必須爲clean乾淨的!!否則也會報錯工作區如果不是乾淨的,會報錯error: cannot pull with rebase: You have unstaged changes.需要commit乾淨
合併完成後本地工作區就多了README.md文件,接下來就可以push了
git pull = git fetch + git merge
git pull --rebase = git fetch + git rebase
git push -u 倉庫別名  master :將master分支推送到遠程倉庫

rebase這個命令做了以下內容: 
a.把你 commit 到本地倉庫的內容,取出來放到暫存區(stage)(這時你的工作區是乾淨的) 
b.然後從遠端拉取代碼到本地,由於工作區是乾淨的,所以不會有衝突 
c.從暫存區把你之前提交的內容取出來,跟拉下來的代碼合併
所以 rebase 在拉代碼前要確保你本地工作區是乾淨的,如果你本地修改的內容沒完全 commit 或者 stash,就會 rebase 失敗

分支管理(主分支master ,次分支)
git checkout -b dev123         :創建一個叫dev123的分支,git checkout命令加上-b參數表示創建並切換,dev-device設備,相當於兩條命令:git branch dev123 (創建分支)和git checkout dev123(切換分支)
git branch -d +分支名 :刪除該分支
git branch :查看當前所有分支
git branch -a :查看所有分支,包括本地分支和遠程倉庫分支
git merge +分支名 :得先切換回到master主分支後:git checkout master  ,才能合併該分支到master主分支上,merge融合、混合

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章