Git使用筆記

來源:互聯網
上載者:User

標籤:

linux安裝Git

 

1.使用yum形式安裝,會直接把依賴的包都裝上

# yum install git

2.使用源碼形式安裝

官網地址 http://git-scm.com/

源碼:https://git-core.googlecode.com/files/git-1.9.0.tar.gz

源碼形式需要調用 curl, zlib, openssl, expat, libiconv等庫代碼,所以需要先安裝這些依賴工具。

# yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel

安裝檔案下載到指定檔案夾後使用如下命令安裝

# tar -xvzf git-1.9.0.tar.gz 

# cd git-1.9.0

# ./configure --prefix=/usr/local 

# make

# make install

安裝後看看版本

# git --version

git version 1.9.0

 

初次使用需要配置使用者資訊,配置個人資訊可以針對三種情況,1:針對系統,2:針對當前登入使用者,3:針對單個項目。

當前登入使用者配置如下:

$ git config --global user.name "youname"

$ git config --global user.email "[email protected]"

如果要針對系統則使用 --system, 針對項目則去掉--global選擇就可以了

$ git config -l  # 查看使用者配置

 

伺服器上建立純倉庫,--shared選項是設定該倉庫加入到可寫的組

# git init firstproject.git --bare --shared

進入指定目錄後,clone遠程倉庫代碼

$ git clone ssh://[email protected]:6022/data/git/firstproject.git

$ git clone ssh://[email protected]:6022/data/git/firstproject.git newproject  # 自訂項目名稱

$ git clone --bare ssh://[email protected]:6022/data/git/teacherapi.git # 複製純倉庫

進入到本地項目目錄後,右鍵菜單開啟git bash

$ git init # 初始化git項目

$ git add .  # 添加到暫存(staged)地區,只處理添加和修改,不處理刪除

$ git add -A 處理所有:添加、修改、刪除

$ git add -u 處理修改和刪除,不處理新添加檔案

$ git reset HEAD filename # 取消已暫存的檔案

$ git reset --hard "log_hash" # 強制重設到指定版本,之後提交的檔案都會被刪除,並且相關提交日誌也會跟著刪除

$ git reset "log_hash" # 重設到指定版本,之後提交的日誌都會被刪除,但是之後提交的檔案會恢複到未跟蹤狀態

$ git reset HEAD^  # 取消最後一次提交,與git reset "log_hash"效果一樣

$ git revert "log_hash" # 撤銷某次操作, 那次添加的檔案會被刪除,但提交日誌不會刪除,同時會增加撤銷操作執行的日誌

$ git reflog # 查看所有HEAD的曆史,reset動作記錄會記錄到這裡,再次使用git reset "reflog_hash"可以恢複已刪除的記錄

如果因為reset等操作丟失一個提交的時候,總是可以把它找回來。除非你的操作已經被git當做垃圾處理掉了,一般是30天以後。

$ git commit -m "initial project version" # 提交到本地倉庫

$ git commit -a -m "commit project" # 不通過暫存地區直接提交已跟蹤的檔案

$ git commit --amend # 修改最後一次提交message內容

$ git checkout -- filename # 取消對檔案的修改, 取消後在使用git status 查看狀態應該是未修改狀態

# 忽略已跟蹤的檔案

$ git rm --chached logs/xx.log (--cached參數表示刪除倉庫檔案同時保留本地檔案) 然後更新 .gitignore 忽略掉目標檔案,在然後 git commit -m "We really don‘t want Git to track this anymore!" 最後推送到遠程倉庫 git push origin master:master

有的時候工程裡面會有很多沒有追蹤的檔案和目錄,一個一個地刪除太麻煩。 git clean可以幫你大量刪除,非常的方便。下面介紹一下git clean的使用:

$ git clean -n 顯示要刪除的檔案

$ git clean -dn 顯示要刪除的檔案和目錄

$ git clean -di 進入互動模式

$ git clean -f 刪除未追蹤的檔案

$ git clean -dff 刪除未追蹤的目錄

$ git clean -df 刪除未追蹤的檔案和目錄(不包含ignored中檔案)

$ git clean -dxf  # 清除所有未追蹤檔案,包括納入ignored的檔案

 

遠程倉庫使用

$ git remote add origin ssh://[email protected]:6022/var/git/firstproject.git # 添加遠程倉庫

$ git remote rm repository_name # 刪除遠程倉庫

$ git remote rename old_name new_name  # 修改遠程倉庫名稱

$ git remote -v # 查看遠程倉庫資訊

$ git remote show origin # 查看指定遠程倉庫資訊

$ git push origin master:master or  git push origin master  # 推送到遠程分支 文法:git push[遠程名] [本地分支]:[遠程分支], 複製操作會自動使用預設的  master 和 origin 名字

$ git fetch origin master # 從遠程倉庫抓取資料, 文法:git fetch [remote-name], 注:fetch 命令只是將遠端的資料拉到本地倉庫,並不自動合并到當前工作分支

$ git pull origin master # 自動抓取資料下來,然後將遠端分支自動合并到本地倉庫中當前分支,如果發生衝突可以使git rebase --abort 終止合并

 

$ git mv readme.txt readme # 修改檔案名稱,需要執行commit和push命令才能更新到版本庫

$ git rm *.bak # 刪除檔案,需要執行commit和push命令才能更新到版本庫

$ git rm --cached log/\*.log # 刪除倉庫檔案的同時,保留本地檔案

# 忽略檔案,使用vi命令建立一個.gitignore的檔案

# 在pull過程中遇到衝突問題,編輯衝突檔案後,使用git add命令重新添加到緩衝區後,就可以正常執行git commit命令

分支使用

$ git branch hotfix # 建立分支

$ git checkout hotfix # 切換分支,切換過程中盡量避免存在緩衝區檔案

$ git checkout -f develop  # 強制切換分支

$ git checkout -b branch_name # 建立新分支並切換到新分支

$ git checkout -b local-branchname origin/remote_branchname  # 擷取遠程分支的同時建立本地分支

$ git merge develop  # 這個命令把分支"develop"合并到了當前分支(master)裡面, 注意合并前先checkout到master分支

$ git branch -d hotfix # 刪除分支

$ git branch -D hotfix # 強制移除為未並的分支

$ git branch # 查看當前分支

$ git branch -a # 查看所有分支

$ git branch -r # 查看遠程分支

$ git branch -v # 查看個分支最後一次提交資訊

$ git branch --no-merged # 查看未合并的分支

$ git push origin hotfix:serverfix # 本地分支hotfix推送到遠程分支serverfix,如果遠程分支不存在則建立

$ git checkout -b serverfix origin/serverfix # 擷取到本地一份新的遠程分支

$ git checkout --track origin/serverfix # 跟蹤分支, 與該語句“git checkout -b serverfix origin/serverfix”效果一樣

$ git push origin :serverfix # 刪除遠程分支

$ git push origin --delete develo  # 刪除遠程分支

$ git branch -r -d origin/develo   # 刪除本地追蹤記錄

如果當前分支已經修改了,這時候正常切換是不允許的,可以使用git stash把修改的檔案暫存起來,等切換過來後在使用git stash apply 恢複之前的狀態

 

提交記錄

$ git log --all # 查看提交日誌

$ git log --author=myname  # 查看指定使用者的提交記錄

$ git log --cherry develop  # 查看指定分支提交記錄

 

合并

$ git merge hotfix # hotfix代碼合并到master分支(相當於在master分支上拉取hotfix分支代碼), 注意合并前先checkout到master分支

$ git merge develop --squash  # 作為一個整體合并到當前分支,不會將develop裡面亂七八糟的提交記錄更新到當前分支,這相當於copy 操作,所以執行merge後還需要再次commit 。

$ git merge <commit-id>  # 根據提交記錄合并

$ git merge 合并的時候有衝突解決完 執行git rebase --continue 來繼續合并。 

 

指定檔案合并,例如將bug分支explain_edit.html檔案合并到develop分支explain_edit.html,可以這樣操作

$ git checkout develop  # 先切換到develop

$ cd zhishidian/themes/manager/knowledge/explain  # 進入檔案所在檔案夾

$ git checkout bug -- explain_edit.html  # 合并檔案,合并後檔案處於修改狀態,注意--後面有空格。

 

標籤使用

$ git tag -a v0.1.2 -m "發布0.1.2版本" # 建立標籤

$ git fetch --tags  # 擷取標籤

$ git checkout [tagname] # 切換標籤與切換分支命令相同

$ git show v0.1.2 # 查看標籤資訊

$ git tag -d v0.1.2 # 刪除標籤

$ git tag -a v0.1.1 9fbc3d0 # 補打標籤,"9fbc3d0"通過git log擷取某個提交對象的校正

$ git push origin v0.1.2 # 將v0.1.2標籤提交到git伺服器

$ git push origin v0.1.2:refs/tags/v0.1.2   # 指定標籤提交到伺服器指定位置

$ git push origin --tags # 將本地所有標籤一次性提交到git伺服器

$ git tag -l or --list  # 查看所有標籤

$ git for-each-ref --sort=taggerdate --format ‘%(tag)‘ refs/tags|tail -3  # 按時間倒序取最後3條

# 也可以這樣排序

git log --tags --decorate --simplify-by-decoration

git log --tags --simplify-by-decoration --pretty="format:%ai %d"

 

其它

$ git rebase branch_name # 分支變基,已指定分支為基礎,把當前分支已經提交的記錄在追加到指定更新的分支上,這和當前分支上使用pull other_branch結果是一樣的,只是執行過程不一樣

$ git rebase --abort # 終止rebase,如果rebase過程中遇到衝突問題,可以使用--abort參數終止操作,解決衝突後還可以使用--continue繼續rebase

 

$git show HEAD # 查看當前分支當前的曆史狀態,HEAD表示當前分支最新版本,HEAD^表示HEAD父母的資訊,HEAD~4表示HEAD上溯四代的資訊 

 

git是不能add空目錄的,如果想add空目錄的,則需要在目錄裡面添加一個檔案才能正常添加上,這個時候可添加.gitignore檔案當一個預留位置。

如果想一個(大)檔案永久刪除,既不要在版本庫記錄裡面看到也不要佔用版本庫空間的話,可以使用filter-branch,具體用法參考官方文檔。

$ git filter-branch --tree-filter ‘rm -f testme.txt‘ HEAD 

 

$ git diff settings.py  # 對比檔案修改內容

 

總結:

git裡面的檔案有以下幾種狀態

--未跟蹤 (untracked)

--已跟蹤 (tracked)

  --已修改 (modified)

  --已暫存 (staged)

  --已提交 (commited)

  --正常

 

拓展知識

SSH登入使用RSA認證認證代替密碼認證

建立RSA認證

開啟git bash後輸入 ssh-keygen -t rsa -C "[email protected]" 之後會在C:\Users\Administrator\.ssh\產生兩個檔案id_rsa,id_rsa.pub,這兩個一個是私密金鑰,一個是公開金鑰,建立過程中會提示輸入密碼,直接忽略就行了。

把已產生的id_rsa.pub(公開金鑰)上傳到linux伺服器上後,把該檔案內容添加到/root/.ssh/authorized_keys檔案中

可以使用如下命令:

$ scp ~/.ssh/id_rsa.pub [email protected]:/tmp/id_rsa3.pub # 使用git bash將本地檔案上傳到伺服器

# cat /tmp/id_rsa.pub >> /root/.ssh/authorized_keys

 

使用git bash登入linux伺服器

$ ssh [email protected] 或 $ ssh -l username remotehost  
$ ssh [email protected] -p6022  # 帶連接埠訪問

退出ssh可以使用exit命令

 

這幾篇Git文章寫的不錯

Git 版本管理工具(一)

http://blog.csdn.net/ithomer/article/details/7527877

Git 常用命令詳解(二)

http://blog.csdn.net/ithomer/article/details/7529022

Git 常用命令速查表(三)

http://blog.csdn.net/ithomer/article/details/7529841 

 

http://rongjih.blog.163.com/blog/static/335744612010112562833316/

 

Git使用筆記

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.