簡單的git使用命令


一、Git簡介
       Git(讀音為/gɪt/。)是一個開源的分布式版本控制系統,可以有效、高速地處理從很小到非常大的項目版本管理。Git 是 Linus Torvalds 為了幫助管理 Linux 內核開發而開發的一個開放源碼的版本控制軟件。

       分布式相比於集中式的最大區別在於開發者可以提交到本地,每個開發者通過克隆(git clone),在本地機器上拷貝一個完整的Git倉庫。

圖為git開發過程:

 

1、Git的功能特性

從一般開發者的角度來看,git有以下功能:

  • 從服務器上克隆完整的Git倉庫(包括代碼和版本信息)到單機上。
  • 在自己的機器上根據不同的開發目的,創建分支,修改代碼。
  • 在單機上自己創建的分支上提交代碼。
  • 在單機上合並分支。
  • 把服務器上最新版的代碼fetch下來,然后跟自己的主分支合並。
  • 生成補丁(patch),把補丁發送給主開發者。
  • 看主開發者的反饋,如果主開發者發現兩個一般開發者之間有沖突(他們之間可以合作解決的沖突),就會要求他們先解決沖突,然后再由其中一個人提交。如果主開發者可以自己解決,或者沒有沖突,就通過。
  • 一般開發者之間解決沖突的方法,開發者之間可以使用pull 命令解決沖突,解決完沖突之后再向主開發者提交補丁。

從主開發者的角度看,git有以下功能:

  • 查看郵件或者通過其它方式查看一般開發者的提交狀態。
  • 打上補丁,解決沖突(可以自己解決,也可以要求開發者之間解決以后再重新提交,如果是開源項目,還要決定哪些補丁有用,哪些不用)。
  • 向公共服務器提交結果,然后通知所有開發人員。

2、優點

  • 適合分布式開發,強調個體。
  • 公共服務器壓力和數據量都不會太大。
  • 速度快、靈活。
  • 任意兩個開發者之間可以很容易的解決沖突。
  • 離線工作。

3、缺點

  • 資料少(起碼中文資料很少)。
  • 學習周期相對而言比較長。
  • 不符合常規思維。
  • 代碼保密性差,一旦開發者把整個庫克隆下來就可以完全公開所有代碼和版本信息。

二、操作
git客戶端安裝:https://git-scm.com/

1、安裝查看客戶端版本:

C:\Users\xp>git --version
git version 2.14.1.windows.1

2、配置昵稱,用於更新版本跟蹤

2.1、配置昵稱,git bash執行如下命令:

git config --global user.name "xiaoping"
git config --global user.email "xiaoping@163.com"

通過 git config -l 這個命令查看已配置的用戶名和郵箱信息

git config -l 

2.2、生成密鑰對

打開git bash,輸入命令一路回車

ssh-keygen -t rsa -C "xiaoping@163.com"

3、從遠端克隆工程

git clone git賬戶@xx.xx.xx.xx:倉庫地址。

git clone git@127.0.0.1:data/test.git

4、pull與push操作

4.1.從遠程倉庫dev上更新代碼:git pull <遠程主機> <遠程分支名>:<本地分支名>

E:\workspace\git_test>git pull origin dev:master
remote: Counting objects: 17, done.
remote: Compressing objects: 100% (6/6), done.
remote: Total 9 (delta 3), reused 0 (delta 0)
Unpacking objects: 100% (9/9), done.
From 123.206.51.64:data/git_test
   5218488..e28fd78  dev        -> master
 * [new branch]      dev        -> origin/dev
warning: fetch updated the current branch head.
fast-forwarding your working tree from
commit 521848830e57c8ae1f45cccb5fd91dd2de077c5b.
Already up-to-date.

4.2.本地提交代碼到遠程倉庫dev分支上

查看狀態

E:\git_workspace\demo>git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   demo/src/main/java/com/exception/EmsException.java

提交步驟1:

E:\git_workspace\demo>git add .

提交步驟2:

E:\git_workspace\demo>git commit -m "提交說明信息,必須要寫"
[master 34ecceb] 提交說明信息,必須要寫
 1 file changed, 3 insertions(+), 1 deletion(-)

提交步驟3:git push <遠程主機名> <本地分支名>:<遠程分支名>

E:\test\git_test>git push origin master:dev

Counting objects: 9, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (9/9), 615 bytes | 307.00 KiB/s, done.
Total 9 (delta 3), reused 0 (delta 0)
To 123.206.51.64:data/git_test.git
   5218488..e28fd78  master -> dev

如果你記不住push與pull 遠程分支名和本地分支名的順序,可以設置git push和pull的默認分支:git branch --set-upstream-to=origin/<遠程分支名> <本地分支名>

D:\workspace\demo>git branch --set-upstream-to=origin/dev master
Branch master set up to track remote branch dev from origin.

這樣我就設置了我本地master分支push與pull的默認遠程分支是dev。

5、管理員遠程倉庫的操作
5.1.創建倉庫git init
    這部操作完,只要一個.git的隱藏文件,這時是一空的倉庫。使用git branch是看不到任何分支的
5.2.創建一個本地工程push到遠程倉庫上, 這時你會發現報錯了。

remote: error: refusing to update checked out branch: refs/heads/master
remote: error: By default, updating the current branch in a non-bare repository
remote: error: is denied, because it will make the index and work tree inconsistent
remote: error: with what you pushed, and will require 'git reset --hard' to match
remote: error: the work tree to HEAD.
remote: error:
remote: error: You can set 'receive.denyCurrentBranch' configuration variable to
remote: error: 'ignore' or 'warn' in the remote repository to allow pushing into
remote: error: its current branch; however, this is not recommended unless you
remote: error: arranged to update its work tree to match what you pushed in some
remote: error: other way.
remote: error:
remote: error: To squelch this message and still keep the default behaviour, set
remote: error: 'receive.denyCurrentBranch' configuration variable to 'refuse'.
To 127.0.0.1:data/git_test.git
 ! [remote rejected] master -> master (branch is currently checked out)
error: failed to push some refs to 'git@127.0.0.1:data/git_test.git'

原因:這是由於git默認拒絕了push操作,需要進行設置,修改.git/config文件后面添加如下代碼:

[receive]
    denyCurrentBranch = ignore

操作完成功提交之后,你在遠程倉庫上輸入 git branch你會看到一個*master。這時master分支就有了

5.3. 創建一個dev分支:

git branch dev(創建dev)/git checkout -b dev(創建並切換到dev)

5.4.遠程倉庫不能讓開發者隨意push,所以刪掉2.中添加到.git/config中的內容

5.5.分支合並到master

[root@t2 demo.git]# pwd
/home/git/data/demo.git
[root@t2 demo.git]#

查看當前所在分支

[root@t2 demo.git]# git branch
* dev
  master
[root@t2 demo.git]#

如果不在切換到master分支

[root@t2 demo.git]# git checkout master
Switched to branch 'master'
[root@t2 demo.git]# git branch
  dev
* master
[root@t2 demo.git]#

將分支合並到master分支

[root@t2 demo.git]# git merge dev
Updating 1b85a27..1d471fe
Fast-forward
 demo/.mvn/wrapper/maven-wrapper.jar             | Bin 47610 -> 0 bytes
 demo/.mvn/wrapper/maven-wrapper.properties      |   1 -
 demo/mvnw                                       | 225 ---------------------
 demo/mvnw.cmd                                   | 143 -------------
 .../demo/Controller/TestController.java  |  15 ++
 5 files changed, 15 insertions(+), 369 deletions(-)
 delete mode 100644 demo/.mvn/wrapper/maven-wrapper.jar
 delete mode 100644 demo/.mvn/wrapper/maven-wrapper.properties
 delete mode 100644 demo/mvnw
 delete mode 100644 demo/mvnw.cmd
 create mode 100644 demo/src/main/java/com/Controller/TestController.java
[root@t2 demo.git]#

  

三、多人協作(pull報錯)
       當你從遠程倉庫克隆時,實際上Git自動把本地的master分支和遠程的master分支對應起來了,並且,遠程倉庫的默認名稱是origin。

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

git remote
origin

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

git remote -v
origin git@github.com:xiaoping/test.git (fetch)
origin git@github.com:xiaoping/test.git (push)

在往遠程push失敗,報錯:

git push origin dev
To github.com:xiaoping/test.git
! [rejected] dev -> dev (non-fast-forward)
error: failed to push some refs to 'git@github.com:xiaoping/test.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

Git已經提示我們,先用git pull把最新的提交從origin/dev抓下來,然后,在本地合並,解決沖突,再推送:

git pull
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-to=origin/<branch> dev

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

git branch --set-upstream-to=origin/dev dev
Branch 'dev' set up to track remote branch 'dev' from 'origin'.

再次pull:

git pull
Auto-merging env.txt
CONFLICT (add/add): Merge conflict in env.txt
Automatic merge failed; fix conflicts and then commit the result

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

git push origin dev
Counting objects: 6, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (6/6), 621 bytes | 621.00 KiB/s, done.
Total 6 (delta 0), reused 0 (delta 0)
To github.com:xiaoping/test.git
7a5e5dd..57c53ab dev -> dev

  


 推薦學習一下:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM