title: Git基礎
date: 2019-02-27 13:57:19
tags:
- Git
categories:
- Git
toc: true
Git常用命令
- 獲得版本庫
git init
git clone
- 版本管理
git add
git commit
git rm
- 查看信息
git help
git log
git diff
- 遠程協作
git pull
git push
git log
查看提交記錄
git log -3
,查看最近三條的提交記錄
git log --pretty=oneline
,以單行的形式查看提交記錄
git log --pretty=format:"%h - %an,%ar : %s"
,以特定格式顯示提交記錄
Git的提交id(commit id)是一個摘要值,這個摘要值實際上是用sha1計算出來的。
git checkout -- 文件名/文件夾名
,丟棄提交
對於user.name與user.email來說,有3個地方可以設置
/etc/gitconfig
(幾乎不會使用,如果使用的是Xcode自帶的git的話這個目錄是不存在的,需要手動創建),git config --system
~/.gitconfig
(很常用),git config --global
- 針對特定項目的,
.git/config
文件中,git config --local
上面三個設置,優先級由上到下遞減,也就是說在3中配置了,會屏蔽掉1,2的配置。
git config --local user.name '張三'
git config --local user.email '[email protected]'
查看文檔:git help config
git config --help
man git-config
git config
git config user.name
:查看用戶名
git config user.email
:查看用戶郵箱
注意:git rm
與rm
git mv
,rename
git add --all
<==> git add .
提交描述信息寫錯了,需要修改,使用git commit --amend -m "修正msg"
#gitignore
.gitignore
文件需要手動創建,將需要忽略的文件名放在這個文件中,支持增則表達式。
一些栗子:
要忽略項目目錄下的test.xcodeproject
文件,將文件名寫入即可。
忽略項目目錄下所有的.xcodeproject
工程文件,則*.xcodeproject
。
!a.xcodeproject
,a.xcodeproject這個工程文件不忽略。
*.c
#忽略所有以.c爲後綴的文件!lib.c
#但是lib.c除外/TODO
#僅僅忽略項目根目錄下的TODO文件,不包括subdir/TODObuild/
#忽略build目錄下的所有文件doc/*.txt
#會忽略doc/notes.txt,但不會忽略doc/server/arch.txt/*/test.txt
,忽略根目錄下第一級子目錄下的test.txt文件/**/test.txt
,忽略根目錄下所有子目錄裏的test.txt文件
分支branch
查看當前分支:git branch
新建分支:git branch new_branch
切換分支:git checkout new_branch
快捷切換回上一次的分支:git checkout -
,這個和cd -
類似
刪除分支:git branch -d new_branch
刪除分支常見錯誤:
1. 刪除當前正處於的分支
error: 無法刪除檢出於 '/Users/hanoi_ahoj/mtgit' 的分支 'new_branch'。
2. 刪除一個沒有合併的分支
error: 分支 'new_branch' 沒有完全合併。
如果您確認要刪除它,執行 'git branch -D new_branch'
合併分支:git merge new_branch
HEAD
HEAD指向的是當前分支
(HEAD保存在.git目錄下的HEAD文件裏,cat HEAD看一看)
master
master本質上指向提交
- HEAD指向當前分支
-
新建一個分支:dev
-
在dev分支上進行了一次commit
-
fast-forward(即快進,快速合併,沒有衝突)
-
如果兩個分支修改的同一個文件的同一行,在合併的時候Git是不知道以master爲準還是別的分支爲準,這時就會提示衝突,這個時候看這個文件的內容就會發現裏面的內容被Git用自己的方式標註出來了衝突的地方,需要自己手動處理衝突。解決完後使用
git add file_name
來告訴Git這個衝突已經解決了。當在master分支中解決了這一個衝突後,在dev分支中再進行合併master分支,就不會提示衝突了,而是fast-forward。
Mac/Linux下一些小技巧
優秀的工具:oh my zsh
拷貝文件cp
,移動文件mv
(也用來重命名)
當不想輸入當前命令,可以使用ctrl+c
rm -rf 文件夾名
,遞歸的刪除文件夾
ctrl+l
,相當於clear
,清屏幕
ctrl+a
,跳到當前命令的開頭,ctrl+e
,跳到當前命令的結尾
l
,相當於ls -al
,顯示當前目錄下所有文件,包括隱藏文件
ctrl+f
,向下翻頁,ctrl+b
,向上翻頁
mkdir -p test/test1/test2
,遞歸建立多個目錄
快速切換回上次的文件夾:cd -
同時執行多條命令:mkdir mydir && cd mydir
.
代表當前目錄,..
代表上一級目錄