描述:查看GIT版本分支,回溯代碼
基本命令回顧:
git init
git add file //該命令可以將文件添加進跟蹤文件,也可以將修改的跟蹤文件放進暫存區
git status
git commit -m "提交說明"
初始化乾淨倉庫:
project目錄下初始h化倉庫並提交後
git clone --bare ./project new.git
首次推送服務器:
採用SSH協議
scp -r new.git [email protected]:/my/git/new.git
修改提交:
通常修改一個文件後:
git add file
git commit -m 這樣進行提交
或
git commit -a 更新並提交
修改最後一次提交:功能,本次提交漏掉文件,或提交信息錯誤需要重新提交時
git commit -m
git add new_file
git commit --amend
//合併爲一次提交
標籤:標籤是當前commit的對象指針
查看標籤:
git tag
新建標籤:
git tag -a tag -m 'information'
補打標籤:爲以前提交的快照補上標籤
git tag v1.0 xxxxxxx(哈希值)
標籤是本地化操作,所以要推上服務器需要:
git push origin V1.0
推送所有標籤(增補標籤):
git push origin --tags
推送標籤等同於推送指向的commit對象。
查看提交日誌:
git log
git log -p 2
比較文件與暫存文件區別
git diff file
遠端倉庫操作:
克隆源碼:
git clone root@192.../../../new.git //當前目錄 名字默認爲new
顯示遠程倉庫:
git remote -v
添加遠程倉庫:
git remote add name git://
git remote add name root@192...
//name爲新的遠程倉庫名,和origin一樣
推送服務器:
git push origin master
拉取數據:
git fetch name
//會抓取上次克隆或fetch以來,所有更新的數據
//拉取到本地爲一個新的分支,需要手動合併
拉取數據併合並:
git pull name
//會自動合併到當前分支,在只有一個分支的情況直接直接拉取即可
//若是多分支,還要設定本地分支跟蹤遠端具體哪個分支,才能實現合併。
//git clone 的本質就是初始化一個本地master分支並跟蹤遠程master分支。
分支操作:
創建分支:
git branch is01
切換分支:
git checkout is01
或
git checkout -b is01//創建並切換
分支合併:
git checkout master
git merge is01 //將01合併到嗎master
跟蹤分支:
首次從遠端拉取新分支後,在本地也不能操作該分支,比如拉取的遠程分支爲origin/fix
本地只能有兩個選擇:
1.合併到本地當前分支
git merge origin origin/fix
2.創建一個新的分支fix,在剛拉取的分支基礎上
git checkout -b new_fix origin/fix
或
git checkout --track origin/fix
版本回溯:
本地回溯到上一版本:即git commit 之前
git reset --soft HEAD^ //HEAD是當前commit對象,^表示其父對象
回溯到暫存文件之前:即git add之前
git reset -q file
此時回到了修改未暫存階段
回溯到上一版本,並且添加的文件不保存
git reset --hard
注意這個是硬回溯,當前改動的代碼是不會保存的。
回到更以前的版本
git reset --soft HEAD^^
git reset --soft SHA值
git branch and merge.
分支:
在GIT初始化倉庫時,創建的分支爲master,在初此提交時
會創建一個committer指針,指向當前提交對象的文件快照,以哈希值來區分
當再次提交時,提交的對象會包含一個指向上次提交對象的指針(parent).
所謂分支就是指向commit對象的可變指針,每次提交後,都指向最後一次提交的
commit對象。
分支的創建:
:git branch name...
這會在當前commit上新建一個分支,與主分支master一樣指向同一個commit對象,
這裏需要一個HEAD指針,來區別當前工作的分支,HEAD指向當前工作的分支,
切換分支:
:git checkout name...
如果在新的分支進行了提交,此時的分支指向新的commit,而原來的master指向爲提交前的
commit。故回到主分支時,git checkout master.文件內容回到了master所指向的快照
內容,此時又可以在此基礎上開發另外的內容。
當回到master分支後,代碼推進了又再次提交,此時等若產生了新的分支。
此時的master和name...分支是一種平行關係,父commit都來自未創建分支的快照對象。
合併:
在新的分支提交以後,確保代碼穩定後,需要合併到主分支
:git checkout master
切換回主分支
由於新的分支的父對象是master。即name 分支是master分支的下游,此時合併
:git merge name ...
這部稱fast forward,只是簡單的將master分支向前推進。指向了新分支的commit.
這是因爲沒有什麼分歧。現在可以刪除新的分支
:git branch -d name...
合併提交:
祖先不止一個的情況,以三方合併計算做合併策略
衝突合併解決:
在不同的分支修改了統一文件的同一部分。
分支管理:
git branch //所有分支
git branch -v //各個分支最後一次commit信息
git branch --merge/--no-merge //已經合併的分支/相反。
分支未合併會失敗,當然也可以強制刪除-