git-study
commit, tree與blob的對應(yīng)關(guān)系
- 一個commit對應(yīng)一個tree(唯一一個)
- 一個tree可以看作是一次commit之后整個項目的一個快照
- 一個tree可能也會包含多個tree
- 一個blob對應(yīng)一個文件
分離頭指針注意的問題
當(dāng)切換到?jīng)]有綁定分支的commit時,并對其當(dāng)中的文件修改,最終提交commit保存后會出現(xiàn)"warning: you are leaving 1 sommit behind, not connected to any of your branches."
這時的commit被git看作不重要,可能會被git所清理,如果你要保存這個commit就要新建分支(git branch new-branch-name [分支hash])
刪除不需要的分支
git branch -d [branch-name / hash]
修改commit和massage
- 修改最新的commit
git commit --amend
- 修改老舊的commit
git rebase -i [privious-commit-hash]
# 按照提示修改
# 將pick改為reward
- 合并多次的commit
git rebase -i [oldest-commit-hash]
# 按照提示修改
# 將pick改為squash
- 合并不連續(xù)的commit
git rebase -i [oldest-commit-hash]
# 未顯示出來的需要用到的commit要按照先后順序手動添加進(jìn)來
# 把要合并的commit按照先后順序放在一起
# 將pick改為squash
文件操作
文件的差異
- 比較暫存區(qū)與head指向的文件差異
git diff --cached
- 比較工作區(qū)與暫存區(qū)文件差異
git diff
# 所以說git diff命令默認(rèn)比較的是工作區(qū)和暫存區(qū)的區(qū)別,默認(rèn)所有文件
git diff -- file.name
# 指定文件的差異
文件提交與回退
- 暫存區(qū)恢復(fù)成和HEAD一樣
命令:git reset HEAD <file>...
git reset HEAD
# 清空暫存區(qū)所有文件(即取消暫存)
-
工作區(qū)恢復(fù)成和暫存區(qū)一樣
命令:
git checkout -- <file>...
git checkout -- file.name
-
取消暫存區(qū)部分文件的暫存
命令
git reset HEAD <file>...
git resset HEAD -- file1.name file2.name # ...
- 清除最近幾次提交
git reset --hard [target-commit-hash]
- 查看不同提交的指定文件的差異
# 比較兩分支的差異
git diff branch1 branch2
# 比較特定文件
git diff branch1 branch2 -- file.name
# 直接比較兩個commit
git diff commit-hash-1 commit-hash-2 -- file.name
- 刪除文件的正確方法
git rm file.name
- 緊急任務(wù)處理
# 保存當(dāng)前狀態(tài)以便處理緊急事件
git stash
# 處理完之后再恢復(fù)
git stash pop # 或 git stash apply
# pop 和 apply的區(qū)別
# pop恢復(fù)并丟掉stash list內(nèi)容,apply不會
# 查看stash列表
git stash list
指定不需要git管理的文件
.gitignore文件