序言
在git使用過程中發現指令實在太多,就算記憶后不長用的話很快也會忘記掉,所以編寫本文的初衷是為了記錄在使用git指令的過程中所遇到的需求與解決方法,畢竟使用git的需求也就那么一些,范圍不大,所以可以將需求與解決方法記錄下來,下次使用時遇到相同需求如果忘記了也可以得到快速解決
需求1
描述:
Windows系統,在git中生產SSH key
擴展:
由於本地Git倉庫和GitHub倉庫之間的傳輸是通過SSH加密的,所以必須要讓github倉庫認證你SSH key,在此之前,必須要生成SSH key。
步驟:
第1步:創建SSH Key。在windows下查看[c盤->用戶->自己的用戶名->.ssh]下是否有id_rsa、id_rsa.pub文件,如果沒有需要手動生成。
打開git bash,在控制台中輸入以下命令。
ssh-keygen -t rsa -C "guimashusheng@126.com"
密鑰類型可以用 -t 選項指定。如果沒有指定則默認生成用於SSH-2的RSA密鑰。這里使用的是rsa。同時在密鑰中有一個注釋字段,用-C來指定所指定的注釋,可以方便用戶標識這個密鑰,指出密鑰的用途或其他有用的信息。所以在這里輸入自己的郵箱或者其他都行。輸入完畢后程序同時要求輸入一個密語字符串(passphrase),空表示沒有密語。接着會讓輸入2次口令(password),空表示沒有口令。3次回車即可完成當前步驟,此時[c盤>用戶>自己的用戶名>.ssh]目錄下已經生成好了。
第2步:登錄github。打開setting->SSH keys,點擊右上角 New SSH key,把生成好的公鑰id_rsa.pub放進 key輸入框中,再為當前的key起一個title來區分每個key。
需求2
描述
將遠程倉庫上的文件同步到本地
步驟
git clone git@txxx.git
需求3
描述
將本地文件push到遠程倉庫上
步驟
進入到需要提交的文件所在目錄,輸入如下指令:
# add后跟空格加一點會將該目錄下的所有文件添加至上傳列表,若需上傳指定文件只需將點改為指定文件的名稱帶后綴 git add . git commit -m "提交描述" # 如果文件所在的本地倉庫和遠程倉庫從未連接過需要輸入下面語句將本地與遠程聯系上 git remote add origin git@xxx.git # 將文件提交到主枝上 git push -u origin master
需求4
描述
為版本打tag
步驟
進入到項目根目錄,輸入如下指令
# 查看歷史tag git tag # 查看git的相關tag操作 git tag -h # 添加版本tag 其中v1.0.0為tag名稱 git tag -a v1.0.0 -m "版本tag描述" # 將本地tag推送到遠程上 其中的v1.0.0就是上面的tag名稱 git push origin v1.0.0
需求5
描述
在網頁上面新建項目后,完成初始化操作
步驟
進入到需要提交的文件所在目錄,輸入如下指令:
# 下載文件到本地 git clone git@xxx.git # 進入文件目錄 cd fileStorage # 新建README文件 touch README.md # 添加README文件到提交列表 git add README.md # 提交說明 git commit -m "add README" # 提交文件到主枝 git push -u origin master
需求6
描述
本地已有相關文件夾,在網頁上面新建項目后,將本地文件推送到服務器
步驟
進入到需要提交的文件所在目錄,輸入如下指令:
# 進入已有的本地文件目錄 cd existing_folder # 初始化git到本目錄 git init # 本地與遠程取得聯系 git remote add origin git@xxx.git # 添加文件的推送列表 git add . # 提交說明 git commit -m "Initial commit" # 推送到主枝 git push -u origin master
需求7
描述
預覽打包項目(gh-pages)
步驟
進入到需要提交的文件所在目錄,輸入如下指令:
# 進入項目目錄 Emoji-ChatRoom,注意這里的項目名稱得和遠程相同,不同的話反正我是沒有上傳成功過 cd Emoji-ChatRoom # 初始化git到本目錄 git init # 取消dist文件過濾,.gitignore文件中刪除dist(重要步驟) # 本地與遠程取得聯系 git remote add origin https://github.com/zhazhanitian/Emoji-ChatRoom.git # 添加文件的推送列表 git add -A # 提交說明 git commit -m "init file" # 推送到主枝 git push -u origin master # 把 dist 目錄推送到 gh-pages 分支 git subtree push --prefix dist origin gh-pages # 然后通過 https://zhazhanitian.github.io/Emoji-ChatRoom 就可以訪問了
需求8
描述
查看本地分支、查看遠程分支、新建本地分支、推送本地分支到遠程、切換分支、刪除本地分支、刪除遠程分支
步驟
進入到項目根目錄,輸入如下指令
# 查看本地分支 git branch # 查看所有分支,包括遠程,remotes為遠程分支 git branch -a # 新建本地分支 git branch newbranch # 新建本地分支並切換 git checkout -b newbranch # 推送本地分支到遠程 git push origin newbranch # 切換分支 git checkout master # 刪除本地分支 (要切換出要刪除的分支才可以刪除) git branch -d newbranch # 刪除遠程分支 方式1 git push origin --delete newbranch # 刪除遠程分支 方式2 git push origin :newbranch
需求9
描述
fetch更新本地倉庫(更新遠程代碼到本地)
步驟
進入到需要提交的文件所在目錄,輸入如下指令:
# 方法一 # 從遠程的 origin 倉庫的 master 分支下載代碼到本地的 origin master git fetch origin master # 比較本地的倉庫和遠程參考的區別 git log -p master.. origin/master # 把遠程下載下來的代碼合並到本地倉庫,遠程的和本地的合並 git merge origin/master # 方法二 # 從遠程的 origin 倉庫的 master 分支下載到本地並新建一個分支 temp git fetch origin master:temp # 比較 master 分支和 temp 分支的不同 git diff temp # 合並 temp 分支到 master 分支 git merge temp # 刪除 temp git branch -d temp
需求10
描述
開發中經常在錯誤的分支上改了大量代碼,需要轉移到正確到分支上
步驟
進入到項目根目錄,輸入如下指令:
# 將當前所以修改提交的本地一個儲存庫,使用此命令后當前分支將會是修改之前的狀態 git statsh # 切換分支,通過如下命令將儲存庫的代碼拉取下來 git checkout dev git stash apply # 這個命令也可以實現,和上面不同的是會自動刪除本地儲存,不過出現沖突則不會刪除 # git stash pop # 查看本地儲存 git stash list # 刪除本地儲存 git stash drop
需求11
描述
回滾代碼到某次commit,開發過程中可能合並到不需要到分支,或個別原因需要回退
步驟
進入到項目根目錄,輸入如下指令:
# 回退到上個版本 git reset --hard HEAD^ # 回退到前3次提交之前,以此類推,回退到n次提交之前 git reset --hard HEAD~3 # 退到/進到 指定commit的sha碼 git reset --hard commit_id # 強推到遠程 git push origin HEAD --force
需求12
描述
在我們工作中,經常會需要建立很多開發分支,但是過一段時間自己都不記得那個分支是干什么的了,這里提供給git分支添加備注功能,方便管理
步驟
進入到項目根目錄,輸入如下指令:
# branch_name 是需要加備注的分支名 git config branch.branch_name.description "這里添加注釋" # 例如給 dev 分支加備注 git config branch.dev.description "家花不如野花香~" # 查看 dev 分支備注 git config branch.dev.description # 借助工具 git-br 查看分支備注 npm i -g git-br # 查看所有分支備注 git br
需求13
描述
Mac SSH證書配置
步驟
打開命令行,輸入如下指令:
# 步驟一:檢查是否已經存在SSH Key ls -al ~/.ssh # 步驟二:生成/設置SSH Key # 情況一:終端出現文件id_rsa.pub 或 id_dsa.pub,則表示該電腦已經存在SSH Key,此時可繼續輸入命令: pbcopy < ~/.ssh/id_rsa.pub # 這樣你需要的SSH Key 就已經復制到粘貼板上了,然后進行步驟3 # 情況二:終端未出現id_rsa.pub 或 id_dsa.pub文件,表示該電腦還沒有配置SSH Key,此時需要輸入命令: ssh-keygen -t rsa -C 'your_email@example.com' # 然后一路回車(-C 參數是你的郵箱地址) # 此時再輸入命令:ls -al ~/.ssh 就會出現id_rsa.pub 和 id_dsa.pub兩個文件,然后重復情況一的步驟即輸入以下命令 pbcopy < ~/.ssh/id_rsa.pub # 步驟三:將SSH Key添加到GitLab中 # 打開GitLab, 登錄,找到左邊欄有一個🔑的按鈕,點擊“ADD SSH KEY”按鈕添加,將已經獲得的SSH Key粘貼到“Key” # 下邊的標題可以隨便取,點擊加入項目,這樣就保持了本地與服務器端的聯系 "🔑"已替換為 Profile Setting里的"SSH Key"
需求14
描述
git 本地分支關聯遠程分支
步驟
進入到項目根目錄,輸入如下指令:
# 遠程有對應分支 remote_branch:遠程分支名 local_branch:本地分支名 git branch --set-upstream-to=origin/remote_branch local_branch # 遠程無對應的分支 # 新建一個本地的分支 newbranch git checkout -b newbranch # 新建一個遠程分支 git push origin newbranch:newbranch # 把本地的新分支,和遠程的新分支關聯 git push --set-upstream origin newbranch
需求15
描述
強制切換到本地某個分支
步驟
進入到項目根目錄,輸入如下指令:
# 如果要保留本地的修改 git status git add . git commit -m "備注信息" git checkout newBranch # 強制切換,即放棄本地修改 git checkout -f newBranch
需求16
描述
將一分支的某次提交合並到另一分支,比如在develop分支需要合並test分支的某次提交
步驟
進入到項目根目錄,輸入如下指令:
# 切到test分支 git checkout test # 查看commitId並復制出來 git log #切換到develop分支 git checkout develop # 合並需要的提交 git cherry-pick '需要合並的commitId'
問題1
描述
The file will have its original line endings in your working directory.
原因
原因不一,大體是因為使用拷貝的方式遷移文件或者從別人的倉庫下載文件后想要上傳到自己的倉庫而出現的問題
步驟
出現上述bug后,接着輸入如下指令:
# 刪除緩存 git rm -r --cached . # 解決系統不同的沖 git config core.autocrlf false # 接着重新執行上傳操作 git add . ...
問題2
描述
git 在pull或者合並分支的時候有時會遇到提示:Please enter a commit message to explain why this merge is necessary
原因
原因不詳
步驟
-
-
按鍵盤左上角"Esc"
-
補充
知識1
# git add上傳本地項目所有變化的命令三種有
git add -A
git add -u
git add .
git add -A 提交所有變化
git add -u 提交被修改(modified)和被刪除(deleted)文件,不包括新文件(new)
git add . 提交新文件(new)和被修改(modified)文件,不包括被刪除(deleted)文件
