1. 程式人生 > >常見的Git操作

常見的Git操作

git push 對比 執行 並發 開發 工具 push 麻煩 syn

## 常見的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操作