------------------------------------------------------------
1.查看分支
git branch
git branch -a 查看全部分支
git branch <new-branch> 基於當前分支建立新的分支
git branch -r 查看遠程分支
git checkout <branch> 切換分支
git branch --track <new-branch> <remote-branch>
git branch <branch> -d 刪除本地分支
git branch <branch> -D 強制刪除本地分支(若是沒有merge進去)
2.本地提交
git add . 當前全部修改添加到下次提交中
git add --all 添加全部,包括新增的
git commit -m "" -a
git commit -m "" readme.txt
git commit -am "" 不須要add,可是不包含添加的部分
git commit -am --amend "" 修改上次提交,而且提交當前修改
git rebase -i 刪除commit對象
合併 squash
3.遠程提交
git push origin head:refs/for/master%r=song.w,r=song.w
git push origin master
git push origin <local-new-branch> 本地新建分支推送到遠程(須有權限)
4.遠程同步
git fetch 獲取全部最新的分支到工做區(默認是全部)
git fetch <branch> 獲取指定的分支
git pull 保證分支是最新的(fetch + merge,容易產生一個空的commit)
git pull --rebase 比起pull安全一點,而且分支不會像merge那樣雜亂。
git pull <source-branch> <source-sub-b> 回遠程分支併合併到當前分支
git pull <source-branch> <source-sub-b>:<local-branch> 取回遠程分支併合併到本地分支
git fetch origin <new-branch> 獲取新的分支到倉庫
git checkout <branch> 遷出分支,開始同步(也叫切換分支)
git rebase <source-branch> 把源分支合併到當前分支
4.撤銷
git reset --hard head 放棄當前工做內容。
git reset --hard head~1 回到上一個歷史版本
git reset --hard refLog-change-id 回到將來的一個版本,或者回到歷史的某個版本
git checkout filename revert 文件 撤銷
4.1文本
git diff
rm -f .git/index.lock
5.合併
git merge <source-branch> 合併到當親分支(容易產生commit,而且push的時候會出現missing change-id,須要經過
commit -amend 來添加change-id 來解決)
git rebase <source-branch> 合併代碼(定義分支的狀態)
rebase不會產生新的commit,會自動來重複以前的commit
git rebase -abort 放棄rebase
git squash commits 合併commit
6.備份
7.git 線路圖
gitk
10.tag
git tag -a tagname_1 commid-id 給已經提交的commit加tag,
git push origin test_fabu # 將本地的tagname提交到遠程分支
git tag 顯示本地tag
git push origin –-tags # 將本地全部標籤一次性提交到git服務器
發佈完成後打tag
git tag -a prod_tag_20160216 commit-id
git push origin prod_tag_20160216
------------------------------------------------------------
主題
1.衝突
git rebase <source-branch> 合併代碼
git add . 放到緩衝區
git rebase --continue 繼續從新定義分支的狀態
git push for 從新提交代碼
2.合併版本(當前分支的多個版本)
git fetch
git rebase <target-branch> <source-branch>
------------------------------------------------------------
問題
1.git要不要每次push的時候pull一下?
2.origin/head 爲啥指向origin/master?
------------------------------------------------------------
todo
1.dev merge 到master,master 再merge到release。
2.
3.git
------------------------------------------------------------
注意點:
1.push前須要獲取最新
2.別人push以後,若是我本地有commits,則須要uncommitted,而後拉取最新的。
3.切換分支以前要關閉vs,從新打開
4.Your branch is ahead of 'origin/dev' by 1 commit.
這個commit
------------------------------------------------------------
你rebase或者pull下
http://stackoverflow.com/questions/2452226/master-branch-and-origin-master-have-diverged-how-to-undiverge-branches
merge 和rebase區別(關於冗餘日誌)
http://blog.csdn.net/wh_19910525/article/details/7554489
git教程
http://gitbook.liuhui998.com/
http://blog.csdn.net/wangjia55/article/details/8791180 git rebase 抽屜比喻
------------------------------------------------------------
宋瑋 http://blog.csdn.net/w_jewelry/article/details/8123639 解決衝突安全
git入門 flash http://conf.ctripcorp.com/pages/viewpage.action?pageId=54461673
gerrit 項目申請 http://conf.ctripcorp.com/pages/viewpage.action?pageId=55378426
git問題 http://conf.ctripcorp.com/display/SysDev/10.FAQ
git 全部命令 http://conf.ctripcorp.com/pages/viewpage.action?pageId=13609130
git 基礎的命令行 http://conf.ctripcorp.com/pages/viewpage.action?pageId=57509485
git pdf http://git-guide.dev.sh.ctripcorp.com/files/ProGit_zh_CN.pdf
git 經常使用操做(rebase) http://conf.ctripcorp.com/pages/viewpage.action?pageId=53627858#id-4.經常使用操做-_Toc394777088詳解gitrebase
http://conf.ctripcorp.com/pages/viewpage.action?pageId=81445758 Permission denied (publickey)
------------------------------------------------------------
1. merge
>git checkout master
>git merge origin
將遠程的分支merge到當前分支,ok以後就提交,當前分支改了,而後遠程也改了。
2. rebase
>git checkout master
>git rebase origin
將origin重整,直接就是修改origin分支,好像把當前分支直接嫁接到origin。
因此若是,在不產生衝突下,使用origin不會產出merge commit,由於是一種嫁接。
3. push 的時候no new change
通常是其餘分支合併東西過來的,須要修改下當前分支,產生新的commit。
4.push no tracking
修改下沒有change-id的commit,git commit --amend -am ""
這樣就會有change-id
5.missing Change-Id in commit messa
ge footer 這多是有一些commit沒有change-id
6.怎麼保證merge過來的commit不被打散,只要一次review就經過
要都有change-id;若是已經分叉,須要reset,而後pull --rebase,而後再merge。
7.普通的新的commit沒有change-id 有多是沒有hooks。
8. merge 的注意點,相關的兩個分支都須要獲取到最新的狀態,不然容易分叉,增長解決的難度,rebase後會重演掉已經存在的commit。
9. git unpack failed: error Missing tree 能夠用這個命令 git push --no-thin
這種狀況會在release往dev合併過一次,叫作往回合併。
10.diff with parent
diff with parent 1:跟拉分支時候的原點作比較的出來的結論。
diff with parent 2: 跟拉分支原點後的改變作比較的出來的改變。
------------------------------------------------------------
遠程分支的合併必須用merge,本地分支的合併用rebase,理由以下:
1.merge會保留遠程提交的commit。
進行衍合的時候,實際上拋棄了一些現存的提交對象而創造了一些相似但不一樣的新的提交對象。若是你把原來分支中的提交對象發佈出去,而且其餘人更新下載後在其基礎上開展工做,而稍後你又用 git rebase 拋棄這些提交對象,把新的重演後的提交對象發佈出去的話,你的合做者就不得不從新合併他們的工做,這樣當你再次從他們那裏獲取內容時,提交歷史就會變得一團糟。
2.本地的commit沒有發佈出去,並且須要一條線的commit,用rebase比較好。
------------------------------------------------------------
1.實驗一:分支分叉後,release分支和master分支分叉,release提早修改,master以後,看看commit的前後關係。
2.實驗二:rebase的方向問題。
------------------------------------------------------------
經驗:
1.若是是release合到 dev,這種release有更新的,先merge,merge完了以後要show log,由於這裏面有可能
對方的代碼在你以後把你的代碼覆蓋掉,自動merge的嘛,若是有衝突,解決完衝突更加要show 一下log了。
2.在amend commit以前看看 要status一下,否則容易amend遠程的commit
------------------------------------------------------------服務器