Git操作指南
1.安裝并配置Git
Git官網:https://git-scm.com/downloads
安裝完成后,打開Git Bash,配置Git:
git config --global user.email "email@example.com"
git config --global user.name "Your Name"
其中 --global參數,表示這臺機器上所有的Git倉庫都會使用這個配置。
當然也可以對某個倉庫指定不同的用戶名與郵箱,在當前倉庫運行該命令而不使用–global即可。
2.獲取項目
使用Git進行版本管理的對象是項目,那么項目從哪里獲取呢?
兩種場景:
- 項目源碼在遠程版本庫(GitHub/GitLab/Gitee),從遠程版本庫克隆項目到本地。
- 項目源碼在本地,想要添加Git版本管理,并關聯推送到指定遠程版本庫。(或者采用第一種方案,遠程克隆到本地后再將代碼全部移動到版本庫,簡單快速)
2.1 從遠程版本庫克隆項目到本地
- SSH方式(推薦,速度快,需要密鑰)
git clone git@49.4.67.157:bdl/AI_Sports_App.git
- HTTP方式(不需要密鑰)
git clone http://49.4.67.157:7070/bdl/AI_Sports_App.git
如何配置密鑰
打開Git Bash,輸入cd .ssh,如果沒有該目錄,說明本機沒有配置過密鑰。
輸入cd …回到上一層目錄,即確保當前目錄在~下
輸入以下命令創建密鑰:
ssh-keygen -t rsa -C "your_email@youremail.com"
查看你生成的公鑰:
cat ~/.ssh/id_rsa.pub
復制公鑰,登錄GitHub/GitLab,點擊右上角頭像,點擊Setting,左側導航欄找到SSH Keys,將公鑰粘貼在Key輸入框中,設置Title,點擊Add Key保存即可。
- 克隆指定分支的版本
git clone -b <分支名> <Git URL>
- 指定克隆深度(depth=1即只克隆最新版本)
git clone --depth=1 <Git URL>
2.2 本地項目添加Git版本管理,并關聯推送到遠程版本庫
?(2.2節建議最最最后看,涉及后面的提交與推送操作)
進入項目根目錄,執行Git倉庫初始化操作。
git init
將項目所有內容提交到暫存區。
git add .
將暫存區內容推送的本地版本庫。
git commit -m "Add: Project"
在遠程版本庫(GitHub/GitLab/Gitee)上創建一個遠程倉庫。
獲取SSH鏈接(沒有配置SSH密鑰的話可使用HTTPS鏈接)
本地版本庫關聯遠程版本庫。
git remote add origin git@gitee.com:YanKeyon/YanKeyon.git
將遠程版本庫中代碼與本地版本庫中代碼進行合并。
git pull --rebase origin master
將本地版本庫代碼上傳至遠程版本庫。
git push -u origin master
OK。
3.查看版本庫狀態
git status
標紅的文件:FirstFile.txt 表示沒有被添加的文件。
4.將文件添加到暫存區
在上面我們通過git status可以看到有一個標紅文件,將該文件提交到暫存區有兩種方式:
- 提交單個文件到暫存區(為文件路徑)
git add <filename>
- 提交當前全部修改過的文件到暫存區
git add .
溫馨提示
如果新增了一個空的文件夾,Git是監測不到的,此時需要在該文件夾內創建文件后才可以。
5.提交暫存區的內容
git commit -m "描述"
-m 后面輸入的是本次提交的說明,可以輸入你本次提交的內容概略,方便以后從歷史記錄中方便的找到改動記錄。
6.推送到遠程版本庫
git push origin master
也可以只輸入git push
,默認提交到master分支。
7.從遠程版本庫更新項目到本地
使用場景:
- 當遠程版本庫有更新,而本地想更新的時候使用
- 當本地想提交時,建議先
git pull
一次,再通過git add
、git commit -m ""
和git push
提交本地代碼。
- 全部更新
git pull
- 更新單個文件
git fetch
git checkout origin/master -- <filename>
8.查看單個文件的修改內容
git diff <filename>
-表示刪除的內容
+表示增加的內容
溫馨提示
如果進入diff后發現無法退出,進入:模式,鍵入q即可。
9.查看提交日志
- 查看全部提交日志
git log
會列出所有提交的commit ID、Author、Date、描述。
也可以通過瀏覽器訪問GitHub/GitLab查看。
- 查看最新一次提交
git log -1
- 以單行的形式查看提交
git log oneline
- 查看提交日志,并且能看到分支情況(推薦)
git log --graph --pretty=oneline --abbrev-commit
10.撤銷修改
撤銷修改分多種情況:
-
該文件沒有使用
git add
到暫存區,仍在工作區:git checkout -- <filename>
-
該文件使用了
git add
到暫存區,但沒有使用git commit
:將暫存區的文件撤銷,重新放回工作區:
git reset HEAD <filename>
-
該文件提交到暫存區并且
git commit
提交到本地版本庫:版本回退(回退到指定版本)
git reset --hard <commit ID>
溫馨提示
使用checkout的時候最好在后面加–,單一分支的項目沒事,但如果是多分支的,沒有--
就變成了“切換到另一個分支”的命令。
11.版本回退
- 回退到上一個版本
git reset --hard HEAD
- 回退到指定版本
git reset --hard <commit ID>
-
如果你回退版本后想重新回到新版本
命令reflog可以記錄你的每一次命令,找到想回去的commit ID,使用reset即可。
git reflog
12.提交忽略文件的配置
-
在倉庫根目錄下新建.gitignore文件
-
添加忽略規則
忽略規則如下: # 表示此為注釋,將被Git忽略 *.a 表示忽略所有.a結尾的文件 bulid/ 表示忽略build/目錄下的所有文件 bin/: 表示該文件夾下所有內容都被忽略,不忽略bin文件夾 /bin: 表示忽略根目錄下的bin文件夾 **/foo: 表示忽略/foo,a/foo,a/b/foo等 !*.zip 表示不忽略所有.zip結尾的文件
溫馨提示:
如果你不慎在創建.gitignore文件之前就push了項目,那么即使你在.gitignore文件中寫入新的過濾規則,這些規則也不會起作用,Git仍然會對所有文件進行版本管理。簡單來說出現這種問題的原因就是Git已經開始管理這些文件了,所以你無法再通過過濾規則過濾它們。所以大家一定要養成在項目開始就創建.gitignore文件的習慣,否則一單push,處理起來會非常麻煩。
模板
在GitHub上有一個專門為各個平臺提供的.gitignore模板
https://github.com/github/gitignore
其中包括針對Android項目的忽略模板:
# Built application files *.apk *.ap_ *.aab# Files for the ART/Dalvik VM *.dex# Java class files *.class# Generated files bin/ gen/ out/# Gradle files .gradle/ build/# Local configuration file (sdk path, etc) local.properties# Proguard folder generated by Eclipse proguard/# Log Files *.log# Android Studio Navigation editor temp files .navigation/# Android Studio captures folder captures/# IntelliJ *.iml .idea/workspace.xml .idea/tasks.xml .idea/gradle.xml .idea/assetWizardSettings.xml .idea/dictionaries .idea/libraries .idea/caches # Android Studio 3 in .gitignore file. .idea/caches/build_file_checksums.ser .idea/modules.xml# Keystore files # Uncomment the following lines if you do not want to check your keystore files in. #*.jks #*.keystore# External native build folder generated in Android Studio 2.2 and later .externalNativeBuild# Google Services (e.g. APIs or Firebase) # google-services.json# Freeline freeline.py freeline/ freeline_project_description.json# fastlane fastlane/report.xml fastlane/Preview.html fastlane/screenshots fastlane/test_output fastlane/readme.md# Version control vcs.xml# lint lint/intermediates/ lint/generated/ lint/outputs/ lint/tmp/ # lint/reports/
13.更新/推送失敗的解決方案
-
git pull更新失敗
出現錯誤,提示你本地的修改與遠程版本庫的修改沖突了。
藍框中的文件即為沖突的文件。
解決方法
- 本地備份該文件。
- 通過
git checkout -- <filename>
撤銷本地對該文件的修改。 - 此時使用
git pull
即可更新。 - 然后再進行自己的修改并推送到遠程版本庫即可。
-
git push推送失敗
出現的原因一般是由于本地沒更新卻推送導致的。
此時通過
git pull
更新一下項目即可再次推送。溫馨提示
建議每次提交之前,先更新一下,確保版本最新后再提交。
14.提高效率的小技巧:配置別名
- git status 等價于 git st
git config --global alias.st status
- git checkout – 等價于 git co-
git config --global alias.co- checkout --
- git commit 等價于 git co
git config --global alias.co "commit -m"
- git push 等價于 git ps
git config --global alias.ps push
- git pull 等價于 git pl
git config --global alias.pl pull
- git log …(打印分支) 等價于 git lg
git config --global alias.lg "log '--graph' '--pretty=oneline' '--abbrev-commit'"
- 取消別名
git config --global --unset alias.別名
溫馨提示
- 配置別名時,如果命令含有多個參數,需要使用""與’'將參數包含起來,否則設置會無效。
- 不要重復配置別名,如重復配置,輸入
git config --global --replace-all alias.別名 "命令"
即可恢復到一個配置。 - 輸入
git config --list
查看配置列表
Git進階:分支管理
參考:廖雪峰Git教程:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013743862006503a1c5bf5a783434581661a3cc2084efa000
https://www.jianshu.com/p/92305d949c0e
1.創建分支
創建一個分支,名為dev
git branch dev
2.切換分支
切換到dev分支
git checkout dev
3.創建并切換分支
創建并切換到dev分支,即上面兩條命令可合成一條。
git checkout -b dev
4.查看當前分支
git branch
5.合并分支到當前分支
合并dev分支到當前分支
git merge dev
6.刪除分支
刪除dev分支
git branch -d dev