Git 教程

Mac 環(huán)境配置

  1. 配置用戶名
git config --global user.name "郵箱前綴"
git config --global user.email "xxx@xx.com"

注意:如果是修改郵箱,還需要git commit --amend --reset-author,然后才能 git push

  1. ssh 密鑰生成
    生成 ssh-key。終端命令如下
ssh-keygen -t rsa -b 1024
  • -t rsa 表示使用 RSA 算法
  • -b 指定密鑰長度
  • 輸入上述命令后,終端會詢問生成的文件名,可直接回車鍵,保持默認不變
  • 當詢問 passphrase 時,可直接回車鍵,表示不需要輸入密碼。
    這之后會得到兩個文件:id_rsa(私鑰文件) 和 id_rsa.pub(公鑰文件)
  1. 配置 ssh
    在 .ssh 文件夾中新建一個名為“config”的文件,文件內容如下
Host XXX.com
    User xxx   // 為你的郵箱前綴
    Port XXX
    IdentityFile ~/.ssh/id_rsa  // 你的 ssh 私鑰文件名
  1. 如果要使用 Gerrit 管理代碼,需要在 Gerrit 添加證書
  • 終端輸入如下命令cat ~/.ssh/id_rsa.pub,將顯示的公鑰復制到剪貼板上
  • 登錄到 gerrit 到 settings/ssh-keys 頁
  • 點擊 "Add Key",粘貼剛才復制的公鑰

創(chuàng)建倉庫

1.從遠程庫克隆

  • 登錄github-Create a new repository-輸入Repository name-勾選Initialize this repository with a README-點擊Create repository按鈕
  • 點擊圖片一按鈕,復制https地址,在本地電腦命令行窗口中輸入
    git clone https地址


    圖片一
  • 進入克隆的文件夾里可以看到有個一個README.md文件(README.md中內容是github項目頁面中展示的內容,使用Markdown語法)

文件管理

git本地原理如圖二所示:


圖二
  • 添加文件
    $ git add abc.txt 將文件abc.txt添加到暫存區(qū)stage中
    $ git commit -m "添加了abc.txt文件" 將暫存區(qū)中的文件提交到當前分支master中
    $ git push origin master 將本地主分支推送到遠程主分支上

    備注: git add的幾種形式

    • git add .把工作區(qū)文件的變化提交到暫存區(qū),包括修改、新的文件,但不包括刪除的文件
    • git add -u即(git add --update)僅監(jiān)控已經被add過的文件,將修改提交到暫存區(qū),但不會提交新的文件
    • git add -A即(git add --all)是上面兩個功能的合集
  • 刪除文件

    • 在工作區(qū)刪除文件
      $ rm abc.txt 刪除文件(或者直接在文件管理器中把沒用的文件刪了)
    • 在版本庫中刪除文件,分兩步執(zhí)行
      1. git rm abc.txt刪除版本庫中的文件
      2. git commit -m "刪除文件" 提交
    • 刪錯了沒關系,因為版本庫里還有呢,所以可以很輕松地把誤刪的文件恢復到最新版本
      git checkout -- abc.txt其實就是用版本庫中的文件替換工作區(qū)
  • 刪除文件夾
    $ git rm dicname -r 刪除dicname文件夾
    $ git push origin master 同步到遠程庫
    $ git push origin master --force 會使用本地分支的提交覆蓋遠端分支的提交,即如果他人在相同分支推送了新的提交,你的這一舉動將刪除他的提交


查看歷史記錄

  • git log 可以查看當前項目的所有歷史提交(commit)記錄,即包含本人,也包含其他人的提交記錄
  • git log --all --graph --oneline 以圖形化的形式查看當前項目的歷史提交記錄
  • git reflog 查看當前項目本地操作記錄

將遠程倉庫中的代碼同步到本地

  • $ git fetch origin master 獲取遠程倉庫的代碼到本地
  • $ git merge origin/master 將遠程下載的代碼合并到本地倉庫

或者使用如下命令
git pull 當前分支自動與唯一一個追蹤分支進行合并
git pull 命令等同于上述 git fetch + git merge
備注: git pull 的完整格式如下
$ git pull <遠程庫名> <遠程分支名>:<本地分支名>
例如,獲取遠程倉庫的 branch_6.0 分支到本地的 nati_3.0 分支,可以使用如下命令
$ git pull origin branch_6.0:nati_3.0


刪除倉庫

  • $git remote rm reponame 刪除遠程倉庫
    實際操作顯示could not remove config section 'remote.reponame'
  • 于是使用第二種方法:
    先刪除本地的文件夾
    然后點擊github主頁-settings頁面-delete this repository按鈕刪除即可


    主頁Settings選項

標簽

切換到需要打標簽的分支上,打標簽即可。默認標簽是打在最新提交的commit上

  • $git branch 查看所有的分支
  • $git checkout master 切換到master分支(主分支)上
  • $git tag v1.0 為當前分支打上標簽,確定了打標簽時刻的版本。以后可以把那個打標簽的時刻的歷史版本取出來
  • $git tag 查看當前所有標簽
  • $git push origin --tags 將全部未推送的標簽推送到遠程
    或者使用
  • $git push origin v1.02 將標簽v1.02推送到遠程庫中

刪除標簽

  • $git tag -d v1.02 刪除本地v1.02標簽
  • $git push origin :refs/tags/v1.02 從遠程刪除v1.02標簽
    如果標簽未推送到遠程庫,只要刪除本地標簽就可以,如果已經推送到遠程庫,則需要從遠程刪除標簽

撤銷修改

  • 如果不小心改壞了一個工作區(qū)的文件時,想直接丟棄工作區(qū)的修改,可以使用
    $ git checkout -- filename 這時工作區(qū)的文件就恢復到了之前的狀態(tài)
  • 如果將一個改壞了的文件提交到了暫存區(qū),這個時候想刪除,可以使用
    $ git reset HEAD filename 這時暫存區(qū)就會舍棄上一次的add,回到add之前的狀態(tài)
  • 可以查看當前的狀態(tài)
    $ git status

暫存代碼

  • git stash save "保存?zhèn)渥⑿畔? 暫存
  • git stash pop stash@{1} 回復暫存的進度,并將 stash 中對應的存儲刪除
  • git stash apply stash@{1} 回復暫存的進度,不會刪除 stash 中對應的存儲
  • git stash clear 清空 stash
  • git stash drop 移除 stash 列表中最新的一個存儲單元
    不小心使用了 drop 或者 clear 命令,想要找回的解決方法
  1. git fsck --unreachable 顯示所有 unreachable 記錄,其中

    commit,將看到分支信息、stash時的備注信息、stash操作的時間點等

  2. git show <sha> sha 為上面的 key
  3. git stash apply <sha> 即可恢復

回滾代碼

當想要查看某次 commit 的代碼時,可以使用如下命令

  • $ git reset --hard commit_id 退到/進到指定 commit 時的代碼
    應用場景:撤銷上一次的 merge
  • $ git reset --hard HEAD^ 回退到上個版本
  • $ git reset --hard HEAD~n 回退到前 n 次提交之前,n 為多少,回退到 多少 次提交之前

分支

項目中為了開始一個新的思路,有時候需要新建一個分支

  • 查看分支
    $ git branch 查看本地當前所有分支
    $ git branch -a 查看遠程所有分支
  • 創(chuàng)建分支
    git checkout -b dev 新建dev分支并切換dev分支上
    相當于以下兩條命令:
    $ git branch dev
    $ git checkout dev
    此時可以在dev分支上正常add、commit、tag等操作。
  • 合并分支
    如果dev分支合并到master分支上,則需要如下步驟:
    $ git checkout master 切換到master分支上
    $ git merge dev 把dev分支的內容合并到master分支上
  • 刪除分支
    合并完分支后就可以將dev分支刪除掉了
    $ git branch -d dev 刪除dev分支
  • 推送分支
    $ git push origin dev 就可以將dev分支推送到遠程庫中
    如果給dev打了標簽,也可以將標簽推送到遠程庫中
    $ git push origin -v1.02
  • 從遠程庫中克隆dev分支
    從遠程庫克隆時,默認只能克隆master分支,如果想要在dev分支上工作,就需要創(chuàng)建遠程庫dev分支的本地分支,因此需要用如下命令:
    $ git checkout -b dev origin/dev
    然后就可以在本地dev分支工作,并可以向遠程庫的dev分支commit和push了

忽略特殊文件

工作目錄中的某些如配置文件、編譯文件如.pyc文件沒必要上傳,通過編寫.gitignore文件忽略

  • 方法一
    github已經為我們準備了配置文件,可以直接訪問https://github.com/github/gitignore ,下載相應的文件即可。配置文件也需要通過下述命令添加到庫中。
    git add
    git commit
    git push

  • 方法二
    在web網站上創(chuàng)建遠程庫時,倒數第二行有選項,"Add .gitignore: None"選項,可以直接選擇相應的配置文件。在克隆遠程庫時,也會將相應的文件一起克隆到本地庫中。


    Add .gitignore: None

這樣在推送的時候就會自動忽略.gitignore中設置的文件
注意: .gitignore文件在mac系統(tǒng)下默認為隱藏文件,可以通過下述命令查看文件夾中隱藏的文件
ls -a

忽略 git 已經跟蹤的某些文件

.gitignore 文件對已經追蹤的文件不起作用,因此想要忽略某些文件,需要執(zhí)行一下操作

  1. git rm -r --cached . 刪除 git 緩存,或者 git rm -r --cached <文件名> 在 git 版本庫中刪除某個跟蹤的文件
  2. git add . 重新添加文件到 git 暫存,此時,.gitignore 文件會起作用

忽略未被跟蹤的文件

某些未被跟蹤的文件更改后,使用 gst 命令后會出現如下提示

 Untracked files:
    (user "git add <file>..." to include in what will be committed)

此時,如果既不想跟蹤這些文件,也不想再出現同樣的提示,可以使用 git clean 命令刪除文件

  • git clean -n 不會真的刪除文件,只是告知哪些文件會被刪除
  • git clean -f 刪除當前目錄下沒被跟蹤的文件,但不會刪除 .gitignore 文件里指定的文件,盡管這些文件沒有被跟蹤
  • git clean -f <path> 刪除指定路徑下的沒有被track過的文件
  • git clean -d 連 untracked 的目錄也一起刪掉
  • git clean -xf 刪除當前目錄下所有沒有track過的文件. 不管他是否是.gitignore文件里面指定的文件夾和文件

常用命令簡寫

簡寫 完整命令 備注
gst git status
gup git pull --rebase
ga git add

備注:可以通過編輯 .gitconfig 文件增刪 git 簡寫命令

參考

  1. GitHub教程
  2. git pull命令
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容