Git常用命令
常用全局配置
配置用戶信息
要配置成自己的真實(shí)用戶名(姓名全拼)和郵箱
git config --global user.name "John Doe"
git config --global user.email "johndoe@example.com"
配置別名
比如git checkout通過配置別名,可以使用git co來達(dá)到git checkout的效果
git config --global alias.co checkoutgit config --global alias.br branchgit config --global alias.ci commitgit config --global alias.st status
配置編輯器vim
git config --global core.editor vim
配置代碼合并工具
git config --global merge.tool vimdiff
配置高亮顯示
git config --global color.ui true
git config --global color.status auto
git config --global color.branch auto
查看所有配置
git config --list
下載代碼
git clone https://github.com/libgit2/libgit2
如果要指定某個(gè)分支翎嫡,則加上-b參數(shù)
git clone https://github.com/libgit2/libgit2? -b<branch name>
分支操作
git branch new_branch# 創(chuàng)建一個(gè)名為new_branch的分支git checkout -t remote/branch_name# 創(chuàng)建本地branch_name分支,并且跟蹤遠(yuǎn)端倉庫的同名分支git branch -D branch_name# 刪除本地分支git push remote :branch_name# 刪除遠(yuǎn)端remote倉庫的名為branch_name的分支git checkout branch# 從一個(gè)分支切到另一個(gè)分支具伍,注意此分支必須是已經(jīng)有的分支
修改代碼并提交
代碼修改后圈驼,可以通過如下命令將修改的代碼標(biāo)記為track狀態(tài)(可根據(jù)實(shí)際情況選擇其中一條或者多條命令)。
git add # 添加修改的文件绩脆,多個(gè)文件則用空格隔開。也可以是目錄靴迫。git mv # 重命名文件git rm # 刪除文件git rm -r # 刪除目錄
將標(biāo)記為track狀態(tài)的文件提交
git commit# 提交修改,該命令會(huì)調(diào)用編輯器用于書寫log信息矢劲。也可使使用git commit -m "commit messages"
提交代碼到遠(yuǎn)程倉庫
需要根據(jù)實(shí)際情況選擇如下其中一條命令提交代碼
git push remote HEAD:refs/for/branch#如果git是gerrit倉庫慌随,則必須使用此命令提交評(píng)審。其中remote為遠(yuǎn)端倉庫名阁猜,需要替換為實(shí)際名稱。branch需要替換為實(shí)際分支名剃袍。git push# 如果本地分支已經(jīng)配置為跟蹤遠(yuǎn)程分支(比如:git co -t sunniwell/develop),可以直接使用git push憔维。git push remote branch# remote 表示遠(yuǎn)程倉庫名稱,branch表示分支名稱业扒。此命令只適用于本地倉庫與遠(yuǎn)程倉庫同名的情況git push remote local_branch:remote_branch#該命令適用于本地倉庫和遠(yuǎn)程倉庫不同名的情況
回退代碼
回退代碼會(huì)用到git的reset和checkout兩個(gè)指令:
git reset是把本地代碼回退掉,要切到最新程储,則需要通過git pull拉取服務(wù)器上的最新代碼;一般只有在需要永遠(yuǎn)放棄某些修改的情況下章鲤,才使用git reset命令。
git checkout是切到過去的時(shí)間點(diǎn)帚呼,還可以切換來。相當(dāng)于切到了一個(gè)新的分支萝挤,還可以切換原來分支根欧。
注意,本節(jié)的示例中的所有git reset都可以可以換成git checkout凤粗。
將代碼回退到三天前
$ git log --before="3 days"-1 --pretty=format:"%H"619ee7a53952d4c94270aa39e9ecdf9ac3aca473$ git reset --hard 619ee7a53952d4c94270aa39e9ecdf9ac3aca473
也可以合起來用:
git log --before="3 days"-1 --pretty=format:"%H"|xargs git reset --hard
回退代碼到某一天
git log --before="2013-10-10"-1 --pretty=format:"%H"|xargs git reset --hard
回退代碼到某一天的某個(gè)時(shí)間點(diǎn)
git log --before="2013-10-10 09:15:00 +0800"-1 --pretty=format:"%H"|xargs git checkout# 其中 +0800 表示東八區(qū)時(shí)間
查看某個(gè)時(shí)間段的日志
git log --since="2013-10-10 09:15:00 +0800"--before="2013-10-10 23:59:00 +0800"
將服務(wù)器代碼回退到某個(gè)點(diǎn)并提交到某個(gè)分支(服務(wù)器回退不可恢復(fù),確保準(zhǔn)確后回退嫌拣,做好備份)
git reset --hard commit_id git push --force sunniwell base
按日期查看log
git log --after="20180504"--before="20180601"
合并分支
合并分支前提是需要相同SDK中的不同分支。
把另外一個(gè)分支的所有修改快速合并捶索。并提交到一個(gè)分支上
git merge --no-ff
把另外一個(gè)分支的單個(gè)commit 合并到當(dāng)前分支,并提交單個(gè)分支腥例,有沖突查看“HEAD”關(guān)鍵字
git cherry-pick
解決沖突
合并分支時(shí)難免會(huì)產(chǎn)生沖突酝润。沖突發(fā)生后分為如下兩種情況進(jìn)行處理:
文本文件沖突可以通過git mergetool命令編輯沖突文件;
二進(jìn)制文件沖突 時(shí)就無法合并了要销,要么使用被合并分支的該文件,要么就采用當(dāng)前分支的該文件疏咐。
比如倉庫下面的“path/lib_file.so”沖突了。則可以通過如下命令選擇采用哪個(gè)分支的文件:
git show branch_name:path/lib_file.so > path/lib_file.so#命令中的第一個(gè)path/lib_file.so必須是對(duì)應(yīng)的git倉庫根目錄的路徑借跪,第二個(gè)path/lib_file.so則是當(dāng)前目錄的相對(duì)路徑。