Git和在Idea中使用Git

IDEA同步遠程分支信息

在Idea視圖中GIT的分支信息在右下角,若是咱們在remote新建了分支,本地默認不顯示,能夠在上方導航:VCS-Update project 同步遠程分支信息。
同步遠程分支信息git

IDEA新建、切換本地分支

在IDEA右下角GTI視圖中,咱們能夠選擇分支進行checkout,即新建/切換分支;
若是咱們須要指定從哪一個分支新建分支,則在GIT視圖中選擇分支-checkout As進行新建
新建/切換分支
若是咱們須要查看某個分支是從哪一個分支拉的,咱們可使用命令:git reflog show childBranch 命令查看
查看分支從哪裏拉的vim

GIT命令新建/切換分支

--查看當前分支
git branch
--基於某個分支新建分支
git checkout 原分支名
--新建分支並切換
git checkout -b 新分支名稱
--而後使用git branch查看,分支已經新建並切換

GIT命令查看/切換上游分支

咱們使用git checkout as分支後,分支默認跟蹤的是checkout的分支,咱們可使用命令來查看當前分支跟蹤的上游分支測試

--查看當前分支的上游分支
git branch -vv
--切換跟蹤的上游分支
git branch --set-upstream-to=origin/release_1001

GIT命令刪除/恢復分支

刪除fetch

--查看分支列表
git branch -a
--刪除本地分支
git branch -D 分支名稱
--刪除遠程分支
git push origin --delete 分支名稱

恢復.net

刪除時會顯示被刪除的hash
$ git branch -D dev
Deleted branch dev (was 1a103dd).

--恢復刪除
git branch dev 1a103dd(分支hash便可)

git遠程強制覆蓋本地

好比說本地刪除了一個文件,須要遠程覆蓋回來3d

git reset --hard origin/所在的分支

IDEA合併分支

例如咱們從test分支新建了dev分支,在dev分支上進行了代碼改動後,須要將dev的提交合併到test分支。code

  • git視圖選擇test分支checkout切換到test
  • 項目右鍵:git-repository-pull更新test分支
  • 項目右鍵:git-repository-merge changes,選擇dev分支進行合併 合併分支

GIT撤銷merge

假設咱們合併了一個分支,可是不想合併了,想撤銷這個合併的動做blog

git merge --abort

GIT選擇合併某次提交

master拉出分支dev,且都進行了屢次提交,此時master須要合併dev某一次的提交(多是個緊急bug修復)。排序

--1.切換到master分支
checkout master
--2.git頁面上查看提交記錄(git log -n查看最近n條)
git log -5
--3.選擇合併某個commit
git cherry-pick 0601e177dd

而後就正常pull> push便可rem

GIT rebase

通常狀況下咱們若是須要合併代碼,會使用git merge,可是還有一個比較強大的功能是rebase;rebase的意思是指將某個分支按照另外一個分支從新設置基準;這樣的好處有:

  • rebase對比merge節點樹會顯示的更加清晰
  • rebase能夠減小沒必要要的commit信息

merge和rebase對比

假設咱們有分支master,而後checkout出來一個dev,咱們按照如下操做步驟來測試一下。

1.master 修改並commit
2.dev 修改並commit 
3.master 修改並commit
4.dev修改並commit

若是咱們的dev分支須要和master保持最新,避免無效修改,咱們須要將master代碼合併到dev中。

//切換到dev分支
git checkout dev
//dev分支同步master的提交
git rebase master

下圖是咱們對比merge(左)和rebase(右)的節點樹顯示效果。
merge對比rebase
由上圖能夠看出,merge後的節點樹會按照提交時間進行排序;而dev重設基準後,dev的提交都是在master後面顯示,由此能夠保持提交信息的清晰。

rebase合併提交信息

注意,此狀況在本地提交狀況下使用
假設存在一種這樣的狀況:我在本地修改了一個bug,commit了5次以後才修好,那麼若是我吧這些push到remote,會致使gitlog很亂,其實這五個提交能夠合併成一個。在這種狀況下,咱們可使用rebase合併本地的commit

首先咱們在本地進行5次提交,git log以下:
git log

而後咱們使用git rebase -i 提交ID(注意這個id表明,合併這個id以後的全部提交,可是不包含這個id的,若是須要包含的話要往前找一下

git rebase -i cf8525cd52c4bb87d3f11b4f721e6c1a8a3ac3f4

而後git會進入vim頁面,咱們能夠按insert進入編輯模式,填寫對應的操做;此處有三個參數:

  • pick : 表明合併後的提交用這個提交的註釋
  • s : squash命令的簡寫,表明合併提交中包含這個提交
  • d : 表明合併提交中排除這個提交

咱們按須要更改參數後,esc退出編輯模式,:wq寫入並退出,git會進入下一步:填寫合併的commit message界面:
git rebase

一樣的咱們進入vim的編輯模式,註釋掉不須要的信息,並將5次提交的信息修改成bug fix 2,:wq寫入並退出就完成了合併。

最後,咱們分別在git命令和IDEA視圖中查看,咱們的5次提交信息以及合併爲bug fix 2。

push和remote衝突

本地進行了修改,而後commit了;結果push的時候發現remote已經被修改過,咱們使用pull命令後,會失敗,此時會提示: You have not concluded your merge.(MERGE_HEAD exists) 此時咱們應該:

  • 備份本地數據
  • 放棄本地修改,遠程reset本地
    git fetch --all
    git reset --hard origin/所在的分支
  • 而後用備份的數據手動合併本地再提交

fork保持最新

Fork的代碼如何保持和原分支最新?
Fork的代碼如何提交到原分支?
參見另外一篇:
http://www.javashuo.com/article/p-hxmwqdim-nw.html

相關文章
相關標籤/搜索