1. 程式人生 > >使用Git工作的一般流程

使用Git工作的一般流程

使用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