交互式添加提供友好的界面去操作Git索引(index),同時亦提供了可視化索引的能力。只需簡單鍵入'git add -i',即可使用此功能。Git會列出所有修改過的文件及它們的狀態。
~~~
$>git add -i
staged unstaged path
1: unchanged +4/-0 assets/stylesheets/style.css
2: unchanged +23/-11 layout/book_index_template.html
3: unchanged +7/-7 layout/chapter_template.html
4: unchanged +3/-3 script/pdf.rb
5: unchanged +121/-0 text/14_Interactive_Rebasing/0_ Interactive_Rebasing.markdown
*** Commands ***
1: status 2: update 3: revert 4: add untracked
5: patch 6: diff 7: quit 8: help
What now>
~~~
在這個例子中,我們可以看到有5個修改過的文件還沒有被加入到索引中(unstaged),甚至可以看到每個文件增加和減少的行數。緊接著是一個交互式的菜單,列出了我們可以在此模式中使用的命令。
如果我們想要暫存(stage)這些文件,我們可以鍵入'2'或者'u'進入更新(update)模式。然后我們可以通過鍵入文件的范圍(本例中是1-4)來決定把哪些文件加入到索引之中。
~~~
What now> 2
staged unstaged path
1: unchanged +4/-0 assets/stylesheets/style.css
2: unchanged +23/-11 layout/book_index_template.html
3: unchanged +7/-7 layout/chapter_template.html
4: unchanged +3/-3 script/pdf.rb
5: unchanged +121/-0 text/14_Interactive_Rebasing/0_ Interactive_Rebasing.markdown
Update>> 1-4
staged unstaged path
* 1: unchanged +4/-0 assets/stylesheets/style.css
* 2: unchanged +23/-11 layout/book_index_template.html
* 3: unchanged +7/-7 layout/chapter_template.html
* 4: unchanged +3/-3 script/pdf.rb
5: unchanged +121/-0 text/14_Interactive_Rebasing/0_ Interactive_Rebasing.markdown
Update>>
~~~
如果鍵入回車,我會回到主菜單中,同時可以看到那些指定文件的狀態已經發生了改變:
~~~
What now> status
staged unstaged path
1: +4/-0 nothing assets/stylesheets/style.css
2: +23/-11 nothing layout/book_index_template.html
3: +7/-7 nothing layout/chapter_template.html
4: +3/-3 nothing script/pdf.rb
5: unchanged +121/-0 text/14_Interactive_Rebasing/0_ Interactive_Rebasing.markdown
~~~
現在我們可以看到前4個文件已經被暫存,但是最后一個沒有。基本上,這是一個更加緊湊的查看狀態的方式,實質上的信息與我們在命令行中運行'git status'是一致的:
~~~
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: assets/stylesheets/style.css
# modified: layout/book_index_template.html
# modified: layout/chapter_template.html
# modified: script/pdf.rb
#
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
#
# modified: text/14_Interactive_Rebasing/0_ Interactive_Rebasing.markdown
#
~~~
我們可以進行數個有用的操作,包括取消文件的暫存(3: revert),加入未跟蹤的文件(4: add untracked)和查看差異(6: diff)。這些功能都很易懂。還有一個很“酷”的功能,就是暫存補丁(staging patches)(5: patch)。
如果你鍵入'5'或者'p',git會一個一個補丁(一塊一塊)地顯示出差異,然后詢問是否對每一塊進行暫存操作。通過這個方法,你可以暫存文件修改中的一部分。如果你編輯了一個文件,只想提交其中一部分而不包括其他未完成編輯的部分,或者把文檔、空白字符從大量的修改中分開提交,你可以使用'git add -i'去相對輕松地完成任務。
這里我暫存了book_index_template.html的部分修改,而不是全部修改:
~~~
staged unstaged path
1: +4/-0 nothing assets/stylesheets/style.css
2: +20/-7 +3/-4 layout/book_index_template.html
3: +7/-7 nothing layout/chapter_template.html
4: +3/-3 nothing script/pdf.rb
5: unchanged +121/-0 text/14_Interactive_Rebasing/0_ Interactive_Rebasing.markdown
6: unchanged +85/-0 text/15_Interactive_Adding/0_ Interactive_Adding.markdown
~~~
當你通過'git add -i'完成對索引的改動后,你只需要退出(7: quit),然后'git commit'去提交暫存的修改。切記**不要**運行'git commit -a',它會忽視你剛才辛辛苦苦做的修改而把所有東西都提交到倉庫中去。
- 1. 介紹
- 歡迎使用Git
- GIT對象模型
- Git目錄 與 工作目錄
- Git索引
- 2. 第一步
- 安裝Git
- 安裝與初始化
- 3. 基本用法
- 獲得一個Git倉庫
- 正常的工作流程
- 分支與合并@基礎
- 查看歷史 -Git日志
- 比較提交 - Git Diff
- 分布式的工作流程
- Git標簽
- 4. 中級技能
- 忽略某些文件
- rebase
- 交互式rebase
- 交互式添加
- 儲藏
- Git樹名
- 追蹤分支
- 使用Git Grep進行搜索
- Git的撤消操作 - 重置, 簽出 和 撤消
- 維護Git
- 建立一個公共倉庫
- 建立一個私有倉庫
- 5. 高級技能
- 創建新的空分支
- 修改你的歷史
- 高級分支與合并
- 查找問題的利器 - Git Bisect
- 查找問題的利器 - Git Blame
- Git和Email
- 定制Git
- Git Hooks
- 找回丟失的對象
- 子模塊
- 6. Git生態體系
- Git 與之 Windows
- 使用Git進行系統部署
- 與 Subversion 集成
- 從其他代碼管理工具遷移到Git
- 圖形化的Git
- Git倉庫托管
- Git的其它用法
- Git的腳本支持
- Git 與編輯器
- 7. 原理解析
- Git是如何存儲對象的
- 查看Git對象
- Git引用
- Git索引
- 打包文件
- 更底層的Git
- 傳輸協議
- 術語表