創建本地倉庫
使用git bash進入需要創建倉庫的目錄下:
cd xxxx
git init? 創建本地倉庫
此時目錄中會多了一個 .git目錄,如果沒有可能是隱藏的,可以ls -ah查看
添加文件到倉庫
創建一個readme.txt:mkdir xxx(創建目錄)? vi xxx(創建文件)
vi readme.txt 然后進行編輯,編輯后先按一下ESC退出編輯,然后輸入:wq退出并保存編輯的內容,:q僅僅是退出不會保存
git add xxx(如 readme.txt)一次可添加多個文件,多個文件間用空格隔開,實際的作用是將文件添加到暫存區
這里如果是window 可能會出現警告,但并不影響后面的使用。waring:LF will be replaced by CRLF in gitTest/readme.txt.the file will have its original line endings in your working directory
windows中的換行符為 CRLF(如編輯時文件中使用回車鍵來換行), 而在Linux下的換行符為LF,所以在執行add . 時出現提示,解決辦法:
$ rm -rf .git? // 刪除.git?????????????????????????????????????????????????????????????????????? $ git config --global core.autocrlf false? //禁用自動轉換
$ git init? // 重新建立
$ git add . // 重新添加
git commit -m "xxx"將文件提交到倉庫,并附上說明信息,實際的作用是將暫存區的文件提交到當前分支
git status命令可以查看當前倉庫的狀態(一般都是只文件的狀態,如修改了文件后沒有提交,或新增了很多文件沒有提交)
git diff 查看文件修改的狀況(所有文件)?? git diff xxx(查看指定文件)
git log查看提交記錄,可以通過記錄的commit id來做版本回退
git reset --hard xxx(一般id的前6~8位就可以了)
git reflog當git log查不到對應的版本時,可以使用這個來查看,這個是查看所有提交的記錄,git log 有時在git reset后就看不到reset之前的那個版本了
git checkout -- file命令中的 -- 很重要,沒有--,就變成了“切換到另一個分支”的命令,我們在后面的分支管理中會再次遇到git checkout命令。這個命令是讓這個文件回到最近一次git commit或git add時的狀態
git reset HEAD file可以把暫存區的修改撤銷掉(unstage),重新放回工作區。就是你修改了文件并且已通過git add添加到了暫存區,但還沒有commit就可以用 git reset HEAD readme.txt來恢復readme.txt這個文件添加到暫存區之前的狀態,并將暫存區清空。
上傳至遠程倉庫
關聯遠程倉庫 $ git remote add origin git@github.com:yourName/projectName.git
將本地倉庫推送到遠程庫上 :git push -u origin master實際上是把當前分支master推送到遠程。由于遠程庫是空的,我們第一次推送master分支時,加上了-u參數,Git不但會把本地的master分支內容推送的遠程新的master分支,還會把本地的master分支和遠程的master分支關聯起來,在以后的推送或者拉取時就可以簡化命令。推送成功后,可以立刻在GitHub頁面中看到遠程庫的內容已經和本地一模一樣。以后就可以直接git push origin master推送的遠程庫
git 分支的應用
git branch dev 創建名為dev的分支
git checkout dev 切換到名為dev的分支上
git checkout -b dev 創建并切換到名為dev的分支,相當與上面兩句
git branch 查看所有分支,當前分支前面會標一個 * 號
git merge dev 將dev提交的合并到當前分支
git branch -d dev 刪除名為dev的分支(切記如果在此分支上做過修改和增加一定要在合并后才刪)
多人協作
當你從遠程倉庫克隆時,實際上Git自動把本地的master分支和遠程的master分支對應起來了,并且,遠程倉庫的默認名稱是origin。
要查看遠程庫的信息,用git remote:
$git remoteorigin
或者,用git remote -v顯示更詳細的信息:
$git remote -vorigin? git@github.com:michaelliao/learngit.git (fetch)origin? git@github.com:michaelliao/learngit.git (push)
上面顯示了可以抓取和推送的origin的地址。如果沒有推送權限,就看不到push的地址。
推送分支
推送分支,就是把該分支上的所有本地提交推送到遠程庫。推送時,要指定本地分支,這樣,Git就會把該分支推送到遠程庫對應的遠程分支上:
$git push origin master
如果要推送其他分支,比如dev,就改成:
$git push origin dev
現在,你的小伙伴要在dev分支上開發,就必須創建遠程origin的dev分支到本地,于是他用這個命令創建本地dev分支:
$git checkout -b dev origin/dev
現在,他就可以在dev上繼續修改,然后,時不時地把dev分支push到遠程你的小伙伴已經向origin/dev分支推送了他的提交,而碰巧你也對同樣的文件作了修改,并試圖推送,如果推送失敗,因為你的小伙伴的最新提交和你試圖推送的提交有沖突,解決辦法也很簡單,Git已經提示我們,先用git pull把最新的提交從origin/dev抓下來,然后,在本地合并,解決沖突,再推送。git pull也失敗了(提示:“no tracking information”),原因是沒有指定本地dev分支與遠程origin/dev分支的鏈接,根據提示,設置dev和origin/dev的鏈接:git branch --set-upstream branch-name origin/branch-name
小結
- 查看遠程庫信息,使用git remote -v;
- 本地新建的分支如果不推送到遠程,對其他人就是不可見的;
- 從本地推送分支,使用git push origin branch-name,如果推送失敗,先用git pull抓取遠程的新提交;
- 在本地創建和遠程分支對應的分支,使用git checkout -b branch-name origin/branch-name,本地和遠程分支的名稱最好一致;
- 建立本地分支和遠程分支的關聯,使用git branch --set-upstream branch-name origin/branch-name;
- 從遠程抓取分支,使用git pull,如果有沖突,要先處理沖突。