使用Git工作的一般流程
阿新 • • 發佈:2018-12-30
使用Git工作的一般流程
獲得一個Git管理的工作區
使用Git開始工作,首先需要一個Git管理的工作區,這個工作去可以是自己init建立的,也可以是從遠端倉庫clone下來的。
自己初始化一個倉庫
## 新建一個目錄作為工作目錄
$ mkdir git_demo
$ cd git_demo
## 在本地初始化git倉庫
$ git init
- 1
- 2
- 3
- 4
- 5
這時,我們已經建立了一個本地倉庫,但是,一般我們和其他人共同開發一個專案,則需要新增一個遠端倉庫。現在假設我已經才github上面建立了一個叫做git_demo的空倉庫,現在需要將其新增到本地倉庫。
## 新增一個叫origin的遠端倉庫
$ git remote add origin [email protected]:JavyZheng/git_demo.git
## 添加個README吧
$ vim README.md
$ git add README.md
$ git commit -m "first commit with README"
## 推送到遠端倉庫
$ git push -u origin master
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
到這裡,就建立了一個可以推送到遠端的git倉庫。
從遠端倉庫獲得工作目錄
大多數時候,我們沒有機會從頭init的倉庫,而是遠端倉庫已經存在,我們要參與到專案中,這時只需要將遠端倉庫clone下來就好。
## 把剛剛推送上去的倉庫clone下來
$ git clone [email protected]:JavyZheng/git_demo.git
$ cd git_demo
$ git status
## 預設遠端倉庫名為origin
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
新增,修改,推送
不管是自己重新建立還是從遠端倉庫clone,我們現在得到了一個可以開展工作的工作區,這個工作區被git倉庫所管理。
進行一些修改後,可以通過add, commit, push來推送到遠端倉庫
## 新增所有修改
$ git add .
## 提交修改
$ git commit -m "add some files"
## 推送到遠端倉庫
$ git push
- 1
- 2
- 3
- 4
- 5
- 6
分支
通常情況下,當我們需要新增一個新功能的時候,是不能在主分支上直接修改的,這時,需要建立一個新的分支,等功能開發並測試完成之後,再合併到主分支。
假設我們需要新建一個臨時分支iss1來處理一個問題。
## 新建一個iss1分支
$ git branch iss1
## 切換到iss1分支
$ git checkout iss1
Switched to branch 'iss1'
## 檢視分支,當前已經在iss1分支上面
$ git branch
* iss1
master
## 在當前分支上進行一些修改
$ echo "file3" >> file3
## 新增並提交修改到本地
$ git add file3
$ git commit -m "add file3"
## 推送到遠端,因為現在遠端還沒有iss1分支,所以需要set-upstream
## 這樣,在遠端倉庫就有了iss1分支,之後可以直接push
$ git push --set-upstream origin iss1
## iss1解決後,把修改合併會master,並刪除iss1分支
$ git checkout master
$ git merge iss1
$ git branch -d iss1
$ git push
## 刪除遠端分支
$ git push origin :iss1
To [email protected]:JavyZheng/git_demo.git
- [deleted] iss1
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
拉取別人的提交
在我們完成了某項功能的修改,需要push的遠端的時候,協作者可能已經提交了他們的修改,這時,我們需要先把最新的提交拉取下來,加入我們的修改,再重新提交上去。
$ git push
## push被駁回了,因為有其他人已經提交了更新
! [rejected] master -> master (fetch first)
error: failed to push some refs to '[email protected]:JavyZheng/git_demo.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
## 拉取遠端提交內容併合併到當前工作區
$ git pull
## 重新push到遠端
$ git push
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
處理衝突
當拉取協作者的提交時,很可能不同開發者修改了同一個檔案的同一部分,這時候,就會出現衝突,我們需要手動解決這些衝突,再重新提交上去。
$ git pull
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 5 (delta 2), reused 5 (delta 2), pack-reused 0
Unpacking objects: 100% (5/5), done.
From github.com:JavyZheng/git_demo
7d4f14a..e2e17d3 master -> origin/master
## 嘗試自動合併file1
Auto-merging file1
## 發現衝突,需要手動解決衝突
CONFLICT (content): Merge conflict in file1
Automatic merge failed; fix conflicts and then commit the result.
## 此時,git已經把可能衝突的地方都寫進了檔案
$ vim file1
## 可以看見衝突的地方
<<<<<<< HEAD
file1 + add 1
=======
file1 + del 4
>>>>>>> e2e17d311ec33700e94ce5dd694aa340920deb7c
## vim裡手動解決衝突後,add進來
$ git add file1
$ git commit -m "resolve confict in file1"
## 推送到遠端分支
$ git push