實際開發中使用Git流程

使用Git工作的一般流程

 

目錄

使用Git工作的一般流程

獲得一個Git管理的工作區

自己初始化一個倉庫

從遠程倉庫獲得工作目錄

添加,修改,推送

分支

拉取別人的提交

處理衝突


 

獲得一個Git管理的工作區

使用Git開始工作,首先需要一個Git管理的工作區,這個工作去可以是自己init創建的,也可以是從遠程倉庫clone下來的。

自己初始化一個倉庫

## 新建一個目錄作爲工作目錄
$ mkdir git_demo   
$ cd git_demo
## 在本地初始化git倉庫
$ git init
  •  

這時,我們已經創建了一個本地倉庫,但是,一般我們和其他人共同開發一個項目,則需要添加一個遠程倉庫。現在假設我已經才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
  •  

到這裏,就創建了一個可以推送到遠程的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
  •  

添加,修改,推送

不管是自己重新創建還是從遠程倉庫clone,我們現在得到了一個可以開展工作的工作區,這個工作區被git倉庫所管理。

進行一些修改後,可以通過add, commit, push來推送到遠程倉庫

## 添加所有修改
$ git add .
## 提交修改
$ git commit -m "add some files"
## 推送到遠程倉庫
$ git push 
  •  

分支

通常情況下,當我們需要添加一個新功能的時候,是不能在主分支上直接修改的,這時,需要創建一個新的分支,等功能開發並測試完成之後,再合併到主分支。

假設我們需要新建一個臨時分支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
  •  

拉取別人的提交

在我們完成了某項功能的修改,需要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
  •  

處理衝突

當拉取協作者的提交時,很可能不同開發者修改了同一個文件的同一部分,這時候,就會出現衝突,我們需要手動解決這些衝突,再重新提交上去。

$ 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
發佈了29 篇原創文章 · 獲贊 41 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章