1. 程式人生 > >git基本操作介紹

git基本操作介紹

出庫

git clone git pull的區別

[[email protected] a]$ git init

[[email protected] a]$ git clone [remote_repo_path]

# On branch master

#

# Initial commit

#

# Untracked files:

#   (use "git add <file>..." to include in what will be committed)

#

#       test/

nothing added to commit but untracked files present (use "git add" to track)

[[email protected] a]$ git log

fatal: bad default revision 'HEAD'

[[email protected] a]$ git branch

[[email protected] a]$ git init

[[email protected] a]$ git pull [remote_repo_path]

[[email protected] b]$ git status

# On branch master

nothing to commit (working directory clean)

[[email protected] b]$ git log

commit 4ab6b6d53b77ba41ca94a443a6d6cf00acdfcb42

…….

[[email protected] git_study]$diff -r a/.git/ b/.git/

Only in b/.git/: FETCH_HEAD

Binary files a/.git/index and b/.git/index differ

Only in b/.git/: logs

Only in b/.git/objects/pack: pack-9a714c6fd30c1addc0648e809907bb09ebff0230.idx

Only in b/.git/objects/pack: pack-9a714c6fd30c1addc0648e809907bb09ebff0230.pack

Only in b/.git/refs/heads: master

[[email protected] b]$ git branch

* master

由上可見,git clone只是簡單的把遠端庫中的內容拷貝到本地,並沒有建立分支,因此拷過來的內容還沒有加入tracking,也沒有log資訊;而git pull自動建立了master分支,內容(包括log)與遠端庫一致。

即使是git clone,如果要進行庫操作git init也是不可缺少的:

[[email protected] c]$ git clone ssh://[email protected]:7999/gpon/test.git

Cloning into 'test'...

remote: Counting objects: 671, done.

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

remote: Total 671 (delta 287), reused 612 (delta 263)

Receiving objects: 100% (671/671), 801.00 KiB | 88 KiB/s, done.

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

[[email protected] c]$ git status

fatal: Not a git repository (or any parent up to mount point /home)

Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).

[[email protected] c]$ git log

fatal: Not a git repository (or any parent up to mount point /home)

Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).

[[email protected] c]$

基本入庫

修改一個檔案

假設修改了a.txt

使用git status可以看到Changes not staged for commit下面有一個modified的檔案

[[email protected] a]$ 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:   a.txt

#

no changes added to commit (use "git add" and/or "git commit -a")git add

[[email protected] a]$ git add a.txt

[[email protected] a]$ git status

# On branch master

# Changes to be committed:

#   (use "git reset HEAD <file>..." to unstage)

#

#       modified:   a.txt

#

使用git commit後,git status內沒有內容,git log可以看到新增一條log

[[email protected] a]$ git commit -m "modify a.txt"

[master 22316f1] modify a.txt

 1 file changed, 1 insertion(+)

[[email protected] a]$ git status

# On branch master

nothing to commit(working directory clean)

[[email protected] a]$ git log

commit 22316f1e002341ec33f58d7c82730527625237c0

Author:

Date:   Sun Feb 2 10:49:03 2014 +0800

modify a.txt

使用git remote add,新增一個remote(本命令只需使用一次)

[[email protected] a]$ git remote add origin2 ssh://xxx

使用git push,將本地修改推送到遠端庫

[[email protected] a]$ git push

Counting objects: 5, done.

Delta compression using up to 4 threads.

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

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

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

To ssh://[email protected]:7999/gpon/test.git

   ed7f63f..22316f1  master -> master

增加一個檔案

使用git status可以看到一個untracked files

[[email protected] a]$ git status

# On branch master

# Untracked files:

#   (use "git add <file>..." to include in what will be committed)

#

#       a2.txt

nothing added to commit but untracked files present (use "git add" to track)

使用git add後,再用git status檢視有一個Changes to be commited的檔案

[[email protected] a]$ git add a2.txt

[[email protected] a]$ git status

# On branch master

# Changes to be committed:

#   (use "git reset HEAD <file>..." to unstage)

#

#       new file:   a2.txt

#

使用git commit後,git status內沒有內容,git log增加了一條log

[[email protected] a]$ git commit -m "add a2.txt"

[master 21a90f2] add a2.txt

 1 file changed, 1 insertion(+)

 create mode 100644 a2.txt

[[email protected] a]$ git status

# On branch master

nothing to commit (working directory clean)

[[email protected] a]$ git log

commit 21a90f2562c826230adfbcc5a1332a7f081344a9

Author:

Date:   Sun Feb 2 11:01:06 2014 +0800

    add a2.txt

直接使用git push將本地修改推送到遠端庫

[[email protected] a]$ git push

Counting objects: 4, done.

Delta compression using up to 4 threads.

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

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

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

To ssh://[email protected]:7999/gpon/test.git

   22316f1..21a90f2  master -> master

刪除一個檔案

[[email protected] a]$ git rm a2.txt

rm 'a2.txt'

[[email protected] a]$ git status

# On branch master

# Changes to be committed:

#   (use "git reset HEAD <file>..." to unstage)

#

#       deleted:    a2.txt

#

[[email protected] a]$ git commit -m "delete a2.txt"

[master 3764a36] delete a2.txt

 1 file changed, 1 deletion(-)

 delete mode 100644 a2.txt

[[email protected] a]$ git push

Counting objects: 3, done.

Delta compression using up to 4 threads.

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

Writing objects: 100% (2/2), 227 bytes, done.

Total 2 (delta 1), reused 0 (delta 0)

To ssh://[email protected]:7999/gpon/test.git

   21a90f2..3764a36  master -> master

小結

從上述操作可以看到,git的操作分為三個層次,stagelocal reporemote repo,其中git addgit rm用於將一個檔案的修改(包括建立和刪除)新增到stagegit commit用於將stage中記錄的修改入庫到local repogit push則將本地庫的修改推送到遠端庫,每個層次的操作都以前一層次的內容為基礎——即stage內有內容才可以commitlocal repo有內容才可以push

入庫撤銷操作

git reset

使用gitsvn很大的一個不同,是在開發過程中先在本地進行一系列的入庫(僅commitpush),待整個功能確認完成後,一次性推送到遠端庫。當然在本地庫操作過程中,不可避免地會碰到需要撤銷本地庫入庫的情況。

git reset撤銷stagelocal repo的修改

使用git reset撤銷commit,保留本地檔案的修改和add的資訊。

[[email protected] a]$ git log

commit 8fd3cf3da8dcf0663150b29b4b7d844e83af097c

    feature 1.3

commit 644ae1487dfbb6b81aae19049af0a97b93baa52e

    feature 1.2

commit a37a3c5f6844aac058530f657c540221ef36807e

    feature 1.1

使用git reset [3764a36206944735ea3ee461c254e4c194b160ce],可以將commit資訊回退到delete a2.txt時的狀態——log最後一條是“delete a.txt”,status中的a.txt的修改還沒有加入到stage

[[email protected] a]$ git log

commit 3764a36206944735ea3ee461c254e4c194b160ce

    delete a2.txt

 [[email protected] a]$ 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:   a.txt

#

no changes added to commit (use "git add" and/or "git commit -a")

然後按照基本入庫步驟將feature1.1/feature1.2/feature1.3作為function1一次commit即可

[[email protected] a]$ git add a.txt

[[email protected] a]$ git commit -m "function 1"

[master 5ec3455] function 1

 1 file changed, 5 insertions(+)

[[email protected] a]$ git log

commit 5ec3455dae0c02537c2d9ff1e001b5da97e71d9a

    function 1

git reset--soft撤銷local repo的修改

假設入庫function1以後,又有兩次commitfeature2.1feature2.2

[[email protected] a]$ git log -3

commit 40e8c12abff40aba66d8fa6ed4970a93890d755a

    feature 2.2

commit f0aac7525f6cb0be069662b0b3c52e8edf411a62

    feature 2.1

commit 5ec3455dae0c02537c2d9ff1e001b5da97e71d9a

    function 1

使用git reset –soft,撤銷最近的兩次commit操作

[[email protected] a]$ git reset --soft 5ec3455dae0c02537c2d9ff1e001b5da97e71d9a

 [[email protected] a]$ git log -1

commit 5ec3455dae0c02537c2d9ff1e001b5da97e71d9a

    function 1

 [[email protected] a]$ git status

# On branch master

# Changes to be committed:

#   (use "git reset HEAD <file>..." to unstage)

#

#       modified:   a.txt

#

可以看到git log已經刪除了最近兩次commit,但是status內還保留了add a.txt的操作。之後入庫只需直接commit即可。

git reset –hard撤銷本地檔案、statgelocal repo的修改

git reset –hard不再贅述,其特徵是本地檔案也將恢復成指定HEAD的狀態(所做修改被丟棄),慎用!

git revert

git revert將指定commit所包含的修改回退後再commit,從而撤銷該次入庫,其順利執行的前提是涉及檔案與其他commit不存在衝突。

[[email protected] a]$ git log

commit c4b214aff15850d17b386b10cf2cd5e855f27f33

    feature 2.3

commit 7e42cf823c6efe22dee4382a847a744914572e35

    feature 2.2

commit cd342b2acc8bb7f4ca5f18900ea4526aa307618e

    feature 2.1

[[email protected] a]$ git revert 7e42cf823c6efe22dee4382a847a744914572e35

[master 04d7880] Revert "feature 2.2"

 0 files changed

 delete mode 100644 feature2.2

 [[email protected] a]$ git log

commit 04d788084fcfb3bbc79caa47350d7edd2d6e50a6

    Revert "feature 2.2"

    This reverts commit 7e42cf823c6efe22dee4382a847a744914572e35.

commit c4b214aff15850d17b386b10cf2cd5e855f27f33

    feature 2.3

commit 7e42cf823c6efe22dee4382a847a744914572e35

    feature 2.2

commit cd342b2acc8bb7f4ca5f18900ea4526aa307618e

feature 2.1

小結

git resetgit revert可以達到同樣的效果,git reset主要用於push到遠端庫之前對本地檔案和commit進行調整;git revert通過增加一次新的入庫,恢復指定入庫的修改,相對來說比較方便,但是需要避免衝突。

衝突操作

無關檔案

afunction1之後入庫了feature2.xbfunction1之後本地增加了feature3.1,此時b入庫會提示錯誤:

[[email protected] b]$ git push

To ssh://[email protected]:7999/gpon/test.git

 ! [rejected]        master -> master (non-fast-forward)

error: failed to push some refs to 'ssh://[email protected]:7999/gpon/test.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.

此時需要重新pull 一次遠端庫,獲取到遠端庫的修改

[[email protected] b]$ git pull origin master

From ssh://sny-jira.ads.finisar.com:7999/gpon/test

 * branch            master     -> FETCH_HEAD

Merge made by the 'recursive' strategy.

 0 files changed

 create mode 100644 feature2.1

 create mode 100644 feature2.2

 create mode 100644 feature2.3

此時,可以看到log的變化(在feature 3.1之前增加了feature 2.xcommit log,之後增加了一條mergelog

[[email protected] b]$ git log

commit 006871f55dbabe3eb2852c5011b555f4cbddcb8b

Merge: 50b4877 c4b214a

    Merge branch 'master' of ssh://sny-jira.ads.finisar.com:7999/gpon/test

commit 50b48770c13bac5b6e97088d6d071649f4d55b35

    feature 3.1

commit c4b214aff15850d17b386b10cf2cd5e855f27f33

feature 2.3

commit 7e42cf823c6efe22dee4382a847a744914572e35

    feature 2.2

commit cd342b2acc8bb7f4ca5f18900ea4526aa307618e

feature 2.1

最後再push

log上看,其實最後一條merge log屬於一條冗餘資訊,我們當然知道應該要merge一下,如何避免這條冗餘資訊,可以參考git reset的使用。

相同檔案

假設aa.txt增加了feature 4.1,已入到遠端庫,ba.txt增加feature 4.2,此時pull也會提示錯誤:

[[email protected] b]$ git pull origin master

remote: Counting objects: 5, done.

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

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

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

From ssh://sny-jira.ads.finisar.com:7999/gpon/test

 * branch            master     -> FETCH_HEAD

Auto-merging a.txt

CONFLICT (content): Merge conflict in a.txt

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

使用git status,可以看到自動merge失敗的檔案a.txt

[[email protected] b]$ git status

# On branch master

# Unmerged paths:

#   (use "git add/rm <file>..." as appropriate to mark resolution)

#

#       both modified:      a.txt

#

no changes added to commit (use "git add" and/or "git commit -a")

使用git diff,可以檢視具體的差異,03ef4d19eb8c2ad7b93ce7e486f6a01ab7e0856d是遠端庫的commit id

[[email protected] b]$ git diff a.txt

diff --cc a.txt

index 7e6411a,a32e92b..0000000

--- a/a.txt

+++ b/a.txt

@@@ -7,4 -7,4 +7,8 @@@ function

     feature 1.3

  function 4

++<<<<<<< HEAD

 +   feature 4.2

++=======

+    feature 4.1

根據需要修改a.txtgit addgit commit後,push

相關推薦

git基本操作介紹

出庫 git clone 與 git pull的區別 [[email protected] a]$ git init [[email protected] a]$ git clone [remote_repo_path] # On branch

linux文件層級、目錄、文件基本操作介紹

文件、目錄基本操作1、文件層級FHS介紹: Filesystem Hierarchy Standard(文件系統層次化標準)的縮寫,多數Linux版本采用這種文件組織形式,類似於Windows操作系統中c盤的文件目錄,FHS采用樹形結構組織文件。 FHS定義了系統中每個區域的用途

Git基礎入門(四)Git基本操作2

git 操作 基礎忽略文件: 在實際開發過程中總有些文件無需納入Git的管理,比如日誌文件、臨時文件等 在這種情況下,我們可以在工作目錄中創建一個名為.gitignore的文件,列出要忽略的文件名或者表達式 例:cat .gitignore *.[oa]

筆記:git基本操作

基本概念 位置 bar 回退 let 管理 文件夾 私有 推送 原文: http://www.cnblogs.com/pingwen/p/8098035.html 1. 快速入門的基本概念 相比SVN,TFS等集中式的版本管理系統,GIT分布式管理最重要的理

Git 基本操作

gitGit 基本操作Git 的工作就是創建和保存你項目的快照及與之後的快照進行對比。本章將對有關創建與提交你的項目快照的命令作介紹。獲取與創建項目命令git init用 git init 在目錄中創建新的 Git 倉庫。 你可以在任何時候、任何目錄中這麽做,完全是本地化的。在目錄中執行 git init,就

Git基本操作

AD span class col lena why ext -m con 1.初始化 git init 2.提交文件 git add filename.xxx 3.commit git commit -m "why commit this file" 4.pu

Git基本操作

-h 緩沖 錯誤 src 成功 沒有 git log 字符串 郵箱 添加版本庫 什麽是版本庫?版本庫就是把代碼進行管理,代碼的刪除,更新Git都可以追蹤,Git也可以追蹤歷史版本,隨時回滾(還原項目); 第一步:我們建立一個空的文件夾 第二步:我們在這個目錄建立版本庫

Git基本操作和使用

源碼 沒有 ini stat 是我 commit ase 源地址 git init 基本命令: git config git init git clone git remote git fetch git commit git rebase git push 本地基本操

Git2:Git基本操作

常用操作 顯示文件 簡單 找到 周期 ranch name mit 兩種 目錄 一、git全局配置 二、創建一個版本庫 三、git的常用操作 1、版本提交與回退 1.1、版本提交 1.2、版本回退 2、工作區、版本庫與暫存區 2.1、工作區 2.2、版本庫 3、管理文

tensorflow基本操作介紹

global real direct 可用 0.10 join unit valid lease 1、tensorflow的基本運作 為了快速的熟悉TensorFlow編程,下面從一段簡單的代碼開始: import tensorflow as tf #定義‘符號’變量,也

Git基本操作指令

本篇記錄git配置完成後的基本使用所需的指令: 首先建立一個空資料夾, 點選右鍵選擇 git bash here進入命令框介面 輸入下面命令把YourSSH換成自己的SSH地址,(首先你要有一個SSH地址) git clone YourSSH 等待他自動把雲端的檔案下載到本地我

Git的學習與使用(六)——Git 基本操作

Git 基本操作 Git 的工作就是建立和儲存你專案的快照及與之後的快照進行對比。本章將對有關建立與提交你的專案快照的命令作介紹。 獲取與建立專案命令 git init 用 git init 在目錄中建立新的 Git 倉庫。 你可以在任何時候、任何目錄中這麼做,完全是本地化的。 在目錄中執行

git基本操作git+tortoiseGit)

git基本操作 clone操作 commit、pull、push操作 showlog操作 clone操作 首次使用時,clone遠端庫到本地 ① 右鍵任意空白處,點選git clone開啟clone介面 ② 輸入git遠端庫地址和本地

Git基本操作和Github的使用

本文大部分來自對廖雪峰Git教程 的學習,結合自己的體會,初步掌握Git的使用方法和Github的工作方式。 不會很難,但是瑣碎,所以多實踐,否則記不住。 1. 版本管理系統 為什麼要管理版本,有實際開發經歷的人都有體會,就不需要多說了。這就是水和空氣一樣,那麼重要,那麼天然。

git基本操作】總結

初始 onf 如果 全部 config 註釋 bsp mit ini 查看當前全部配置 git config -l 全局級配置,如果沒有倉庫級別的特殊配置,默認讀取這個配置 git config --global user.name "name" git con

Python學習之Git基本操作

版本庫建立 什麼是版本庫呢?版本庫又名倉庫,英文名repository,你可以簡單理解成一個目錄,這個目錄裡面的所有檔案都可以被Git管理起來,每個檔案的修改、刪除,Git都能跟蹤,以便任何時刻都可以追蹤歷史,或者在將來某個時刻可以“還原”。 所以,建立一個版本庫非常簡單,首先,選擇一個合適

git基本操作(入門)

下面以一個最簡單的開發過程,呈現git最基本的操作命令  1、下載程式碼(以code命名倉庫為例) git clone xxxxx/code.git cd code 2、檢視所有分支 git branch -av 3、切換已經存在的分支 git checkout xxx git

gitgit基本操作及使用GitHub

理解工作區、暫存區、分支 這篇已經畫出了工作區、暫存區和分支的草圖。注意git add是把工作區內容存到暫存區,git commit是把暫存區的內容提交到分支。 git diff head -- t

git基本操作指南》

一: 1:新建資料夾,進入資料夾下;2:git init (把該目錄變成git可以管理的倉庫)3:git add text.txt (新增到暫存區裡面去)4:git commit -m "text.txt提交" (把檔案提交到倉庫)5:git status (檢視是否還有檔案未提交)6:如修改了 text.

Git --- 基本操作以及Git 特殊命令,公司常用命令

Git安裝方式: window安裝方式。 在 Windows 平臺上安裝 Git 同樣輕鬆,有個叫做 msysGit 的專案提供了安裝包,可以到 GitHub 的頁面上下載 exe 安裝檔案並執行: 安裝包下載地址:http://msysgit.github.io/ 完成安裝之後,就可以使用命令列的