iOS開發-git使用

首先確定電腦安裝了git

輸入git
會產生提示:

如果沒有安裝,那么就網上搜索下載完成安裝.

可以使用命令行安裝,也可以下載工具包安裝

確定文件保存在自己的倉庫哪個地方

命令行:

cd (不會路徑,把文件拖動到這里)

添加文件到暫緩區

針對單一文件的添加:git add (文件名)

如果提示密碼郵箱

global的作用

配置全局的用戶名和密碼— 其他地方可以不配置
git config —global user.name “why"
git config —global user.emailwhy@163.com"
正對整個項目的文件添加 git add .

將暫緩區的文件添加到分支

git commit -m "文件注釋,也就是這些添加你要做什么"

查看目前暫緩區的狀態

git status

回到歷史中

穿梭前,用git log可以查看提交歷史,以便確定要回退到哪個版本。

回到未來

要重返未來,用git reflog查看命令歷史,以便確定要回到未來的哪個版本。
commit_id。

版本回退:

git reset --hard (版本號)

HEAD指向的版本就是當前版本,因此,Git允許我們在版本的歷史之間穿梭,使用命令git reset --hard

其他常用的git 命令

你做了修改后,(還沒有對他進行git add .操作)放棄修改

git checkout -- file

例如:(對那個文件放棄修改)

git checkout -- readme.txt

撤銷已經存在暫緩區的文件

git reset HEAD file可以把暫存區的修改撤銷掉(unstage)

假設你改錯了東西,還從暫存區提交到了版本庫,直接使用上面的回到歷史中

一般團隊開發:要在分支進行

git checkout -b dev

這個命令加上 -b 參數表示創建并切換相當于

git branch dev
git checkout dev

查看當前分支

git branch

這里在dev分支修改文件后,提交(此處修改后的文件提交上去只是在dev分支上)

切換回主分支

git checkout master

git merge:合并指定分支到當前分支

git merge dev

刪除dev分支

git branch -d dev

查看branch

git branch

上述分支主支一覽

Git鼓勵大量使用分支

查看分支:git branch

創建分支:git branch <name>

切換分支:git checkout <name>

創建+切換分支:git checkout -b <name>

合并某分支到當前分支:git merge <name>

通常,合并分支時,如果可能,Git會用Fast forward模式,但這種模式下,刪除分支后,會丟掉分支信息

合并分支時,加上--no-ff參數就可以用普通模式合并,合并后的歷史有分支,能看出來曾經做過合并,而fast forward合并就看不出來曾經做過合并
git merge --no-ff -m "merge with no-ff" dev

刪除分支:git branch -d <name>

·1.推送分支 (這里origin是git默認的主分支)
git push origin master

·2.推送其他分支
git push origin dev

例子簡介

多人協作的工作模式通常是這樣:

首先,可以試圖用git push origin branch-name推送自己的修改;

如果推送失敗,則因為遠程分支比你的本地更新,需要先用git pull試圖合并;

如果合并有沖突,則解決沖突,并在本地提交;

沒有沖突或者解決掉沖突后,再用git push origin branch-name推送就能成功!

如果git pull提示“no tracking information”,則說明本地分支和遠程分支的鏈接關系沒有創建,用命令git branch --set-upstream branch-name origin/branch-name。

這就是多人協作的工作模式,一旦熟悉了,就非常簡單。

多人協作時,大家都會往master和dev分支上推送各自的修改。

現在,模擬一個你的小伙伴,可以在另一臺電腦(注意要把SSH Key添加到GitHub)或者同一臺電腦的另一個目錄下克隆:

$ git clone git@github.com:suny/learngit.git

Cloning into 'learngit'...

remote: Counting objects: 46, done.

remote: Compressing objects: 100% (26/26), done.

remote: Total 46 (delta 16), reused 45 (delta 15)

Receiving objects: 100% (46/46), 15.69 KiB | 6 KiB/s, done.

Resolving deltas: 100% (16/16), done.

當你的小伙伴從遠程庫clone時,默認情況下,你的小伙伴只能看到本地的master分支。不信可以用git branch命令看看:

git branch

`* mas

現在,你的小伙伴要在dev分支上開發,就必須創建遠程origin的dev分支到本地,于是他用這個命令創建本地dev分支:

git checkout -b dev origin/dev

現在,他就可以在dev上繼續修改,然后,時不時地把dev分支push到遠程:

git commit -m "add /usr/bin/env"

[dev 291bea8] add /usr/bin/env

3 file changed, 1 insertion(+)

git push origin dev

Counting objects: 5, done.

Delta compression using up to 4 threads.

Compressing objects: 100% (3/3), done.

Writing objects: 100% (3/3), 359 bytes, done.

Total 3 (delta 0), reused 0 (delta 0)

To git@github.com:suny/learngit.git
fc38031..291bea8 dev -> dev

你的小伙伴已經向origin/dev分支推送了他的提交,而碰巧你也對同樣的文件作了修改,并試圖推送:
git add hello.pygi

git commit -m "add coding: utf-8"

[dev bd6ae48] add coding: utf-8

3 file changed, 1 insertion(+)

git push origin dev

To git@github.com:suny/learngit.git

! [rejected] dev -> dev (non-fast-forward)
error: failed to push some refs to 'git@github.com:suny/learngit.git'

hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
hint: before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

推送失敗,因為你的小伙伴的最新提交和你試圖推送的提交有沖突,解決辦法也很簡單,Git已經提示我們,先用git pull把最新的提交從origin/dev抓下來,然后,在本地合并,解決沖突,再推送:
git pull

remote: Counting objects: 5, done.

remote: Compressing objects: 100% (3/3), done.

remote: Total 3 (delta 0), reused 3 (delta 0)

Unpacking objects: 100% (4/4), done.

From github.com:michaelliao/learngit

fc38031..291bea8 dev -> origin/dev

There is no tracking information for the current branch. Please specify which branch you want to merge with. See git-pull(1) for details

git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

git branch --set-upstream dev origin/<branch>

git pull也失敗了,原因是沒有指定本地dev分支與遠程origin/dev分支的鏈接,根據提示,設置dev和origin/dev的鏈接:

多人協作

當你從遠程倉庫克隆時,實際上Git自動把本地的master分支和遠程的master分支對應起來了,并且,遠程倉庫的默認名稱是origin。

要查看遠程庫的信息,用git remote:

git remote

origin

或者,用git remote -v顯示更詳細的信息:

git remote -v

origin git@github.com:suny/learngit.git (fetch)

origin git@github.com:suny/learngit.git (push)

上面顯示了可以抓取和推送的origin的地址。如果沒有推送權限,就看不到push的地址。

推送分支

推送分支,就是把該分支上的所有本地提交推送到遠程庫。推送時,要指定本地分支,這樣,Git就會把該分支推送到遠程庫對應的遠程分支上:

git push origin master

如果要推送其他分支,比如dev,就改成:

git push origin dev

master分支是主分支,因此要時刻與遠程同步;

dev分支是開發分支,團隊所有成員都需要在上面工作,所以也需要與遠程同步;

抓取分支

多人協作時,大家都會往master和dev分支上推送各自的修改。

現在,模擬一個你的小伙伴,可以在另一臺電腦(注意要把SSH Key添加到GitHub)或者同一臺電腦的另一個目錄下克隆:

git clone git@github.com:suny/learngit.git

Cloning into 'learngit'...

remote: Counting objects: 46, done.

remote: Compressing objects: 100% (20/20), done.

remote: Total 46 (delta 16), reused 45 (delta 15)

Receiving objects: 100% (46/46), 105.69 KiB | 25 KiB/s, done.

Resolving deltas: 100% (19/19), done.

當你的小伙伴從遠程庫clone時,默認情況下,你的小伙伴只能看到本地的master分支。不信可以用git branch命令看看:

git branch

  • master

現在,你的小伙伴要在dev分支上開發,就必須創建遠程origin的dev分支到本地,于是他用這個命令創建本地dev分支:

git checkout -b dev origin/dev

現在,他就可以在dev上繼續修改,然后,時不時地把dev分支push到遠程:

git commit -m "add /usr/bin/env"

[dev 291bea8] add /usr/bin/env

1 file changed, 1 insertion(+)

git push origin dev

Counting objects: 5, done.

Delta compression using up to 4 threads.

Compressing objects: 100% (2/2), done.

Writing objects: 100% (3/3), 349 bytes, done.

Total 3 (delta 0), reused 0 (delta 0)

To git@github.com:suny/learngit.git fc38031..291bea8 dev -> dev

你的小伙伴已經向origin/dev分支推送了他的提交,而碰巧你也對同樣的文件作了修改,并試圖推送:

$git add hello.py
$ git commit -m "add coding: utf-8"
[dev bd6ae48] add coding: utf-8
1 file changed, 1 insertion(+)
$ git push origin dev
To git@github.com:suny/learngit.git
! [rejected] dev -> dev (non-fast-forward)
error: failed to push some refs to 'git@github.com:suny/learngit.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
hint: before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

推送失敗,因為你的小伙伴的最新提交和你試圖推送的提交有沖突,解決辦法也很簡單,Git已經提示我們,先用git pull把最新的提交從origin/dev抓下來,然后,在本地合并,解決沖突,再推送:

git pull

remote: Counting objects: 5, done.

remote: Compressing objects: 100% (2/2), done.

remote: Total 3 (delta 0), reused 3 (delta 0)

Unpacking objects: 100% (3/3), done.

From github.com:suny/learngit

fc38031..291bea8 dev -> origin/dev

There is no tracking information for the current branch.

Please specify which branch you want to merge with.

See git-pull(1) for details

git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

git branch --set-upstream dev origin/<branch>

git pull也失敗了,原因是沒有指定本地dev分支與遠程origin/dev分支的鏈接,根據提示,設置dev和origin/dev的鏈接:

git branch --set-upstream dev origin/dev

Branch dev set up to track remote branch dev from origin.

再pull:

$
git pull

Auto-merging hello.py

CONFLICT (content): Merge conflict in hello.py

Automatic merge failed; fix conflicts and then commit the result.

這回git pull成功,但是合并有沖突,需要手動解決,解決的方法和分支管理中的解決沖突完全一樣。解決后,提交,再push:

$ git commit -m "merge & fix hello.py"
[dev adca45d] merge & fix hello.py
$ git push origin dev
Counting objects: 10, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (9/9), 747 bytes, done.
Total 6 (delta 0), reused 0 (delta 0)
To git@github.com:suny/learngit.git
   291bea8..adca45d  dev -> dev
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容