GIT筆記

GIT

git init

初始化git倉庫,會在目錄下生成一個.git的隱藏文件,里面保存著本地庫的版本管理信息

git status

git status命令可以讓我們時刻掌握倉庫當前的狀態

  • 以下代碼表示README.md文件在master分支下被修改
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.md

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

git diff

雖然Git告訴我們README.md被修改了,但如何能看看具體修改了什么內容呢,我們就使用git diff <文件名>

  • 可以看到README.md文件版本的變化(使用q退出diff)
diff --git a/README.md b/README.md
index d8036c1..013b5bc 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,2 @@
-Git is a version control system.
+Git is a distributed version control system.
 Git is free software.
\ No newline at end of file

git log

git log命令顯示從最近到最遠的提交日志

  • git log可以看到你由近到遠的提交記錄
commit 3628164fb26d48395383f8f31179f24e0882e1e0
Author: xxx
Date:   Tue Aug 20 15:11:49 2013 +0800

    append GPL

commit ea34578d5496d7dd233c827ed32a8cd576c5ee85
Author: xxx
Date:   Tue Aug 20 14:53:12 2013 +0800

    add distributed

commit cb926e7ea50ad11b8f9e909c05226233bf755030
Author: xxx
Date:   Mon Aug 19 17:51:55 2013 +0800

    wrote a readme file

git reset

git reset 切回指定版本,

  • 用HEAD表示當前版本,
  • 上一個版本就是HEAD^,
  • 上上一個版本就是HEAD^^,
  • 當然往上100個版本寫100個^比較容易數不過來,所以寫成HEAD~100。
  • 或者是指定commit id(版本號沒必要寫全,6-7位就可以了,Git會自動去找。)

git reset --hard HEAD^回到上一個版本

git reset 撤銷暫存區

git reset HEAD <文件名>從暫存區中移除該文件

git reflog

Git提供了一個命令git reflog用來記錄你的每一次命令

  • 使用場景:現在,你回退到了某個版本,關掉了電腦,第二天早上就后悔了,想恢復到新版本怎么辦?找不到新版本的commit id怎么辦?當你reset到上幾個版本后反悔了想要回到之前的版本就可以使用git reflog查看之前執行的命令和對應的commit id這樣就可以根據commit id回到指定的版本了

小結一波:

三個關鍵詞:工作區,暫存區,版本庫

暫存區的概念

我們執行git add指令后代碼被提交到了哪?其實就是被提交到了暫存區,對應.git/index(stage)文件就是暫存區

HEAD的概念

HEAD其實就是一個指針指向當前分支,如我們當前是master分支HEAD就指向master分支,我們執行完add將代碼提交到暫存區,再執行commit方法就把暫存區的東西一次性提交到HEAD指向的分支
git管理的是修改而不是文件,如何理解?第一次修改 -> git add -> 第二次修改 -> git commit 我們可以看出只有第一次修改被提交就是因為git提交的只是修改的記錄而不是整個文件,第二次的修改記錄不存在暫存區中所以沒被提交

分支(branch)

上面提到HEAD和master分支,HEAD是指向當前分支的,如果當前分支是master那么HEAD就是指向master,而master是指向當前分支的最后一次提交。
現在我們在master指向的提交上建立一個分支dev,并且使用dev分支,這是HEAD就指向dev分支,而dev就指向創建分支時對應的master分支指向的提交,接下來在dev分支上進行一次提交,這時master分支還是指向master分支的最后一次提交,dev分支指向了最新的dev分支上的提交,HEAD指向了dev

git branch <分支名>

創建分支。git branch dev創建dev分支

git branch

列出所有分支,當前分支前有*(HEAD指向的分支)

git branch -d <分支名>

該命令用于刪除分支

git checkout -d dev

git branch --set-upstream <本地分支名> origin/<遠程分支名>

該命令用于本地分支和遠程分支的關聯

git branch --set-upstream dev origin/dev

-checkout

git checkout -- <文件名> 注意:中間的--很重要沒有--就變成了切換分支的命令了

撤銷操作:簡而言之,就是讓這個文件回到最近一次git commit或git add時的狀態。
如果該文件在暫存區中有修改記錄,那么git checkout -- <文件名>就回到暫存區的狀態
如果該文件沒有被提交到暫存區,那么git checkout -- <文件名>就回到版本庫的狀態

git checkout <分支名>

切換分支。git checkout dev切換到dev分支

git checkout -b <分支名>

創建并且切換到該分支

git checkout -b dev

git checkout -b <本地分支名> origin/<遠程分支名>

創建本地分支并關聯相應的遠程分支,本地和遠程分支的名稱最好一致

git checkout -b dev origin/dev
  • 相當于
git branch dev
git checkout dev

git config

  • 查看當前目錄下的config配置列表
git config --list
  • 配置全局config
# 配置全局用戶名
git config --global user.name 'XXX'
  • 配置項目私有config
# 配置項目私有用戶名
git config --local user.name 'XXX'

git clone

  • 克隆遠程倉庫master分支到本地
# 克隆遠程倉庫到本地目錄
git clone xxx
  • 克隆遠程倉庫其他分支到本地
git clone -b 分支名 git遠程地址
  • 查看本地倉庫分支
git branch

git tag 給當前倉庫添加標簽主要用來設置版本號

  • 給本地倉庫添加標簽
git tag -a v0.1 -m 'v0.1'
  • 將本地殘酷標簽推送到遠程倉庫
git push --tag

添加本地GIT忽略清單文件

  • 在代碼庫文件夾的根目錄添加一個.gitignore文件,此文件用于說明忽略的文件有哪些

將github上的項目移至本地

  • 方法1:
git init
git remote add origin github地址      //添加origin
// git pull <遠程主機名> <遠程分支名>:<本地分支名>
git pull origin master                //從origin源下更新master分支
// git pull origin master:master 合并分支名相同可以簡化為 git pull origin master
  • 方法2:
git init
// git clone <版本庫的網址> <本地目錄名>
git clone github地址                      //克隆
git clone -b 指定的分支名字 github地址     //克隆某分支

將本地代碼提交到github上

  • 方法1:
// 遠程主機名:可以在.git下config remote下查看
// <遠程分支名><本地分支名>:本地的哪個分支提交到遠程的哪個分支
// git push <遠程主機名> <本地分支名>:<遠程分支名>
git push origin master                //先commit到本地后,push到origin源master分支上
// git push origin master:master 合并分支名相同可以簡化為 git push origin master

GitLab/GitHub SSH關聯(mac/linux)

1.檢查是否有秘鑰對

ls -al ~/.ssh檢查是否顯示有id_rsa.pub或者id_dsa.pub存在,如果存在請直接跳至第3步。

2.生成秘鑰對

ssh-keygen -t rsa -C ”email”,注意這個地方的郵箱地址需要和gitlab/github上對應,一直回車密碼可以為空,這樣就會在/Users/用戶名/.ssh/下生成id_rsa和id_rsa.pub

3.配置GitLab/GitHub SSH

打開GitLab/GitHub關于SSH的配置,一般叫做ssh key。
cat id_rsa.pub
將秘鑰復制到GitLab/GitHub的key中

4.修改git配置

git config --global user.name '用戶名'
git config --global user.email '剛剛生成秘鑰填的郵箱'

5.git clone ssh

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 對于一個新的包括submodule的項目調用以下命令即可 或者 配置 首先是配置帳號信息 ssh -T git@g...
    brownfeng閱讀 485評論 0 0
  • Git常用語法 [TOC] Git簡介 描述 ? Git(讀音為/g?t/。)是一個開源的分布式版本控制系統,...
    君惜丶閱讀 3,571評論 0 13
  • 1. 安裝 Github 查看是否安裝git: $ git config --global user.name "...
    Albert_Sun閱讀 13,710評論 9 163
  • 下午忙完工作打開手機,被唐嫣和羅晉刷屏了,公開戀愛關系了,敢大方承認了,敢一起牽手面對人生的風雨了!祝福他們邁出了...
    愿美好相伴閱讀 710評論 0 1
  • 小時候 你和我 像是輕躁狂患者 永遠激情無限 你有你的方向,我有我的導航儀 你說你要出淤泥而不染,我說我要濯清漣而...
    smilencexzm閱讀 232評論 4 6