1.git配置
git config --global user.name "Your Name"
git config --global user.email "email@example.com"
2.git倉庫
git init
3. 添加文件到緩存區
git add [your file name]
//添加目錄下全部文件
git add .
4. 提交
git commit -m "your message about this commit for"
5. git checkout
1.切換到分之dev
git checkout dev
- 如果master分之和dev分之的最近一次提交commitID一致的話,那么在兩個分之間切換會把改動也給帶過去了,無論你add與否。
- 當兩個分之的最近提交記錄不一樣的時候,如果在一個分之上修改了,但是沒有提交,git不允許切換分之。
2.新建一個分之dev,并且切換到dev
git checkout -b dev
注意切換分之的時候如果,兩個分之
3.強制切換分之
git checkout -f dev
如果master上有沒有提交的修改則會被廢棄
4.檢出一個文件到工作區
- 從當前分之的暫存區檢出一個文件到工作區
git checkout -- git.txt
這里 -- 是為了說明后面加的是一個文件,而不是一個分之,避免產生歧義。如果你有一個dev分之,又有一個dev文件,git checkout -- dev 會讓git知道你是要檢出文件而不是切換分之,所以-- 我們一般可以不寫。
當暫存區中沒有一次此文件的暫存時,那么檢出到工作區的是當前分之記錄里面的文件。
- 從某次提交中檢出一個文件到工作區
git checkout commit_id -- file
這里你檢出的文件,會被加入暫存區中,也就是你檢出一個文件后,工作區和暫存區中的這個文件是一致的了,但是可能會和當前分之中的不一致。一般來說既然你要特地的檢出一次commit的中一個文件到當前,那么它肯定和當前分之中的文件不一致
- 檢出一個commit
git checkout commit_id
這里會把這個分之的檢出到工作區和暫存區,但是這時你不在任何分之上,你可以使用git checkout branch回到一個分之上去,這時你就會回到master上,你的工作區和暫存區也會回到master上。
#這是你檢出一個分之后的提示
Note: checking out '25ea3bef91db5b430bfbd25431bf9f8b9db2a028'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b <new-branch-name>
- 檢查工作區
git checkout
注意這里就是git checkout。這時會去檢查工作區
- 基于某一次提前,新建分之
git checkout -b <new-branch-name> commit_id`
- 基于當前分之創建一個沒有提交歷史的分之
git checkout --orphan <new-branch-name>
這個可以用來掩蓋你之前混亂的提交歷史,因為之前的提交的歷史全都沒有了
- 打補丁
git checkout -p <branch-name>
比較這個分之和當前分之之間的差異
6.git diff
- 比較工作區與暫存區
git diff [<path>...]
后面參數就是你要比較的,可以是一個或多個路徑、文件,也可以不加從而比較全部
- 比較暫存區與最新本地版本庫
git diff --cached [<path>...]
- 比較工作區與版本庫
git diff HEAD [<path>....]
- 比較工作區與指定提交
git diff commit_id [<path>...]
- 比較暫存區與指定提交
git diff --cached [<commit_id>] [<path>...]
- 比較兩個提交之間的差異
git diff [<commit-id>] [<commit-id>]
- 生成一個差異補丁
git diff --cached > <patch-name>
git diff --HEAD > <patch-name>
git diff <file> > <patch-name>
git apply --check <patch-name> 驗證補丁,不輸出任何內容就是對的
git apply <patch-name> 應用補丁
7. git reset
- 工作區,暫存區,HEAD都回到某個節點
git reset --hard <commit_id>
- 工作區不做改動,暫存區和HEAD回到某個節點
git reset --mixed <commit_id>
- 工作區,暫存區都不做改動,HEAD回到某個節點
git reset --soft <commit_id>
- 將暫存區的文件reset到HEAD中的
git reset HEAD -- [<file>...]
8.git merge
- 合并一個分之
git merge dev
注意這樣合并可能會產生沖突,沖突的解決又會形成一個commit。
9.git rebase
git rebase master
這個基于master分之的最后一次提交然后把dev分之的commit重做一遍,這種模式下沖突的解決是不產生一次commit的
git pull --rebase
先拉取遠端代碼然后重做commit
使用git rebase 可以使你的提交記錄只有一條直線
10. git stash
git stash -p
交互式命令,讓你選擇每個文件的操作方式,這樣就可以暫存部分文件了
git stash save "msg"
暫存當前所有修改,暫時沒發現可以只暫存部分文件的命令
git stash list
查看當前所有暫存
git stash apply stash@{index}
還原某個暫存,并不在stash list 中丟棄
git stash pop stash@{index}
應用并丟棄
git stash drop stash@{index}
不應用直接丟棄
git stash clear
不應用直接丟棄所有暫存
11. git apply
git apply --check patch
git apply --stat patch
git am -3 patch
12. git log
git log <file_name> //單個文件的提交記錄
git log -p <file_name> //單個文件每次提交的diff
git log --author="name"
git log -1 --name-only --pretty=format: ' ' aa524b469c86ac056d63aefcd21108570a9ca1dc //一次提交中修改的文件
git log --stat //查看每個提交的修改文件
13. git show
git show <commit_id> <file_name> //某次提交中某個文件的修改
14. git branch
git branch -vv //可以查看當前分支對應的遠程分支