初始化庫
新建文件夾,在文件夾內執行 git init 初始化(創建)一個git庫
查看倉庫所有文件狀態
git status
查看修改了哪些文件
Innodev-E531@Innodev-E531-PC MINGW64 /d/zhangyadongIndividual/Test (master)
$ git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
(use "git push" to publish your local commits)
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
renamed: src/main/java/com/test/interceptor/MyFilter.java -> src/main/java/com/test/interceptor/IPFilter.java
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: src/main/java/com/test/interceptor/IPFilter.java
modified: src/main/java/com/test/listener/MyListener.java
modified: src/main/webapp/WEB-INF/views/ipError.jsp
modified: src/main/webapp/WEB-INF/web.xml
Untracked files:
(use "git add <file>..." to include in what will be committed)
src/test/
檢出倉庫
git clone {path}
克隆一個倉庫
創建一個本地倉庫的克隆版本:git clone /path/to/repository
克隆遠端服務器上的倉庫:git clone https://www.github.com/xxxx.git
更新
(每次開發、提交之前建議都要更新遠端倉庫中的最新版本,避免引起衝突)
git pull
將遠端倉庫的內容更新到本地倉庫,也可以理解爲在本地的Workspace中獲取(fetch)併合並(merge)遠端倉庫的改動
添加與提交
git add {fileName}
添加單一文件
git add .(git add --all)
添加所有文件(添加到本地緩存區)
git commit -m "{message}"
提交上一步(git add)修改的文件到本地倉庫(注意是本地倉庫,此時並沒有和遠端服務器進行交互)
git commit --verbose
verbose參數會列出diff的結果
替換本地改動(還原)
git checkout -- {filename}
將工作目錄中的文件還原爲HEAD中的最新內容(已添加到緩存區的改動,以及新文件,都不受影響)
如果想丟棄所有本地的改動與提交,可以到服務器上獲取最新的版本並將本地主分支指向它(同步)
git fetch origin
git reset --hard origin/master
回滾commit
git log
查看commit記錄
commit 8bb21d443c80f26fe16c0ce8119631b92fb044f0
Author: yadong.zhang <yadong.zhang0415@gamil.com>
Date: Wed Aug 17 11:04:11 2016 +0800
add Flow Chart
commit 1cb89020f7f0de4cd37a38249cb3264e9be100e3
Author: yadong.zhang <yadong.zhang0415@gamil.com>
Date: Wed Aug 17 10:51:12 2016 +0800
小改動
commit cbd5a1010215c37db960ca0ba85f150edb3ac8fb
Author: yadong.zhang <yadong.zhang0415@gamil.com>
Date: Wed Aug 17 09:13:59 2016 +0800
優化代碼
commit a0f2afa7cf8de5a508800535ad2a95363a21094d
Author: yadong.zhang <yadong.zhang0415@gamil.com>
Date: Wed Aug 10 18:20:05 2016 +0800
刪除不必要的代碼
commit 4b222558ddfc18fb7e19af21711cf097407e081a
Author: yadong.zhang <yadong.zhang0415@gamil.com>
Date: Wed Aug 10 10:53:45 2016 +0800
update
git reset --hard commit_id
回滾到指定提交點
Innodev-E531@Innodev-E531-PC MINGW64 /d/zhangyadongIndividual/Test/doc (master)
$ git reset --hard 1cb89020f7f0de4cd37a38249cb3264e9be100e3
HEAD is now at 1cb8902 小改動
推送本地改動到遠程服務器
git push -u origin master
將commit到本地倉庫中的文件推送到遠程服務器(master是默認分支,可以換成你想要推送的任何分支)
git push --force origin myfeature
強行推送
如果沒有執行clone操作克隆遠端倉庫,但是還想將自己本地的倉庫推送到遠程服務器,可以使用:
git romote add origin {server}
git工作流
你的本地倉庫都包含三部分:第一是你的工作目錄(實際文件存放的地址);第二是緩存區(Index),如名字所表示的,它只是臨時保存本地的改動;第三就是HEAD,指向你最近一次提交後的結果。
分支
分支是用來將特性開發絕緣開來的,通俗點講就相當於生產線上的代碼和測試線上的代碼絕對不會存在於同一個分支(合併另算)。在github上創建倉庫的時候,master是默認的分支。在平常開發中,一般來說都應該是在其他子分支上進行開發,完成後纔會將它們合併到主分支上。
git checkout -b feature_x
創建feature_x分支並且切到feature_x分支上
git checkout master
切到主分支
git branch -d feature_x
刪除feature_x分支
新建的分支別人是看不到的,除非推送到遠端倉庫:git push origin {branch}
合併
git diff {source_branch} {target_branch}
合併可能會造成衝突!改動之前,可以先查看下兩端的文件差異
git merge {branch}
合併其他分支到當前分支
兩種情況下,git都會嘗試去自動合併改動,但並不是每次自動合併都會成功,也可能會導致衝突(多人同時操作一個文件)。有衝突發生時就需要手動修改這些文件以解決衝突。修改完後還需要執行如下命令將它們標記爲合併成功:git add {filename}