常見的Git操作
## 常見的Git操作
1、倉庫從無到有
本地生成ssh秘鑰,如果不嫌麻煩當然可以不設置,使用HTTPS即可
我的配置是Eclipse是HTTPS,使用GitHub,用來編寫筆記,但是HTTPS需要記住密碼,不然每次都需要填
IDEA使用SSH,用來工作提交代碼,使用Gitlab。
ssh-keygen -t rsa -C "註冊郵箱"
id_rsa.pub文件添加到Git的秘鑰管理處,實際任何遵守Git協議的分布式版本控制基本流程基本是相同的,不必糾結用的是哪家產品。
如果是長期使用的電腦你可以配置全局
1 2 3 |
git config --global user.name "賬號名"
git config --global user.email 郵箱
git config --list 查看配置結果
|
當然你也可以只配置臨時變量 去掉--global即可,因為我需要往牛客,碼雲,GitHub,Gitlab提交,所以這種是很有用的。因此我只需要修改提交的臨時地址。
2、從本地開始
1. touch README.md 添加一個文件,用於註釋、說明,在倉庫的頂級目錄下則會被顯示作為該倉庫或文件的說明。
2. git init 初始化本地倉庫。
3. git add README.md 將上述文件添加到暫存區
4. git commit -m "first commit" 將暫存區的文件進行添加到本地分支。
5. git remote add origin https://github.com/jxnu-liguobin/SpringBoot-Seckill.git 添加遠程分支,一般名稱同本地分支,已經存在則綁定本地與遠程,該操作只能在init後執行,且只能執行一次。
6. git push -u origin master 提交本地到master主分支,默認本地master,實際開發時這裏是開發的sprint分支,意為叠代。
上面的暫存區,分支,工作區的存儲模型借鑒自CyC2018
3、從遠程開始
當然你也可以從遠處拉下一個項目,就像這樣
git clone [email protected]:jxnu-liguobin/Java-Learning-Summary.git 此處的連接可以是SSH也可以是HTTPS,取決於你的愛好,推薦SSH。
如果是別人的倉庫則你需要有權限否則可以拉取,無法提交,權限是指你的公鑰必須要被添加到遠程倉庫的秘鑰管理中心,公司一般有統一管理SSH的平臺。
如果你有權限,你可以在本地創建一個自己的倉庫和一個開發分支,並將master合並到本地這個分支上來只需要:
git checkout -b newBrach origin/master 在origin/master的基礎上創建newBrach分支,其中-b表示創建並切換到newBrach分支,origin/master表示源分支master
其次你還可以先創建一個本地分支 git checkout -b newBrach
再更新或合並 git merge master 表示使用master更新當前分支,因為是第一次創建所以是沒有沖突的,實際如果存在沖突則需要解決沖突。
如果覺得Git不方便你可以使用圖形化界面分支管理工具 Sourcetree。
你也可以更加暴力直接在本地某一個空分支下pull拉取 master。
接下來你只需push,如果沒有配置默認的提交分支,則提交的時候還需聲明提交分支。
像這樣 git push -u origin newBrach 如果你不填origin 則默認是master 。
你還可以強制提交
像這樣 git push -u origin master --force 但並不建議使用,慎用。
4、其他分支處理命令
分支修改
1. git branch 分支名稱 在本地新建一個分支
2. git checkout 分支名稱 切換到你的新分支:
3. git push origin 分支名稱 將新分支發布在github上
4. git branch -d 分支名稱 在本地刪除一個分支
5. git push origin :分支名稱 (分支名前的冒號代表刪除) 在github遠程端刪除一個分支
如果你需要直接使用git pull和git push,則你需要設置以下
1. git branch --set-upstream-to=origin/master master
2. git branch --set-upstream-to=origin/分支名稱 分支名稱
3. git config --global push.default matching
以上建議忽略,實際開發這裏每個月都需要修改開發的叠代分支,還不如別設置了。
5、解決提交錯誤
如果你是commit提交錯誤了你可以這樣 :
git reset 分支回滾到暫存區 (--hard 版本號,即回滾最後一次提交commit,--files)
如果你是add添加錯了你可以這樣:
git checkout 暫存區回滾到工作區(回滾最後一次add操作,--files) -b branch 在本地創建並切換到branch分支,前面以前提到到,-d是刪除,切記
6、git rebase 和 git merge的區別
- git pull = git fetch + git merge
- git pull --rebase = git fetch + git rebase 重點是不會產生新的commit請求。
遠程跟蹤分支已更新(Git術語叫做commit),需要將這些更新取回本地,這時就要用到git fetch 上面已經提及到了。
如果你想讓"mywork"分支歷史看起來像沒有經過任何合並一樣(看不到合並的路徑,不留提交痕跡),可以用 git rebase。
而 git merge的合並會出現痕跡,造成菱形依賴,看起來很困惑,所以推薦使用 git fetch + git rebase。
git rebase --abort參數來終止rebase的行動,並且"mywork" 分支會回到rebase開始前的狀態。
多人提交自己的代碼,必須先更新本地為最新,否則再次提交將會被拒絕,如果拉取下的代碼和本地自己的有沖突則需要自己去解決了。
你可以這樣切換分支: git checkout mywork
然後執行 :git rebase origin
這些命令會把你的"mywork"分支裏的每個提交(commit)取消掉,並且把它們臨時保存為補丁(patch)(這些補丁放到".git/rebase"目錄中),
然後把"mywork"分支更新到最新的"origin"分支,最後把保存的這些補丁應用到"mywork"分支上。
當‘mywork‘分支更新之後,它會指向這些新創建的提交(commit),而那些老的提交會被丟棄。 如果運行垃圾收集命令(pruning garbage collection),
這些被丟棄的提交就會刪除。(請查看 git gc)
在rebase的過程中,也許會出現沖突(conflict)。 在這種情況,Git會停止rebase並會讓你去解決 沖突;
在解決完沖突後,用"git-add"命令去更新這些內容的索引(index), 然後,你無需執行 git-commit,你只要執行:
git rebase --continue git 便會自動繼續合並
如果你需要查看倉庫修改狀態, 你可以使用:git status
你還可以查看git的日誌: git log -p
你可以查看對比兩次文件內容具體修改了什麽 :git diff
更加具體的對比: git diff HEAD -- filename
可以查看工作區和版本庫裏面最新版本的區別
HEAD 表示當前版本,也就是最新的提交。上一個版本就是 HEAD^ ,上上一個版本就是 HEAD^^ ,
往上100個版本寫100個 “ ^ ” 比較容易數不過來,所以寫成 HEAD~100 。HEAD~2 相當於 HEAD^^
如果你需要取回遠程的某些分支你可以這樣: git fetch origin master 取回origin主機的master分支
如果你需要取回所有分支你可以這樣: git fetch
1 2 3 4 5 6 |
git checkout master # //取出master版本的head。
git checkout tag_name # //在當前分支上 取出 tag_name 的版本
git checkout master file_name # //放棄當前對文件file_name的修改
git checkout commit_id file_name # //取文件file_name的 在commit_id的版本。
# //其中commit_id為 git commit 時的sha值,每次提交都有唯一值。
git checkout -- hello.rb # //這條命令把hello.rb從HEAD中簽出。
|
如果你搞錯了很多文件,可能需要恢復所有,你可以這樣: git checkout .
這條命令把當前目錄所有修改的文件 從HEAD中簽出並且把它恢復成未修改時的樣子。慎用
其他參數
- git rebase --abort 會回到rebase操作之前的狀態,之前的提交的不會丟棄;
- git rebase --skip 則會將引起沖突的commits丟棄掉;
- git rebase --continue 用於修復沖突,提示開發者,一步一步地有沒有解決沖突,fix conflicts and then run "git rebase --continue"
7、重要的mvn命令
- mvn clean deploy 清理並發布
- mvn install -Dmaven.test.skip=true 跳過測試打包
- mvn dependency:tree 查看依賴樹 IDE的依賴沒有成功下載的時候,可以使用該命令進行查看,此命令將自動下載本地沒有的依賴,如果此處下載成功,則說明是本地倉庫緩存問題,導致找不到依賴
- mvn clean compile -U 編譯 該參數能強制讓Maven檢查所有SNAPSHOT依賴更新,確保集成基於最新的狀態,如果沒有該參數,Maven默認以天為單位檢查更新,而持續集成的頻率應該比這高很多。
8、解決沖突的方式之一
1 2 3 4 |
合並分支到本開發分支,或者git pull --rebase拉去下來
查看沖突文件,並去除沖突提示註釋和沖突部分代碼
執行git add 將修改完後的沖突文件添加進索引【stage 暫存區,位於工作區和當前分支之間】
執行git rebase -- continue 繼續合並
|
常見的Git操作