git入門
<h2>建個庫</h2>
登錄 -- > New repositories --> 輸入項目名及描述 -- > public 創建readme.md
所以命令都須切換到項目目錄下執行;下載項目
git clone [url]
設置貢獻者
git config --global user.name "elmok1"
git config --global user.email "elmok1@qq.com"
git config --list //顯示更多信息
master:項目 主分支 的默認名:master
[工作区] //工作文件在这里
[暂存区] //过渡,临时存放
[版本区]
git status //查看工作状态
git add [filename或.] //工作区-->暂存区
git commit -m "这里是注釋" //暂存区-->版本库
//或
git commit -a -m "这里是注釋"
git log //操作日記
红色表示[工作区]--[master +2 ~0 -0 !]:表示[工作区]添加2个新文件,0个修改,0个删除
绿色表示[工作区]--[master +1 ~0 -0 !]:表示[暂存区]添加1个新文件,0个修改,0个删除
<h2>對比</h2>
查看差異---[工作区] && [暂存区]之間
git diff
查看差異---[暫存區] && [版本区]之間
git diff --cached
//或
git diff --staged
查看差異---[工作区] && [版本区]之間
git diff master
<h2>撤销</h2>
從[暫存區]-->撤銷到 [工作區]
//當
git add .
//則撤銷回[工作區]
git reset HEAD [filename]
從[版本區]-->撤銷到 [工作區],即還原文件內容
git checkout -- [filename]
撤銷一次提交
//當要提2文件,只提了一個
git add fname1.js
git commit -m "fname1.js and fname2"
//把遺漏的add
git add fname2.js
//再合並提交即可
git commit -m "fname1.js and fname2" --amend //把上一次的提交撤銷並到撤銷的與這次提交合併到一起提交
<h2>刪除</h2>
当在[工作区]删除一个文件时,可以使用此命令删除[暂存区]的文件;
git rm [filename]
當文件已放入[暫存區],刪除需兩個區同時刪
git rm -f [filename]
[工作区]文件可以存在,要刪除[暫存區]文件
git rm --cached test.txt
<h2>恢復</h2>
针对文件恢复:[commitID]可通過git log查找
git checkout [commitId] [filename]
針對版本恢復
get reset --hard [commitID]
//或
get reset --hard HEAD^ //回到以前的版本;向下
get reset --hard HEAD~2 //回到跳两个以前的版本;向下
reflog:打印最近操作行為,可找之前版本的commitID
git reflog
//再即可
get reset --hard [commitID]
<h2>同步到远程仓库</h2>
確保github賬號同步
git remote //遠程倉庫的名字 origin默認名
git remote -v //查看對應地址
git push origin master // 同步名字,同步分支
多人協作時添加權限
+ New collaborators 輸入賬號elmok2
切換另一賬號elmok2
登錄後,https://github.com/watching,即可
git clone https://github.com/elmok/drag
之後流程一致
git status
git add .
git commit -m "elmok2 change"
git push origin master
切換用戶elmok,更新本地
git fetch //只是獲取,但不合並 【建議】
或
git pull //獲取後自動合並
<h2>多人協作解決衝突</h2>
產生問題,未先更新直接修改易發生衝突,出現衝突時代碼無法提交
所以需要先獲取最新代碼,再與本地對比
git fetch //只是拉取,但不合並
git diff master origin/master //對比 git diff 本地 遠程,即可打印區別
git merge origin/master //合並後需要手動解決衝突
//解決衝突後再手動提交即可
git commit -a -m "update"
git push origin master
<h2>當無權限時</h2>
1、fork
github.com fork後,即生成https://github.com/elmok2/drag
git clone https://github.com/elmok2/drag
修改後提交本地[版本庫]
git commit -a -m "fixed bug"
git push origin master
2、在github上pull request
elmok2: new pull request -- > create pull request --> "留言" --> 確認即可
elmok1: pull request --> merge pull request --> 確認合併
回覆留言時,選中留言,按r即可引用
<h2>Git分支</h2>
git branch //查看分支
git branch new1 //創建分支,當創建分支後,所有狀態都為創建時的狀態,如果在不同的分支上修改不會影響這裏;
git checkout new1 //切換分支
//或一步創建及切換分支
git checkout -b new2
切換到new1,並修改代碼
1.js
var a = 0;
git checkout new1
//之後提交
git commit -a -m "new1 change"
//new1與master合並
git checkout master //注意,運行這裏後,工作區的代碼也會還原,即不會有var a = 0; 這句
//再運行合並
git merge new1 //即master分支下也有var a = 0;
切換到new2
git checkout new2 //加var b = 0;
git commit -a -m "new2 change" //提交
//切換master
git checkout master
git branch --merged //查看我們當前master下面所合並的分支;如new1合併了即會列出
git branch --no-merged //未與master合並的分支
git branch -d new1 //new1已經合併,可以刪除
//假設
git branch -d new2 //失敗因為未合併,所以不能刪除
//所以
git branch -D new2 //大寫D,強制刪除未合併分支
場景:修改代碼,不同分支上修改相同部分,master 及 new1兩分支上分別提交
git checkout master
git commit -a -m "master change" //master 上有版本c6
git checkout new1
git commit -a -m "new1 change" //new1上有版本c7
需要做一個c8版本,先把c6與master合並變為c8
git checkout master //切換主分支
git merge new1 //merge new1 時出現衝突
git status //查看衝突文件
//回到工作區文件解決沖突,之後再提交
git commit -a -m "c8"
//後續可以查看分支合併情況
git branch --merged
//已合併且不需要維護的可刪除
git branch -d new1
當開多個分支時,合並時使用git merge,如果有衝突,通過git status列出,再手動去工作區解決衝突,之後再提交即可
<h2>github上的分支</h2>
git branch n1
git checkout n1
git add .
git commit -m "n1 change"
git push origin n1
也可以直接在github上创建分支
branch 输入 n2(在哪个分支上则先切换到哪个分支)
contributors:協作人員
release:標籤,即不同版本;
git tag v1.0
git tag //查看
git push origin v1.0
之後在github是release即可下載v1.0版本;也可以release是直接 Draft a new release,創建一個版本
watch:關注;當有更新時即會提示
<h2>github上创建組織</h2>
+ New organization -- >選擇組織參與人,發起請求,完成;
<h2>github創建博客</h2>
+ New repository -- > Owner Repository name [這裏必須與前面的名字一致]如:Owner為:elmok; 則name:elmok.github.io
勾選:intialize this repository with a README
Add:wordpress (下面那些也可不用設置了,直接本地clone後wordpress上傳即可)
Settings -- > 拉到最下面 AutoMatic Page Generator,自動生成網頁,可能有不同
填寫title及tag等
選擇主題--->發布
elmok.github.io即可
注:如發現404,請稍等,或檢查郵箱是否通過驗證
<h2>git資源</h2>
<a href="http://git.oschina.net/progit/
" target='_blank'>http://git.oschina.net/progit/
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000