git 日常操作記錄

git 作為一款流行的協(xié)作工具,可以提高發(fā)開效率,對于我們開發(fā)人員來說,掌握git的使用已經(jīng)成為一項必備的技能。下面是我平時使用git的一些總結(jié)。
首先,線上一張簡單概括的技能圖:


git 技能圖

能掌握上面這張圖的技能,你就已經(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)竟然報錯了,而且還不是平常的錯誤,錯誤如下圖:

clipboard.png

經(jīng)谷歌一查,是因為公司把ssh的端口22給禁掉了,但是ssh的端口是可以改的,于是找了一些方法,果然奏效,方法如下:

1)使用管理員權限打開命令窗口,輸入 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í)行git pull 的時候出現(xiàn)error: unable to create file /web/module/index/login.js (Permission denied)

當pull代碼的時候,由于遠程分支上有新的文件,pull下來之后應該需要在本地硬盤新建一個文件,由于git沒有權限操作硬盤創(chuàng)建文件,才會出現(xià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

  1. 丟棄所有新建的文件
    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該文件。導致操作失敗,
解決方法是找到打開這個文件的應用并將其關閉,實在找不到,那么把其他應用全關了就ok。

使用git diff 查看文件修改了哪些部分

還沒有git 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í)行git 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代碼的時候提示沒有權限

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代碼,于是又去找命令生成了一遍,忘得太快,還是記錄一下好:

  1. 隨便一個目錄打開git bash
  2. 運行命令 cd ~/.ssh
  3. ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
  4. 連續(xù)三個回車,然后到c盤下的.ssh文件下就可以看到秘藥跟公鑰的文件了
  5. 打開id_rsa文件,復制全部的內(nèi)容,然后打開github
2016-06-19_224853.png

這樣就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í)行git 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

參考

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容