工作中對於項目的管理主要是基於git的,學習git還是很重要的。。。。。。
Git的特點
- Git是分佈式版本控制系統
- git的底層是用C來實現的
Git相關參數的配置 用來指定自己的機器
git config --global user.name “Your Name"
git config --global user.email “Your email"
Git倉庫的建立
mkdir path/filename
cd paht/filename
git init
通過以上操作,就可以將本地的一個目錄聲明爲git倉庫,可以通過ls -a來查看當前目錄下是否有.git隱藏文件,該文件是用來跟蹤和管理版本庫的,不可亂動。
關於基本操作
touch filename
git add filename //將filename添加到當前的倉庫內
git commit -m “tps” //將添加到倉庫內的文件提交到倉庫內,其中tips是用來標記本次提交的提示信息 可以多次add然後一次commit
git status //用來顯示當前倉庫的狀態,例如修改了當前的某個文件但是還未提交,就會提示修改了其中的某個文件
git diff filename //用來顯示當前文件與之前的文件有哪些區別
git log //用來顯示從最近到最遠的提交日誌
git reset —-hard HEAD~num //用來會退到之前的某個版本
git reset —-hard commit_id //用來定位到某個確定的時間點
git reflog //可以用來查看歷史的每一次命令,同時可以查看對應的commit id
- git log可以用來查看從當前時間點開始的所有commit的id,一般只需要前幾位就可以
- 當使用git reset之後,git log的輸出結果也會產生變化,也就是說會導致如果後悔某次的回退操作,就會導致無法使用git log來查找到相關的commit id來進行回退
git庫可以分爲兩個部分,一個爲工作區,一個爲版本庫。其中版本庫分爲暫存區和分支區。
- 使用git add 操作就是將對應的file加入到暫存區
- 使用git commit就是將對應的節點加入到分支區
例如,對於ReadMe.txt文件,先對其進行修改,然後使用git add將其加入到暫存區內,然後再次修改ReadMe.txt文件,這時使用git commit命令將暫存區內的文件提交到分支區,此時只有第一次修改的內容會被提交,第二次修改的內容則不會被提交;如果想要提交第二次修改的內容,則需要重新執行git add,將第二次修改的內容添加到暫存區,同時執行git commit將其提交
git checkout —- filename //將工作區內文件的修改進行撤銷
- 如果對於此文件,還未添加到暫存區,則將分支區內的內容還原給工作區
- 如果對於此文件,已經添加到了暫存區,則將暫存區的內容還原給工作區
git reset HEAD filename //可以將暫存區內的修改撤銷,並回退到工作區
注意以上幾種撤銷之間的區別:
- git reset —hard HEAD/commit_id 此命令使用來將工作區內的內容還原成分之區對應的節點
- git checkout -- filename 此命令是對工作區的修改進行撤銷,需要判斷暫存區內有無添加,是對應單個文件來說的
- git reset HEAD filename 此命令是將暫存區的添加內容進行刪除,是對應單個文件,而且是針對暫存區的內容
- git rm + git commit可以用來刪除分支區內的對應內容
如果使用rm刪除本地的相關內容之後的確要進行刪除,則可以使用以上的命令來確定操作
如果不是要進行刪除,則可以採用git checkout —- filename命令將版本庫內的內容還原到工作區
通過將本地庫與github上的庫相關聯實現分佈式控制,github上的庫與本地的庫之間進行傳輸採用的是ssh加密的方式。即本地庫的私鑰和hub的公鑰鑰進行配對。
ssh-keygen -t rsa -C "[email protected]” //用來生成對應的公鑰和私鑰
上述命令可以在.ssh目錄下生成兩個文件,id_rsa和id_rsa.pub兩個文件,分別表示一對私鑰和公鑰,其中公鑰需要添加到github倉庫中,這樣的話,只有具有對應的私鑰的用戶纔可以對項目中的內容進行修改。
- 在本地的倉庫執行以下命令,可以將本地倉庫與hub上的倉庫進行綁定
git remote add origin [email protected]:<yourid>/<name.git> //origin表示遠程庫的名字,一般默認情況下使用這個名字 <yourid>表示你的github名稱 <name.git>用來表示與本地倉庫相綁定的倉庫
- 在本地倉庫執行以下命令,將本地倉庫的內容推送到遠程庫上
git push -u origin master //origin表示需要推送的遠程庫的名稱 master表示需要推送到的分支 -u表示第一次添加時將本地的master分支推送到遠程庫的master分支,還會將本地的master分支與遠程庫的master分支相關聯
git push origin master //將本地的master推送到遠程庫中與其對應的分支上
- 將遠程庫clone到本地庫
git clone [email protected]:<yourid>/<name.git> //將遠程庫拷貝到本地庫
關於分支
所謂分支,就是一段時間鏈,每個節點保存了對應提交的內容,而HEAD默認是指向了master,master是一個指針,指向了主鏈的最新節點。
- 創建並切換分支
git checkout -b dev //創建dev分支並切換到dev分支,所謂創建就是新建了一個dev指針指向當前的最新節點,所謂切換就是將HEAD轉而指向dev指針
此指令相當於
git branch dev //創建dev分支
git checkout dev //切換到dev分支
使用git branch來顯示當前庫內包含的分支
當前分支前會有*標註
- 合併分支
git merge <branchname> //將<branchname>指向的分支合併到當前分支
- 禁止使用Fast Foward模式
git merge —no-ff -m “tip” <branchname> //通過禁止使用Fast Foward模式,可以在刪除分支後保留分支的信息
- 刪除分支
git branch -d <branchname> //將<branchname>指向的分支刪除
- 查看分支圖
git log --graph //使用此命令可以查看分支變化圖
- 保存當前的工作信息
git stash //此命令可以將當前分支的內容壓棧進行保存,然後就可以切換到其他的分支
對於 git push origin master這種,可能會產生衝突,此時可以先採用git pull將庫的內容拉下來,然後在本地解決衝突之後再進行push操作。
- 合併多人協作的衝突
git Rebase
關於標籤
git tag <tagname> //可以爲最近的commit打上標籤
git tag //可以顯示當前的所有tag
git tag <tagname> commit_id //爲指定的commit打上標籤
git tag -a <tagname> -m “tip” commit_id //爲指定的commit打上標籤和說明性的文字
git show <tagname> //顯示指定tag的說明性文字