之前參照莫煩的Git教程整理過一遍Git總結,后來使用Git的時候發現還是有很多操作一知半解,所以再次梳理下Git使用
安裝Git
windows上使用Git,可以從Git官網直接下載安裝程序,選擇默認安裝即可
安裝完成后,開始菜單-->Git-->Git Bash,打開后會彈出一個命令行窗口,就說明Git安裝成功
- 安裝完成之后需要進行name和email的配置,更好的記錄每一次修改的修改人,--global這個參數表示這是個全局的配置,這臺機器上的所有Git倉庫都會使用這個配置
git config --global user.name "NAME"
git config --global user.email "email@test.com"
創建Git版本庫
版本庫可以簡單理解為一個目錄,這個目錄下的所有文件都可以被Git管理起來,每個文件的修改刪除,Git都能跟蹤,以便查看修改記錄或還原到某個時刻
- 要創建一個版本庫,首先選擇一個目錄,也可創建一個空目錄
mkdir learn_git
cd learn_git
pwd
/e/learn_git
- 通過git init 命令把這個目錄變為git可管理的倉庫
$ git init
Initialized empty Git repository in E:/git_learn/.git/
可以看到創建了一個空的git倉庫,并且當前目錄下多了一個.git目錄這個目錄是git用來跟蹤管理版本庫的
把文件添加到版本庫
在當前目錄下創建一個readme.txt文件,寫入內容
vi readme.txt
Git is a version control system
Git is free software
- 用
git add
命令將文件添加到暫存區
$ git add readme.txt
沒有任何輸出,則表示添加暫存區成功
- 用
git commit
命令將文件從暫存區提交到版本庫
$ git commit -m "wrote a readme file"
1 file changed, 2 insertions(+)
create mode 100644 readme.txt
git commit
命令的-m
參數后面輸入的是本次提交的說明
git commit
命令執行完成輸出會提示1個文件被改動(新創建readme.txt),插入了2行(readme.txt文件有2行)
git commit
命令一次可以提交多個文件,可以多次使用git add
不同文件
git status
git status
命令可以查看當前倉庫的狀態(哪些有修改的,哪些修改文件在暫存區待提交)
修改readme.txt文件內容
$ git status
On branch master
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: readme.txt
no changes added to commit (use "git add" and/or "git commit -a")
輸出信息顯示
在master分支
沒有提交的修改:
使用git add <file>
將文件添加到暫存區
使用git checkout -- <file>
丟棄當前工作目錄中的修改
被修改文件:readme.txt
還沒有準備提交的修改
git diff
git diff
用來查看工作區和暫存區的不同
$ git diff
diff --git a/readme.txt b/readme.txt
index f7249b8..2fdf0c4 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,2 @@
-Git is a version control system
+Git is a distributed version control system
Git is free software
可以看到兩次的不同
-Git is a version control system
- 表示刪除了這部分內容
+Git is a distributed version control system
+ 表示添加了這部分內容
-
git diff --cached file
用于暫存區和分支master不同的比較 -
git diff HEAD -- file
用于工作區和分支master不同的比較 - 使用
git add
添加修改到暫存區,再次使用git status
查看版本庫狀態
$ git add readme.txt
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: readme.txt
可以看到輸出
在master分支上
將要被提交的修改:
使用git reset HEAD <file>
取消已經進入暫存區的文件
修改文件:readme.txt
- 使用
git commit
命令提交修改到版本庫,再使用git status
查看倉庫狀態
$ git commit -m "add distributed"
[master 015cd95] add distributed
1 file changed, 1 insertion(+), 1 deletion(-)
$ git status
On branch master
nothing to commit, working directory clean
可以看到輸出當前沒有需要提交的修改,工作目錄是干凈的
git log
使用git log 命令可以顯示之前提交到版本庫的記錄,包括commit的id號、提交人、日期、提交說明
$ git log
commit 13cd2aa93fc97391a81fc28bf5319e86342ee2c1
Author: tyq <email@test.com>
Date: Thu Jan 4 18:52:53 2018 +0800
append GPL
commit 015cd9545760909630f59e612020f59d52d8cb76
Author: tyq <email@test.com>
Date: Thu Jan 4 18:46:38 2018 +0800
add distributed
commit f5302fbafba412e62b22f7bdae20437cd27a0eac
Author: tyq <email@test.com>
Date: Thu Jan 4 17:52:44 2018 +0800
wrote a readme file
如果覺的輸出的內容太多,想要簡潔一些,可以使用命令git log --oneline
$ git log --oneline
13cd2aa append GPL
015cd95 add distributed
f5302fb wrote a readme file
git log --oneline
顯示對應提交的id號和說明
回到過去
在GIt中用HEAD
表示當前版本也就是commit id為13cd2aa
,上個版本表示為HEAD^
,上上個版本表示為HEAD^^
,依次類推,也可以用commit id號表示對應的版本
想把‘append GPL’回退到‘add distributed’可以使用git reset
命令
$ git reset --hard HEAD^
HEAD is now at 015cd95 add distributed
查看readme.txt文件,果然回退到了'add distributed'版本
$ cat readme.txt
Git is a distributed version control system
Git is free software
Git版本的回退速度非常快,因為Git內部有個指向當前版本的指針,當回退版本的時候Git僅僅把HEAD從指向append GPL
改為指向add distributed
,順便把工作區的文件更新了,所以讓HEAD指向哪個版本號,就把當前版本定位在哪
使用git log --oneline
查看當前版本記錄
$ git log --oneline
015cd95 add distributed
f5302fb wrote a readme file
可以看到只顯示了2個版本,現在想要回到append GPL
的版本時,可以有2種方式
第一種, 往上翻找到append GPL
的commit id號,使用命令git reset --hard id號
回到append GPL
版本
如果之前的窗口關掉了commit id號往上翻找不到了可以使用下面的方法
第二種,使用git reflog
,這個命令用來記錄你的每一次執行的命令
$ git reflog
015cd95 HEAD@{0}: reset: moving to HEAD^
13cd2aa HEAD@{1}: commit: append GPL
015cd95 HEAD@{2}: commit: add distributed
f5302fb HEAD@{3}: commit (initial): wrote a readme file
可以看到append GPL
的commit id號為13cd2aa
,使用git reset --hard 13cd2aa
回到append GPL
版本
工作區和暫存區
- 工作區
工作區就是電腦里面能看到的目錄,比如之前創建的learn_git
文件夾就是一個工作區 - 版本庫
工作區中有一個隱藏的.git目錄,這個不算是工作區,而是Git的版本庫
Git版本庫中存了很多東西,其中最重要的是稱為stage
的暫存區,還有Git為我們自動創建的第一個分支master
,以及指向master
的一個指針HEAD
把一個文件向版本庫中添加時,是分兩步執行的
1.使用git add
命令把文件的修改添加進暫存區
2.使用git commit
將暫存區的所有內容提交到當前分支
Git跟蹤管理的是修改
每次修改如果不add
到暫存區,就不會加入到commit
中
撤銷修改
- 文件未添加到暫存區
git checkout --file
命令用與將文件在工作區的修改撤銷掉 - 文件添加到暫存區
git reset HEAD file
命令用于將暫存區的文件修改回退到工作區,再使用git checkout --file
命令即可將工作區的修改撤銷掉。這里的HEAD
是指當前的版本庫,還可以使用git reset 版本號 file
回退到某個特定的文件 - 文件已提交至版本庫,未推送至遠程版本庫
參照之前的回退版本操作,使用git reset --hard id號
命令
刪除文件
- 刪除未添加到暫存區的文件
rm file
直接刪除即可
$ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
test.txt
nothing added to commit but untracked files present (use "git add" to track)
$ rm test.txt
$ git status
On branch master
nothing to commit, working directory clean
可以看到test.txt已成功刪除
- 刪除已添加到暫存區的文件,未提交到版本庫
分兩步進行
1.rm file
刪除工作區文件
2.git add file
將修改添加到暫存區
這樣就成功刪除了文件 - 刪除已經提交到版本庫的文件
1.rm file
首先刪除工作區的文件
2.git add file
將工作區的修改添加到暫存區
3.git commit -m "remove file"
將修改提交至版本庫
上面的1、2兩步可以直接使用git rm file
這一條命令代替,git rm
表示將工作區和暫存區的文件都刪除掉
添加遠程庫
當本地已經有了一個git倉庫,想要創建一個遠程庫時,可以先關聯,然后進行推送
- 要關聯一個遠程庫,使用下面的命令
git remote add origin git@server-name:path/repo-name.git
添加后遠程庫的名字就叫origin
這是Git的默認叫法,也可以改成別的 - 關聯后使用命令
git push -u origin master
第一次推送master分支的所有內容,加了-u
參數Git不但會把本地的master分支內容推送到遠程新的master分支還會把本地的master分支和遠程的master分支關聯起來,在以后推送或者拉取時就可以簡化命令
此后就可以每次使用git push origin master
推送最新的修改至遠程庫 - 使用
git remote -v
命令可以查看本地關聯的遠程倉庫origin
的地址
如果從零開始,先創建遠程庫,再從遠程庫進行克隆
- 創建遠程庫,在github頁面進行創建
- 使用命令
git clone
克隆一個本地庫
git clone git@server-name:path/repo-name.git
Git支持hhtps、ssh等多種協議
創建與合并分支
Git中的HEAD
實際上執行的是當前的分支,每個分支中都有一個指針指向當前的提交
- 首先創建
dev
分支,然后切換到dev
分支
$ git checkout -b dev
Switched to a new branch 'dev'
git checkout
加上-b
參數表示創建并切換,相當與以下2條命令
$ git branch dev
$ git checkout dev
Switched to branch 'dev'
然后用git branch
命令查看當前分支
$ git branch
* dev
master
git branch
命令會列出所有的分支,當前的分支會用一個*
標出
現在可以在dev分支上進行正常的修改提交
$ vi readme.txt
$ git add readme.txt
$ git commit -m "branch test"
[dev 6f978d0] branch test
1 file changed, 1 insertion(+)
現在dev
分支上的工作完成,我們就可以切換回master
分支
$ git checkout master
Switched to branch 'master'
切換回master
分支后會看到剛才提交的修改不見了,因為剛才的修改在dev
分支上,而master分支此刻的提交點并沒有變
- 現在把
dev
上的工作成果合并到master
上
$ git merge dev
Updating eb42341..6f978d0
Fast-forward
readme.txt | 1 +
1 file changed, 1 insertion(+)
git merge
命令用于合并指定分支到當前分支。合并后查看readme.txt文件可以看到和dev
分支上最新提交的是一樣的
上面的輸出中有一行Fast-forward
,表示這是合并是“快進模式”,也就是直接把master
指向dev
的當前提交,所有合并速度非常快
- 合并后就可以刪除
dev
分支了
$ git branch -d dev
Deleted branch dev (was 6f978d0).
$ git branch
* master
解決沖突
準備新的feature1分支進行開發
$ git checkout -b feature1
Switched to a new branch 'feature1'
修改readme.txt文件,并提交
$ vi readme.txt
$ git add readme.txt
$ git commit -m "AND simple"
[feature1 029a3b2] AND simple
1 file changed, 1 insertion(+), 1 deletion(-)
切換到master
分支,修改readme.txt并提交
$ git checkout master
Switched to branch 'master'
$ vi readme.txt
$ git add readme.txt
$ git commit -m "& simple"
[master 9243e69] & simple
1 file changed, 1 insertion(+), 1 deletion(-)
- 進行合并
$ git merge feature1
Auto-merging readme.txt
CONFLICT (content): Merge conflict in readme.txt
Automatic merge failed; fix conflicts and then commit the result.
從輸出可以看到Automatic merge failed; fix conflicts and then commit the result.
合并失敗了,Git讓先解決沖突然后在提交結果
使用git status
命令也可以告訴我們沖突的文件
$ git status
On branch master
You have unmerged paths.
(fix conflicts and run "git commit")
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: readme.txt
no changes added to commit (use "git add" and/or "git commit -a")
直接vi
查看readme.txt
$ vi readme.txt
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.
<<<<<<< HEAD
Creating a new branch is quick & simple.
=======
Creating a new branch is quick AND simple.
>>>>>>> feature1
可以看到Git用<<<<<< ====== >>>>>>標記出了不同分支的內容
<<<<<<< HEAD
Creating a new branch is quick & simple.
表示當前master
分支的內容
Creating a new branch is quick AND simple.
>>>>>>> feature1
表示feature1
分支的內容
在此模式下修改這個文件為想要的內容,然后保存再提交
$ git add readme.txt
$ git commit -m "conflict fixed"
[master 7ff0a70] conflict fixed
可以看到輸出提示沖突已解決,查看readme.txt內容為剛剛保存的內容
用帶參數的git log
命令可以查看當前的分支合并情況
$ git log --graph --pretty=oneline --abbrev-commit
* 7ff0a70 conflict fixed
|\
| * 029a3b2 AND simple
* | 9243e69 & simple
|/
* 6f978d0 branch test
* eb42341 remove test.txt
* 28abff3 add test.txt
* 665e753 remove test.txt
* 232dc37 add text.txt
最后刪除分支
$ git branch -d feature1
Deleted branch feature1 (was 75a857c).
$ git push origin --delete feature1 #刪除遠程庫上的分支
- 使用
git branch -D <name>
強行刪除一個未合并的分支
$ git branch -d dev #dev分支未合并,所以刪除失敗
error: The branch 'dev' is not fully merged.
If you are sure you want to delete it, run 'git branch -D dev'.
$ git branch -D dev # 強行刪除
Deleted branch dev (was e32273c).
分支管理策略
通常分支合并時,如果可能,Git會用Fast forword
模式,在這種模式下刪除分支,會丟掉分支信息
$ git log --graph --pretty=oneline --abbrev-commit
* 6106360 test fast forword
* 7ff0a70 conflict fixed
像上面的test fast forword
不會保留dev分支信息
git merge
命令加上--no-ff
參數會禁用Fast forword
模式,Git會在merge時生成一個新的commit,這樣從分支歷史上就可以看出分支信息
- 創建一個新的
dev
分支,修改readme.txt,提交修改內容,切換至master
分支
$ git checkout -b dev
Switched to a new branch 'dev'
$ vi readme.txt
$ git add readme.txt
$ git commit -m "test --no--ff"
[dev 8de91d1] test --no--ff
1 file changed, 1 insertion(+), 1 deletion(-)
$ git checkout master
Switched to branch 'master'
使用git merge --no-ff
命令合并
$ git merge --no-ff -m "merge with no-ff" dev
Merge made by the 'recursive' strategy.
readme.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
這里的-m
參數相當與commit 時候的說明。因為會生成一個新的commit所以使用-m
參數添加提交說明
使用git log
查看提交歷史
$ git log --graph --pretty=oneline --abbrev-commit
* 4286431 merge with no-ff
|\
| * 8de91d1 test --no--ff
|/
* 6106360 test fast forword
* 7ff0a70 conflict fixed
可以看到這里和上一次merge的test fast forword
不同,顯示了分支上test--no-ff
的提交,并創建了一個新的commit記錄
Fast forword
模式相當與直接將master
提交指向了dev
提交,將HEAD
指向master
Git stash
正在dev
分支上工作,還沒有提交,突然需要解決線上bug,這個時候就需要將dev
分支上的內容儲藏起來,等以后恢復現場再使用,可以使用git stash
命令
$ vi readme.txt
$ git status
On branch dev
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: readme.txt
no changes added to commit (use "git add" and/or "git commit -a")
可以看到當前dev
分支正在工作
$ git stash
Saved working directory and index state WIP on dev: 8de91d1 test --no--ff
HEAD is now at 8de91d1 test --no--ff
$ git status
On branch dev
nothing to commit, working directory clean
使用git stash
命令將當前工作儲藏起來,可以看到現在當前dev
分支是干凈的
使用git stash list
命令可以查看儲藏的列表
$ git stash list
stash@{0}: WIP on dev: 8de91d1 test --no--ff
可以看到工作現場還在GIt把它存儲在某個地方了
想要恢復有2中方法
1.使用git stash apply
恢復,但是恢復后stash內容不會刪除,需要使用git stash drop
來刪除
$ git stash apply
On branch dev
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: readme.txt
no changes added to commit (use "git add" and/or "git commit -a")
$ git stash list
stash@{0}: WIP on dev: 8de91d1 test --no--ff
$ git stash drop
Dropped refs/stash@{0} (e83c20f2d39c1b48e25108923f4f7013e3855ed4)
$ git stash list
2.使用git stash pop
恢復的同時把stash
的內容也刪了
$ git stash pop
On branch dev
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: readme.txt
no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (f94abd78b7ae06ada2581a2b92e63bc74c1fd164)
可以多次stash
,然后使用git stash apply stash@{0}
,恢復指定的stash
- 這里說明下為什么要使用
git stash
,當在dev
分支上有沒有提交的內容,直接切換到master
時,會發現dev
上沒有提交的內容,在master
中也會存在dev
分支上的修改,所以這時候就需要用stash
了
git remote
要查看遠程庫的信息,用git remote
$ git remote
origin
可以看到遠程倉庫的默認名稱是origin
用git remote -v
可以查看更詳細的信息
$ git remote -v
origin https://github.com/tangxq/test.git (fetch)
origin https://github.com/tangxq/test.git (push)
上面顯示了可以抓取和推送的遠程地址,如果沒有推送權限就看不到push
的地址
推送分支
推送分支,就是把該分支上所有本地提交推送到遠程庫,推送時,要指定本地分支,這樣Git就會把該分支推送到遠程庫對應的遠程分支上
$ git push origin master #推送master分支至遠程庫的master分支上
$ git push origin dev # 推送dev分支到遠程庫dev分支,遠程庫沒有dev分支會自動創建
抓取分支
當clone一個項目時,默認只會clone下來master
分支,例如想要抓取遠程庫的dev
分支,就必須創建遠程的origin
的dev
分支到本地,可以使用如下命令
$ git checkout -b dev origin/dev
Branch dev set up to track remote branch dev from origin.
Switched to a new branch 'dev'
這樣本地創建的dev
分支就與遠程庫的dev
分支相對應了
多人協作
- 當在
dev
分支上工作完成準備推送到遠程dev
分支時,可以會出現下面的情況
$ git push origin dev
To https://github.com/tangxq/test.git
! [rejected] dev -> dev (fetch first)
error: failed to push some refs to 'https://github.com/tangxq/test.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.
推送失敗,從提示信息可以看到是因為本次提交的推送和遠程庫中的內容有沖突(原因是別的小伙伴修改了同一個文件并且已經提交至遠程dev
分支),GIt已經提示我們先用git pull 把最新的提交抓取下來,在本地合并沖突提交,再推送
- 第一步,先用
git pull
把最新的提交抓取下來
$ git pull origin dev
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
From https://github.com/tangxq/test
* branch dev -> FETCH_HEAD
ee45e18..ae94d9c dev -> origin/dev
Auto-merging test1.txt
CONFLICT (content): Merge conflict in test1.txt
Automatic merge failed; fix conflicts and then commit the result.
這里也可以使用另一種方法,先使用git branch --set-upstream dev origin/dev
命令將本地的dev
分支與遠程dev
分支關聯,然后再使用git pull
命令
- 第二步,合并沖突,并提交至版本庫
1.首先使用git status
查看發生沖突的文件
On branch dev
Your branch and 'origin/dev' have diverged,
and have 1 and 1 different commits each, respectively.
(use "git pull" to merge the remote branch into yours)
You have unmerged paths.
(fix conflicts and run "git commit")
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: test1.txt
Untracked files:
(use "git add <file>..." to include in what will be committed)
logs/
test.txt
no changes added to commit (use "git add" and/or "git commit -a")
2.使用vi
命令編輯解決沖突
$ vi test1.txt
3.提交修改
$ git add test1.txt
$ git commit -m "merge & fixed test1.txt"
[dev 2cc8eb9] merge & fixed test1.txt
- 第三步,在用
git push
命令推送至遠程版本庫
$ git push origin dev
Counting objects: 4, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 410 bytes | 0 bytes/s, done.
Total 4 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), done.
To https://github.com/tangxq/test.git
ae94d9c..2cc8eb9 dev -> dev
標簽管理
發布一個版本時,通常會先在版本庫中打一個標簽(tag),這樣就確定了打標簽時刻的版本,tag相當與是當前commit id的一個指針,是全局的,和分支沒有關系
使用git tag name
命令在git中打標簽
$ git branch
* dev
master
$ git tag v1.0
可以使用git tag
命令查看所有標簽
$ git tag
v1.0
默認標簽都是打在最新的commit id上,如果要在指定的commit id上打標簽,使用git tag name id號
即可
使用git log
命令列出所有的commit id
2cc8eb9 merge & fixed test1.txt
f00abb4 add hehe
ae94d9c edit test1.txt
ee45e18 Merge tag 'v1.0' of https://github.com/xxx/test into dev
454eb54 write dev dev1
64f1c6c add write dev1
e3fef54 add write dev
606b1dc add test1
比如要對add hehe
這個commit打tag,使用如下命令即可
$ git tag v0.9 f00abb
使用git tag命令查看tag列表
$ git tag
v0.9
v1.0
標簽不是按照時間順序列出的,而是按照字母順序列出。
可以使用git show tagname
查看tag詳細信息
$ git show v0.9
commit f00abb43d5a68dae01b73978657b964353baabb1
Author: tyq <tangyaqiang@huimin100.cn>
Date: Sat Jan 6 11:22:58 2018 +0800
add hehe
diff --git a/test1.txt b/test1.txt
index 5ad28e2..844e587 100644
--- a/test1.txt
+++ b/test1.txt
@@ -1 +1,2 @@
-haha
+haha.
+hehe
還可以創建帶有說明的標簽,-a
指定標簽名-m
指定說明文字
$ git tag -a v0.8 -m "version 0.8 released" ee45e
使用git show tagname
命令可以看到文字說明
$ git show v0.8
tag v0.8
Tagger: tyq <tangyaqiang@huimin100.cn>
Date: Sat Jan 6 14:58:43 2018 +0800
version 0.8 released
commit ee45e18527440d7ba9e72a2ad8240cb80306a4a9
Merge: 454eb54 6229764
Author: tyq <tyq@email.com>
Date: Thu Jun 29 11:24:57 2017 +0800
Merge tag 'v1.0' of https://github.com/xxx/test into dev
操作標簽
如果標簽打錯了,也可以刪除
$ git tag -d v0.8
Deleted tag 'v0.8' (was 4d86fe9)
如果想要推送某個標簽到遠程可以使用git push origin tagname
$ git push origin v0.9
Total 0 (delta 0), reused 0 (delta 0)
To https://github.com/xxx/test.git
* [new tag] v0.9 -> v0.9
或者一次性推送全部尚未推送到遠程的標簽
$ git push origin --tags
Counting objects: 1, done.
Writing objects: 100% (1/1), 554 bytes, done.
Total 1 (delta 0), reused 0 (delta 0)
To https://github.com/xxx/test.git
* [new tag] v0.2 -> v0.2
* [new tag] v0.9 -> v0.9
如果想要拉取遠程庫中的tag,使用git pull
$ git pull
From https://github.com/tangxq/test
* [new tag] v1.0 -> v1.0
Already up-to-date.
如果tag已經推送到遠程倉庫刪除,需要2步
1.首先刪除本地的tag
$ git tag -d v0.8
Deleted tag 'v0.8' (was 4d86fe9)
2.刪除遠程倉庫中的tag
$ git push origin :refs/tags/v.08
To https://github.com/tangxq/test.git
- [deleted] v0.8
- git 常用命令
# git 拉取遠程指定的分支并關聯
git checkout -b 本地分支名 origin/遠程分支名
# 更改關聯本地分支和遠程的分支
git branch --set-upstream-to origin/遠程分支名 本地分支名
# 提交當前分支的內容到遠程對應的分支
git push origin HEAD: 遠程分支名
# 強制提交當前分支的內容到遠程對應的分支(慎用)
git push origin HEAD: 遠程分支名 --force
# 撤銷某次操作,此次操作的之前和之后的commit和history都會保留,并且把這次撤銷
git revert HEAD #撤銷前一次commit
git revert HEAD^ #撤銷前前一次commit
git revert commitId #依據commitId撤銷commit
# git revert和git reset區別:git revert增加head指針,git reset 修改指針位置到某次commit
# 指定git賬號clone某個倉庫地址
git clone http://username@xxx.xxx.com/xx-xxx/xxx.git
#撤銷工作區所有文件修改
git checkout -f HEAD
#pull 代碼失敗解決方法,將改的添加到暫存去,然后git stash暫存,此時為一個干凈的空間,然后git pull 拉取
git add *
git stash
git pull