git 作為一款流行的協(xié)作工具烤咧,可以提高發(fā)開效率铸题,對于我們開發(fā)人員來說,掌握git的使用已經(jīng)成為一項必備的技能翰萨。下面是我平時使用git的一些總結(jié)微服。
首先,線上一張簡單概括的技能圖:
能掌握上面這張圖的技能缨历,你就已經(jīng)成為git大神級人物了。我只是把日常用到的操作記錄下來糙麦,給大家分享一下辛孵。
1. 使用git查看某個文件的歷史修改記錄。
使用 git log --follow -p filename 就可以看到這個文件所有的歷史修改記錄赡磅。這樣在我們pull代碼下來之后想查看某個文件魄缚,或者修改了某個文件但是想找到以前版本的代碼非常有用。
2. 使用git工具執(zhí)行 git pull 命令是出現(xiàn) ssh: connect to host github.com port 22: Bad file number
平常有在公司寫demo的習慣焚廊,有些寫不完的demo冶匹,周末回家還可以寫寫。于是在github上面建了個倉庫咆瘟,在家里與公司的電腦都pull了一份嚼隘,在公司寫不完的demo,回家也可以繼續(xù)寫袒餐。
但是今天在公司想要把平時寫的demo push到github上面飞蛹,回家再看看來著谤狡,發(fā)現(xiàn)竟然報錯了,而且還不是平常的錯誤卧檐,錯誤如下圖:
經(jīng)谷歌一查墓懂,是因為公司把ssh的端口22給禁掉了,但是ssh的端口是可以改的霉囚,于是找了一些方法捕仔,果然奏效,方法如下:
1)使用管理員權(quán)限打開命令窗口盈罐,輸入 cd ~/.ssh 就進入到了 c:\Users\zhangsan.ssh文件夾下榜跌。在該文件夾下新建config文件,輸入
host github.com
hostname ssh.github.com
port 443
然后保存退出暖呕。
2)在git里面執(zhí)行 ssh -T git@github.com
3)執(zhí)行命令之后斜做,出現(xiàn) Are you sure you want to continue connecting(yes/no)? 輸入yes按回車,出現(xiàn)成功提示即可湾揽。
2. 使用git工具執(zhí)行g(shù)it pull 的時候出現(xiàn)error: unable to create file /web/module/index/login.js (Permission denied)
當pull代碼的時候瓤逼,由于遠程分支上有新的文件,pull下來之后應該需要在本地硬盤新建一個文件库物,由于git沒有權(quán)限操作硬盤創(chuàng)建文件霸旗,才會出現(xiàn)這個錯誤
所以可以使用管理員權(quán)限打開git,然后再pull一遍就可以了戚揭。
3. git的后悔藥操作
1)本地修改的代碼搞亂了诱告,不想要了,想恢復到?jīng)]改動之前
git checkout -- filePath
2)本地修改的代碼使用git add . 添加到暫存區(qū)民晒,又不想要了
git reset --soft
git checkout -- filePath
3)本地修改代碼之后精居,并且commit了,也不想要了潜必,就是本地修改的代碼給commit的代碼都沒了
git reset --hard
4)當git pull 的時候靴姿,我靠一大堆沖突,老子不知道怎么解決磁滚,等別人merge好了再說
git reset --hard
5)老子正在改代碼佛吓,有個同事過來臨時叫我改點東西,那就先把剛改的緩存起來吧
git stash
改完那個問題之后垂攘,繼續(xù)找出剛才的代碼
git stash pop
- 丟棄所有新建的文件
git clean -df #返回到某個節(jié)點
4. 重新安裝git之后维雇、創(chuàng)建rsa 密鑰出現(xiàn) hzliaobolin%USEROROFILE%.ssh/ 不存在,rsa文件不能保存
USEROROFILE 原本是不存在的晒他,是使用git config --global user.name 之后才會出現(xiàn)的吱型,而且這個文件夾應該保存在C:\user\hzliaobolin\下,其實這個文件夾必須在git安裝完成之后立即配置git config --global 才會生成
而安裝完git之后陨仅,打開git唁影、默認進入的路徑是C:\user\hzliaobolin\耕陷,在此文件夾下配置用戶信息就可。需要正確按照不走安裝git
1) 安裝git完成据沈、打開git哟沫。顯示的路勁應該是C:\user\hzliaobolin、然后配置個人信息
git config --global user.name "lbl"
git config --global user.email "hzliaobolin@corp.netease.com"
配置完成之后锌介、會在C:\user\hzliaobolin下生成一個%USEROROFILE%文件夾嗜诀。
2) 生成git 的ssh key
進入到C:\user\hzliaobolin\目錄下、看看是否有.ssh文件夾存在.
如果存在:
清空.ssh文件夾孔祸、在C:\user\hzliaobolin文件夾下打開git
然后 cd .ssh
ssh-keygen -t rsa -C "hzliaobolin@corp.netease.com" 按三個回車隆敢,密碼為空
3)在github上添加ssh密鑰,把id_rsa.pub復制粘貼即可
5. 使用git pull 代碼或者是git checkout 切換分支時出現(xiàn) Unlink of file 'templates/media/container.html' failed. Should I try again? (y/n)
出現(xiàn)這個問題的主要原因是由于有其他應用也運行著本地工程里的一些文件崔慧,導致更新文件或者切換分支的時候其他應用匯阻止git moving該文件拂蝎。導致操作失敗,
解決方法是找到打開這個文件的應用并將其關(guān)閉惶室,實在找不到温自,那么把其他應用全關(guān)了就ok。
使用git diff 查看文件修改了哪些部分
還沒有g(shù)it add . 時:
git diff 查看全部文件的修改
git diff filename 查看具體某一個文件的修改
git add . 之后:
git diff --cached 查看全部文件的修改
git diff --cached filename 查看具體某一個文件的修改
6. 使用git stash 緩存修改 或把修改遷移到其他的分支
當我們當dev分支開發(fā)時皇钞,突然需要到master分支去改個bug悼泌,懶得提交了,那么我們可以使用git stash 把修改的內(nèi)容緩存起來夹界。然后切到master改完bug之后再切回dev分支馆里,再執(zhí)行g(shù)it stash pop,我們的修改又回來到工作區(qū)了
當我們在master分支修改代碼時可柿,發(fā)現(xiàn)我操鸠踪,分支錯了,但是那么多的代碼不舍得刪啊复斥。那么我們可以使用git stash 先把代碼緩存营密,然后切到dev分支,再使用git stash pop 把代碼還原回來了永票。
git stash list 查看所有的緩存列表
git stash pop [--index] 還原最新/指定的緩存,同時把緩存記錄從緩存列表里面刪掉
git stash apply [--index] 還原最新/指定的緩存滥沫, 不刪掉緩存記錄
git stash drop [--index] 刪除最新的緩存/指定的緩存
git stash clear 刪除所有分支的緩存
7. 使用git重命名本地/遠程分支
先切換到需要重命名的分支侣集,然后執(zhí)行以下的命令
git branch -m old_branch new_branch # 重命名本地分支,此時老的分支已不存在
git push origin :old_branch # 刪掉遠程的老的分支
git push --set-upstream origin new_branch # 推送新的本地分支到遠程兰绣,并設置本地分支跟蹤新的遠程分支
8. 使用git bash生成密鑰/公鑰世分,并拷貝私鑰要github中
今天重裝了下git,push代碼的時候提示沒有權(quán)限
lbl@lbl-PC MINGW64 /g/workspace/wuyanxia (master)
$ git pull
The authenticity of host 'github.com (xxx.xx.252.123)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,xxx.xx.252.123' (RSA) to the list of known hosts.
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
發(fā)現(xiàn)是忘記生成秘鑰了缀辩,導致跟以前保存在github中的ssh key不對應臭埋,所以不能push代碼踪央,于是又去找命令生成了一遍,忘得太快瓢阴,還是記錄一下好:
- 隨便一個目錄打開git bash
- 運行命令 cd ~/.ssh
- ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
- 連續(xù)三個回車畅蹂,然后到c盤下的.ssh文件下就可以看到秘藥跟公鑰的文件了
- 打開id_rsa文件,復制全部的內(nèi)容荣恐,然后打開github
這樣就ok了液斜。
9、在windows 7下面git bash 反應異常緩慢
重新裝了git最新版本之后叠穆,發(fā)現(xiàn)在git bash中輸入命令之后少漆,一兩秒鐘才有反應,異常的卡硼被,google了下示损,找到了解決方法,只要出入一下三條命令就可以了
$ git config --global core.preloadindex true
$ git config --global core.fscache true
$ git config --global gc.auto 256
10、git add 出現(xiàn)/./.git/index.lock': File exists..操作異常
當執(zhí)行g(shù)it add 或者git checkout時都提示. /.git/index.lock': File exists.錯誤嚷硫,導致git使用不了
只需要去.git目錄下把index.lock文件刪掉就好了
$ git add .
fatal: Unable to create 'E:/javaWorkspace/study-platform/.git/index.lock': File exists.
Another git process seems to be running in this repository, e.g.
an editor opened by 'git commit'. Please make sure all processes
are terminated then try again. If it still fails, a git process
may have crashed in this repository earlier:
remove the file manually to continue.
git 刪除刪除分支命令
刪除遠程分支: git push origin --delete branch-name
刪除本地分支: git branch -d branch-name
git 同步遠程于本地的分支
使用git branch 查看本地分支與用git branch -r查看本地存的遠程分支检访,發(fā)現(xiàn)有些分支在代碼倉庫中已經(jīng)被刪掉,需要同步论巍。
git remote prune origin // 刪除掉沒有與遠程分支對應的本地分支
11烛谊、設置git pull 的默認行為為rebase
git pull操作會先把代碼拉下來,然后進行merge,會把一些commit合并掉嘉汰,然后只有一條merge紀錄丹禀,不方便review,所以最好改成rebase方式鞋怀,保留commit
In git >= 1.7.9:
git config --global pull.rebase true
In git < 1.7.9:
git config --global branch.autosetuprebase always