一、git常用命令
1.常用命令
git clone 地址 // 克隆遠(yuǎn)程倉(cāng)庫(kù)
git clone -b 分支名 地址 // 克隆分支的代碼到本地
git status // 查看狀態(tài)
git add 文件名 // 將某個(gè)文件存入暫存區(qū)
git add b c //把b和c存入暫存區(qū)
git add . // 將所有文件提交到暫存區(qū)
git reset HEAD test.txt //撤回暫存區(qū)文件到工作區(qū)
git reset . //撤回所有暫存區(qū)文件到工作區(qū)
git add -p 文件名 // 一個(gè)文件分多次提交
git stash -u -k // 提交部分文件內(nèi)容 到倉(cāng)庫(kù) 例如本地有3個(gè)文件 a b c 只想提交a b到遠(yuǎn)程倉(cāng)庫(kù) git add a b 然后 git stash -u -k
//再然后git commit -m "備注信息" 然后再push push之后 git stash pop 把之前放入堆棧的c拿出來(lái) 繼續(xù)下一波操作
git commit -m "提交的備注信息" // 提交到倉(cāng)庫(kù)
//若已經(jīng)有若干文件放入倉(cāng)庫(kù),再次提交可以不用git add和git commit -m "備注信息" 這2步, 直接用
git commit -am "備注信息" // 將內(nèi)容放至倉(cāng)庫(kù) 也可用git commit -a -m "備注信息"
git branch -d 分支名 // 刪除分支
git log --oneline //查看提交信息 英文狀態(tài)按 q 取消
//常用提交步驟,多人合作開發(fā),push之前先commit防止沖突
git add . ==> git commit -m '提交信息' ==> git push
2.分支
git branch 分支名 // 新建分支
git branch // 查看當(dāng)前所有分支
git checkout 分支名 // 檢出分支
git checkout -b 分支名 // 創(chuàng)建并切換分支
git checkout commitId 文件名(文件路徑下的文件名)// 還原這個(gè)文件到對(duì)應(yīng)的commitId的版本
//(例如src/page/attendance/attendanceSum.vue我想把它還原到2個(gè)版本之前 首先git log //src/page/attendance/attendanceSum.vue找到對(duì)應(yīng)想要還原的版本
//復(fù)制版本提交的commitID 然后執(zhí)行g(shù)it checkout commitID src/page/attendance/attendanceSum.vue
//這樣就把a(bǔ)ttendanceSum.vue這個(gè)單個(gè)文件 還原到了對(duì)應(yīng)版本)
git branch -v // 查看分支以及提交hash值和commit信息
git merge 分支名 // 把該分支的內(nèi)容合并到現(xiàn)有分支上
git branch -d 分支名 // 刪除分支
git branch -D 分支名 // 強(qiáng)制刪除 若沒有其他分支合并就刪除 d會(huì)提示 D不會(huì)
git branch -m 舊分支名 新分支名 // 修改分支名
git branch -M 舊分支名 新分支名 // 修改分支名 M強(qiáng)制修改 若與其他分支有沖突也會(huì)創(chuàng)建(慎用)
git branch -r // 列出遠(yuǎn)程分支(遠(yuǎn)程所有分支名)
git branch -a // 查看遠(yuǎn)程分支(列出遠(yuǎn)程分支以及本地分支名)
git fetch // 更新remote索引
git push -u origin 分支名 // 將本地分支推送到origin主機(jī),同時(shí)指定origin為默認(rèn)主機(jī),后面就可以不加任何參數(shù)使用git push 也可解決 git建立遠(yuǎn)程分支關(guān)聯(lián)時(shí)出現(xiàn)fatal ... upstram的問(wèn)題
3.遠(yuǎn)程操作
git remote -v //顯示所有遠(yuǎn)程倉(cāng)庫(kù)
git remote show <remote> //顯示某個(gè)遠(yuǎn)程倉(cāng)庫(kù)信息
git remote add <remoteName> <url> //添加一個(gè)新的遠(yuǎn)程倉(cāng)庫(kù),并命名
git fetch <remote> //下載遠(yuǎn)程倉(cāng)庫(kù)的所有變動(dòng)
git pull <remote> <branch> //下載遠(yuǎn)程倉(cāng)庫(kù)的變化,并與本地分支合并
git push <remote> <branch> //上傳本地指定分支到遠(yuǎn)程倉(cāng)庫(kù)
git push <remote> --force //強(qiáng)行推送當(dāng)前分支到遠(yuǎn)程倉(cāng)庫(kù),即使有沖突
git push <remote> --all //推送所有分支到遠(yuǎn)程倉(cāng)庫(kù)
git push --tags //上傳所有標(biāo)簽
4.撤回操作
git reset HEAD test.txt //撤回暫存區(qū)文件到工作區(qū)
git reset . //撤回所有暫存區(qū)文件到工作區(qū)
git checkout [file] //恢復(fù)暫存區(qū)的指定文件到工作區(qū)
git chectout [commit] [file] //恢復(fù)某個(gè)commit的指定文件到暫存區(qū)和工作區(qū)
git rm --cached [file] //將指定文件從暫存區(qū)刪除,工作區(qū)依然存在,避免提交了
git reset [file] //重置暫存區(qū)的指定文件,與上一次commit保持一致,但工作區(qū)不變
git reset --hard //重置工作區(qū)與暫存區(qū),與上一次commit保持一致
git reset [commit] //重置當(dāng)前分支的指針為指定commit,同時(shí)重置暫存區(qū),工作區(qū)不變
git reset --hard [commit] //重置當(dāng)前分支的hard為指定commit,同時(shí)重置暫存區(qū)與工作區(qū),與指定commit一致
//如:git reset --hard a1d566d git reflog查出要回退到merge之前的版本號(hào)
5.對(duì)比工作區(qū),暫存區(qū),倉(cāng)庫(kù)的差異
git diff // 查看變更 工作區(qū)與暫存區(qū)的差異比對(duì)
git diff --cached // 暫存區(qū)與提交版本的差異
git diff HEAD // 工作區(qū)與倉(cāng)庫(kù)中最后一次提交版本的差別
git diff 版本哈希值 版本哈希值 // 查看這2個(gè)版本哈希之間的區(qū)別
或者 git diff HEAD~數(shù)字 HEAD~數(shù)字
git tag tt HEAD~4 //給倒數(shù)第5次提交打一個(gè)tag tag名字是tt
git diff tt // 就是倒數(shù)第5個(gè)版本與第一個(gè)版本之間的差異
git diff --cached tt //暫存區(qū)與倒數(shù)第5個(gè)版本之間的比對(duì)
6.查看提交信息
git log --oneline //查看提交信息 英文狀態(tài)按 q 取消
git log //自己提交時(shí)間記錄
git reflog //查出要回退到merge之前的版本號(hào)
git show HEAD // 查看最后一次提交修改的詳細(xì)信息 也可以用git show 哈希值 查看對(duì)應(yīng)的內(nèi)容
git show HEAD^ // 查看倒數(shù)第二次的提交修改詳細(xì)信息
git show HEAD^^ 或者git show HEAD~2 //查看前2次變更
git show HEAD 或 git show 哈希值 或者git show tag(標(biāo)簽名) //都可以查看最近一次提交的詳細(xì)信息
7.git忽視文件
在倉(cāng)庫(kù)根目錄創(chuàng)建一個(gè) .gitignore文件
(1)node_modules //忽視指定文件
(2)css/index.js //忽視指定文件夾中的指定文件
(3)css/*.js //忽視css文件夾下的所有js文件
(4)css //忽視整個(gè)文件夾
8.創(chuàng)建文件命令
touch a // 創(chuàng)建一個(gè)a文件,自定義文件類型 a.html
echo 1234 >> a // 把1234這個(gè)內(nèi)容放入a文件
cat a // 打開a文件 讀取出a文件中的內(nèi)容
mkdir test // 創(chuàng)建test文件夾
rm 文件名 // 刪除文件
pwd // 打印當(dāng)前工作路徑
9.文件信息
ls // 查看當(dāng)前路徑下面的所有文件名
ls 文件夾名 // 查看對(duì)應(yīng)文件夾中的內(nèi)容
ls -l // 拉出最近git提交記錄以及對(duì)應(yīng)修改的文件名
ls -l -a // 拉出最近git提交記錄以及對(duì)應(yīng)修改的文件名,隱藏的文件也會(huì)顯示
10.cd快速切換路徑
cd ~ // 將工作路徑快速切換到root
cd - // 將工作路徑切換到上一狀態(tài)
cd ../ // 切回到上一個(gè)工作路徑
cd 文件夾名 // 進(jìn)入某個(gè)目錄
cd / // 進(jìn)入根目錄
Tips常用名詞:
常用名詞
Workspace:工作區(qū)
Index / Stage:暫存區(qū)
Repository:倉(cāng)庫(kù)區(qū)(或本地倉(cāng)庫(kù))
Remote:遠(yuǎn)程倉(cāng)庫(kù)
功能(feature)分支
預(yù)發(fā)布(release)分支
修補(bǔ)bug(fixbug)分支
二、常見問(wèn)題
問(wèn)題1:[暫存區(qū)無(wú)內(nèi)容]
E:\QC\review_vue\shop_admin>git commit -m '測(cè)試提交'
nothing to commit, working tree clean
解決:
錯(cuò)誤的原因就是:暫存區(qū)沒東西或者東西都提交到版本庫(kù)當(dāng)前分支
工作區(qū):也就是本地文件的區(qū)域
版本庫(kù)中暫存區(qū):就是使用git add命令之后,本地工作區(qū)的文件加到暫存區(qū)
版本庫(kù)當(dāng)前分支:也就是使用 git commit 之后,暫存區(qū)的東西到版本庫(kù)當(dāng)前分支。
問(wèn)題2:[換行問(wèn)題]
E:\QC\review_vue\shop_admin>git add .
warning: LF will be replaced by CRLF in README.md.
The file will have its original line endings in your working directory
解決2:
你是 Windows 程序員,且正在開發(fā)僅運(yùn)行在 Windows 上的項(xiàng)目,可以設(shè)置 false 取消此功能,把回車保留在版本庫(kù)中:
//提交檢出均不轉(zhuǎn)換
$ git config --global core.autocrlf false
問(wèn)題3:[遠(yuǎn)程無(wú)倉(cāng)庫(kù)]
E:\QC\review_vue\shop_admin>git push
fatal: No configured push destination.
Either specify the URL from the command-line or configure a remote repository using
git remote add <name> <url>
and then push using the remote name
git push <name>
解決3:
因?yàn)闆]有遠(yuǎn)程倉(cāng)庫(kù),所以沒法提交,需在碼云中創(chuàng)建遠(yuǎn)程倉(cāng)庫(kù)
1.創(chuàng)建完后,執(zhí)行添加命令git remote add <name> <url>
<name>:自定義變量名origin
<url>:創(chuàng)建倉(cāng)庫(kù)后的SSH地址
git remote add origin git@gitee.com:XXXXX/shoping_admin.git
2.再次提交到遠(yuǎn)程倉(cāng)庫(kù)
git push -u origin master
tips:不用每次提價(jià)都需要加上-u,只要第一次提交需要加上-u,表示提交的內(nèi)容和當(dāng)前的遠(yuǎn)程倉(cāng)庫(kù)綁定,以后提交只需要命令git push就可以了
問(wèn)題4 [缺少known_hosts文件]
E:\QC\review_vue\shop_admin>git push -u origin master
The authenticity of host 'gitee.com (212.xx.xx.xxx)' can't be established.
ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
解決4:
在新生成密鑰之后,在.ssh文件夾(之前的文章有提到過(guò))中少了一個(gè)
known_hosts文件,本來(lái)密鑰文件應(yīng)該是三個(gè),現(xiàn)在是兩個(gè),便報(bào)了這樣的錯(cuò)誤,此時(shí)選擇yes回車之后,便可,同時(shí)生成了缺少了的known_hosts文件:
問(wèn)題5 [push、clone無(wú)權(quán)限,無(wú)存儲(chǔ)ssh密鑰]
clone或者push出現(xiàn)沒有訪問(wèn)權(quán)限情況
git@gitee.com: Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
解決5
出現(xiàn)改問(wèn)題的原因是git服務(wù)器沒有存儲(chǔ)本地ssh密鑰。
1.步驟一、打開終端按如下命令輸入自己碼云賬號(hào)來(lái)生成 sshkey:
ssh-keygen -t rsa -C "xxxxx@xxxxx.com"
輸入提示完成后三次回車,看到類似下面圖形表示已經(jīng)生成 ssh key。
| . . |
|o o * . . ...|
|E oo o . o.. |
| B . o S . ... |
| .B=+%. |
+----[SHA256]-----+
2.步驟二:輸入如下命令可查看已經(jīng)生成的ssh key(若提示cat不是內(nèi)部命令,可關(guān)掉終端,再次輸入查看)
cat ~/.ssh/id_rsa.pub
具體步驟可以參考:碼云生成/添加SSH公鑰步驟
若上面方法是依然查看不了已生成的ssh key,可以直接找到文件目錄就是:C:\Users\Administrator/.ssh/id_rsa,用記事本打開id_rsa.pub復(fù)制里面的內(nèi)容到碼云添加公鑰處即可。
可能有的目錄不在這,可以在命令行直接輸入ssh-keygen.exe回車鍵后也可看到文件位置。
id_rsa:私鑰,放在自己本地電腦就好
id_rsa.pub:公鑰,復(fù)制里面內(nèi)容給到碼云或者GitHub的SSH公鑰處
問(wèn)題6 [提交遠(yuǎn)程無(wú)分支]
E:\QC\review_vue\shop_admin>git push
fatal: The current branch chuang has no upstream branch.
To push the current branch and set the remote as upstream, use
git push --set-upstream origin chuang
解決6
出現(xiàn)上述問(wèn)題,說(shuō)明在本地新建了一個(gè)分支,遠(yuǎn)程并沒有感知到本地新建的這個(gè)分支,提示運(yùn)行
git push --set-upstream origin chuang與遠(yuǎn)程倉(cāng)庫(kù)建立關(guān)聯(lián),運(yùn)行后即可通過(guò)git push推送成功。
問(wèn)題7 [提交合并需解釋]
Please enter a commit message to explain why this merge is necessary
Please enter a commit message to explain why this merge is necessary.**
請(qǐng)輸入提交消息來(lái)解釋為什么這種合并是必要的

解決7
git 在pull或者合并分支的時(shí)候有時(shí)會(huì)遇到這個(gè)界面??梢圆还?直接下面3,4步),如果要輸入解釋的話就需要:
1.按鍵盤字母 i 進(jìn)入insert模式
2.修改最上面那行黃色合并信息,可以不修改
3.按鍵盤左上角"Esc"
4.輸入":wq",注意是冒號(hào)+wq,按回車鍵即可
問(wèn)題8: remote origin already exists錯(cuò)誤解決辦法
E:\QC\H5\full_screen_plugin>git remote add origin git@gitee.com:three_cases_demo/full_screen_page.git
fatal: remote origin already exists.
解決8 (報(bào)錯(cuò)遠(yuǎn)程起源已經(jīng)存在 )
1.先刪除遠(yuǎn)程 Git 倉(cāng)庫(kù)
$ git remote rm origin
2.再重新添加遠(yuǎn)程 Git 倉(cāng)庫(kù)即可
$ git remote add origin git@github.com:xxxxxxxxxxxxxxxxxx
【后續(xù)會(huì)繼續(xù)補(bǔ)充】