<a >GIT筆記:</a>
1. 工作區(qū)(Working Directory)和版本庫(Repository)
Paste_Image.png
說明:
工作區(qū)就是創(chuàng)建倉庫的文件夾如(learngit文件夾就是一個工作區(qū))
版本庫就是工作區(qū)的隱藏目錄.git,版本庫中有暫存區(qū)(stage/index)和分支(master)
git add 實際是把文件添加到暫存區(qū)俄精, git commit 把暫存區(qū)的內(nèi)容提交到當前分支
2.創(chuàng)建版本庫
1創(chuàng)建git倉庫文件夾啼止,名為:learngit
$ mkdir learngit
2進入leadngit文件夾
$ cd learngit
3初始化git倉庫
$ git init
3. 添加文件
1在leangit下添加一個readme.txt文件赘方,并編輯一些內(nèi)容
2添加到倉庫暫存區(qū)()在暫存區(qū) 文件會變綠
$ git add readme.txt
3提交readme.txt文件到當前分支, -m "提交說明"(只有進行 git add 后 go commit 命令才有效)
$ git commit -m "add readme.txt"
4. 修改文件
4.1 當文件在工作區(qū)時
1查看readme.txt文件內(nèi)容
$ cat readme.txt
2修改readme.txt文件內(nèi)容
vi readme.txt
3查看倉庫狀態(tài)
$ git status
4添加到倉庫暫存區(qū)烹卒,并提交到分支
$ git add readme.txt
$ git commit -m "modify readme.txt"
4.2 當文件在暫存區(qū)時
1修改文件內(nèi)容
vi ***
2添加到倉庫暫存區(qū)
$ git add readme.txt
3提交到分支
$ git commit -m "modify readme.txt at the stage"
5. 撤銷修改文件(未提交到分支)
5.1 當文件在工作區(qū)時
1執(zhí)行撤銷命令
$ git checkout -- readme.txt
5.2 當文件在暫存區(qū)時
1令文件回到工作區(qū)
$ git reset HEAD readme.txt
2執(zhí)行撤銷命令
$ git checkout -- readme.txt
6. 版本控制(無限次后悔)
說明:在Git中珊拼,HEAD表示當前版本盾计,HEAD^表示上一版本 HEAD^^表示上上一個版本
1查看提交日志輸出(完整版)
$ git log
2查看提交日志輸出(精簡版)
$ git log --pretty=noline
3回到上一版本
$ git reset --hard HEAD^
4回到指定版本(hard 后面添加版本號)
$ git reset --hard ea34578
5查看命令歷史
$ git reflog
7. 遠程倉庫(github)
7.1 添加到遠程庫
1在github上創(chuàng)建一個名為learngit的空倉庫
2在本地learngit倉庫下運行命令
$ git remote add origin git@github.com:iphone5solo/learngit.git
3把本地內(nèi)容推送到github遠程庫上(第一次push 參數(shù)帶 -u關(guān)聯(lián)遠程倉庫)
$ git push -u origin master
注意:如果在git push -u origin master
時出現(xiàn)以下錯誤搞糕,證明電腦沒有修改遠程倉庫的公鑰钙皮,
Permission denied (publickey).fatal: Could not read from remote repository.
Please make sure you have the correct access rightsand the repository exists.
解決方法:
1在github上點擊Edit profile--> SSH and GPG keys --> new SSH key添加SHH公鑰
2打開id_rsa.pub文件(/Users/iphone5solo/.ssh/id.rsa.pub)
3將id_rsa.pub文件內(nèi)容拷貝到key就可以了蜂科,title隨便填。
7.2 從遠程庫克隆
1在github上創(chuàng)建一個名為clonegit的倉庫
2使用命令克隆倉庫
$ git clone git@github.com:iphone5solo/clonegit```
####7.3 從遠程倉庫更新本地倉庫(已關(guān)聯(lián))
$ git pull origin master
#8. 分支管理
####圖文說明:
master分支是一條線短条,git用master指向最新的提交导匣,在用HEAD指向master,以此才確定當前分支茸时,和提交點贡定。

######1. 創(chuàng)建分支
當我們創(chuàng)建新的分支,例如newBranch,git就會新建一個指針newBranch,指向master相同的提交可都,再把HEAD指向newBranch,就表示當前分支在newBrach上

######2. 新分支的修改和提交
現(xiàn)在對工作區(qū)的修改和提交就是針對newBranch分支了缓待,比如新提交一次后,newBranch指針就向前移動一步渠牲,指向最新提交旋炒,而master指針指向不變。

######3. 分支的合并
把newBranch合并到master上签杈,直接把master指向newBranch的當前提交瘫镇,就完成了合并。

######4. 合并完成刪除分支
刪除分支newBranch答姥,就剩下一個master分支

######5. 查看分支合并圖解

<strong>關(guān)于分支的主要命令如下</strong></p>
<ul>
<li><p>查看分支</p>
<pre><code>$ git branch
</code></pre></li>
<li><p>創(chuàng)建<code>newBranch</code>分支</p>
<pre><code>$ git branch newBranch
</code></pre></li>
<li><p>切換<code>HEAD</code>指向<code>newBranch</code>分支</p>
<pre><code>$ git checkout newBranch
</code></pre></li>
<li><p>創(chuàng)建+切換分支</p>
<pre><code>$ git checkout -b newBranck
</code></pre></li>
<li><p>合并某分支到當前分支</p>
<pre><code>$ git merge newBranch
</code></pre></li>
<li><p>普通刪除<code>newBranch</code>分支</p>
<pre><code>$ git branch -d newBranch
</code></pre></li>
<li><p>強行刪除<code>newBranch</code>分支</p>
<pre><code>$ git branch -D newBranch
</code></pre></li>
<li><p>查看分支合并狀況</p>
<pre><code>$ git log --graph --pretty=oneline --abbrev-commit
</code></pre></li>
</ul>
<h3>9. 藏匿當前未提交的分支</h3>
<p>如: 當前在修改自己的分支<code>dev</code>,突然項目經(jīng)理要求修復一個bug-07</p>
<p>解決方法: </p>
<ol>
<li><p>藏匿當前<code>dev</code>分支的工作狀態(tài)</p>
<pre><code>$ git stash
</code></pre></li>
<li><p>新建一個<code>bug-07</code>分支</p>
<pre><code>$ git branch -b bug-07
</code></pre></li>
<li><p>修復bug并提交铣除,合并<code>bug-07</code>到<code>master</code>分支</p>
<pre><code>$ git commit -m "fix the bug-07"
$ git checkout master
$ git merge --no-ff -m "merge bug-07" bug-07
</code></pre></li>
<li><p>刪除<code>bug-07</code>分支</p>
<pre><code>$ git branch -d bug-07
</code></pre></li>
<li><p>查看當前<code>stash</code></p>
<pre><code>$ git stash list
</code></pre></li>
<li><p>恢復<code>dev</code>分支的工作狀態(tài),并刪除stash內(nèi)容</p>
<pre><code>$ git stash pop
</code></pre></li>
</ol>
<h3>10. 多人協(xié)作</h3>
<ul><li><p>查看遠程庫信息</p>
<pre><code>$ git remote</code></pre><ul>
<li><p>詳細查看遠程信息</p>
<p>```$ git remote -v```</p></li>
<li><p>推送分支到遠程庫</p>
<p>```$ git remote origin master```</p></li>
<li><p>抓取遠程分支</p>
<p>```$ git pull origin master```</p></li>
</ul></li>
</ul>
<h3>11. 標簽管理</h3>
<ul>
<li><p>創(chuàng)建一個標簽踢涌,默認為<code>HEAD</code>當前分支添加標簽</p>
<pre><code>$ git tag v1.0
</code></pre></li>
<li><p>為版本號為<code>e8b8ef6</code>添加<code>v2.0</code>標簽</p>
<pre><code>$ git tag v2.0 e8b8ef6
</code></pre></li>
<li><p>為版本號為<code>6cb5a9e</code>添加帶有說明的標簽通孽,<code>-a</code>指定標簽名,<code>-m</code>指定說明文字</p>
<pre><code>$ git tag -a v3.0 -m "version 0.2 released" 6cb5a9e
</code></pre></li>
<li><p>根據(jù)標簽查看指定分支</p>
<pre><code>$ git show v0.2
</code></pre></li>
<li><p>查看所有標簽</p>
<pre><code>$ git tag
</code></pre></li>
<li><p>刪除<code>v1.0</code>標簽</p>
<pre><code>$ git tag -d v1.0
</code></pre></li>
<li><p>把<code>v0.9</code>標簽推送到遠程</p>
<pre><code>$ git push origin v0.9
</code></pre></li>
<li><p>推送所有尚未推送到遠程的本地標簽</p>
<pre><code>$ git push origin --tags
</code></pre></li>
<li><p>刪除遠程標簽, 先刪除本地標簽,再刪除遠程標簽</p>
<pre><code>
$ git tag -d v0.9</br>
$ git push origin :refs/tags/v0.9
</code></pre></li>
</ul>