回退相關(guān)操作
工作區(qū)
命令 | 含義 |
---|---|
git checkout -- file.txt
|
丟棄 file.txt 中的修改 |
git reset --hard | 重設暫存區(qū)所有文件并且還原工作區(qū)所有修改 |
暫存區(qū)
命令 | 含義 |
---|---|
git reset | 重設暫存區(qū)所有文件 |
git reset HEAD | 撤銷最新一次的 add 狀態(tài) |
git reset file.txt
|
把 file.txt 的放入工作區(qū) |
git reset --hard | 重設暫存區(qū)所有文件并且還原工作區(qū)所有修改 |
版本區(qū)
- HEAD => 當前版本
- HEAD^ => 上一個版本
- HEAD^^ => 上上一個版本
- HEAD~100 => 上一100個版本
命令 | 含義 |
---|---|
git revert HEAD | 撤銷最新一次的 commit ,分支沒有改動文件才能執(zhí)行(存在該commit記錄) |
git reset <commit>
|
刪除最新一次的 commit 并且重設暫存區(qū)所有文件 (不存在該commit版本號) |
git reset HEAD~2 | 將當前分支倒退兩個提交(高危操作) |
git reset --hard HEAD^ | 回退上一個版本 |
刪除文件
命令 | 含義 |
---|---|
rm file.txt
|
刪除文件 |
git checkout -- file.txt
|
撤銷刪除 (未commit之前) |
git clean -n | 查看那些未被跟蹤文件會被移除 |
git clean -f | 移除當前目錄下未被跟蹤的文件 |
git clean -df | 移除未跟蹤的文件以及目錄 |
git clean -f <path>
|
移除未跟蹤的文件,但限制在某個路徑下 |
git clean -xf | 移除當前目錄下未跟蹤的文件,以及 Git 一般忽略的文件 |
創(chuàng)建與合并分支
命令 | 含義 |
---|---|
git checkout -b dev
|
創(chuàng)建并且切換到dev分支 |
git checkout -b hotfix dev |
基于dev分支創(chuàng)建一個hotfix分支 |
git checkout dev
|
切換到dev分支 |
git branch | 查看所有的分支 |
git branch -d dev
|
刪除dev分支(當前分支無法自行刪除) |
git branch -D dev
|
強制刪除分支(用于未合并分支) |
git merge dev
|
將dev分支合并到當前分支 |
遠程倉庫的操作
命令 | 含義 |
---|---|
git remote -v | 查看遠程倉庫的詳細信息 |
git remote add remote-name URL
|
添加遠程倉庫 |
git push origin master
|
將內(nèi)容提交到遠程倉庫 origin 的 master 分支上 |
git remote rm origin
|
將遠程倉庫 origin 刪除 |
git remote rename origin pb
|
將遠程倉庫 origin 改為 pb |
git clone URL
|
克隆一個遠程倉庫扭倾,這里的URL是遠程倉庫的地址 |
git pull origin | 將遠程倉庫中更新的數(shù)據(jù)拉到本地 |
git pull origin dev | 拉取遠程倉庫dev分支到本地 |
git push origin aaa | 將 aaa 分支推送到遠程倉庫 |
git pull --rebase URL
|
git rebase 代替 git merge 合并本地分支 |
git push --force | 強制推送 |
git commit
命令 | 含義 |
---|---|
git commit --amend | 和上一次 commit 合并,并在該基礎上編輯commit信息 |
git commit --amend --no-edit | 和上一次 commit 合并, 不編輯信息 |
git commit -a -m "some modified" | git add -A && git commit -m 'some modified' |
git rebase
<base>
是可以使任何類型的提交引用(ID/分支名/標簽/HEAD)
- 什么是 git rebase(變基==改變基線)
- 變基是將分支移到一個新的基提交的過程, 產(chǎn)生的是一個快速向前的合并以及完美的線性歷史
- rebase 就好像是說「我想將我的更改建立在其他人的進展之上」
- 絕不要在公共的分支上使用它
- git rebase
<base>
=> git merge<base>
相似 - git rebase --continue => 解決沖突后可執(zhí)行的命令
- git rebase --abort => 終止rebase的行動,并且所在分支會回到rebase開始前的狀態(tài)钝腺。
- git rebase -i
<base>
=> 交互式- fixup
- startq
- squash
git reflog
Git 用引用日志這種機制來記錄分支頂端的更新
- git reflog => 顯示本地倉庫的引用日志
- git reflog --relative-date => 用相對的日期顯示引用日志
- git reset --hard
0254ea7
配合使用
注: 引用日志提供的安全網(wǎng)只對提交到本地倉庫的更改有效龄捡,而且只有移動操作會被記錄
其他操作
- git log --oneline => 簡潔的顯示 log 記錄
報錯處理
-
fatal: Unable to create 'project_path/.git/index.lock': File exists.
- 刪除該分支 =>
rm -f .git/index.lock
- 刪除該分支 =>
- error: failed to push some refs to
<URL>
- 第一種解決方式:
- 強推啦辐,即利用強覆蓋方式用你本地的代碼替代git倉庫內(nèi)的內(nèi)容 =>
git push -f
- 強推啦辐,即利用強覆蓋方式用你本地的代碼替代git倉庫內(nèi)的內(nèi)容 =>
- 第二種解決方式:
- 這條命令等于合并遠程分支谓传,合并完成之后同目錄會出現(xiàn)README.md目錄 => git pull --rebase origin master
- 第一種解決方式:
- fatal: remote origin already exists
- 先刪除遠程 Git 倉庫 => git remote rm origin
- 再添加遠程 Git 倉庫 => git remote add origin
<URL>
- 如果執(zhí)行 git remote rm origin 還報錯的話
- 我們可以手動修改 gitconfig 文件的內(nèi)容 => vi .git/config
- 把 [remote “origin”] 那一行刪掉就好了。
- error: src refspec master does not match any
- 引起該錯誤的原因是芹关,目錄中沒有文件续挟,空目錄是不能提交上去的
- touch README => git add README => git commit -m 'first commit' => git push origin maste
- 用
git reset --hard
命令導致目錄下所有文件全部被清除。- 首先用
git reflog
命令查找到對應的sha值,如:cd7b575 - 通過“git reset --hard cd7b575”
- 注意:第二步操作有時會報錯, 如: fatal: Unable to create 'D:/chenjunjun/.git/index.lock': File exists.
- 需要手動刪除.git目錄下的index.lock文件
- 首先用