Unix & Git基本命令

Unix 常見指令

(下面的file是指 文件名+后綴 的)

  • s –l 列出當前目錄下的所有內容(文件\文件夾)

  • pwd 顯示出當前目錄的名稱

  • cd 改變當前操作的目錄

  • who 顯示當前用戶名

  • clear 清屏

  • mkdir dir_name 新建一個目錄

  • touch file 新建一個文件(文件不存在才會新建)

  • open file/dir_name 打開一個文件\文件夾

  • 按一下tab鍵,可以自動補齊指令名稱、文件名、文件夾名等

  • ls -ah 查看隱藏的文件

  • rm file 刪除文件


Git命令

具體參考 git教程 - 廖雪峰的官方網站

對于版本倉庫,跟蹤的文件的改動,而不是文件的內容。
git的命令是區分大小寫的。

—— 創建git倉庫

  • git init 初始化git倉庫

—— 把文件添加進git進行管理

添加一個文件,兩個步驟

  • 1、git add 文件名.后綴
  • 2、git commit -m"要添加的備注內容"
    (問題:忘記 -m后命令行彈出來的那些東西怎么弄)

—— 怎么通過提交記錄查看是否提交成功

怎么看當前的提交是否提交到了git?有提交就有記錄,通過查看記錄

  • git log
    會顯示的時間個當初提交的備注

### —— 查看詳細的Log信息
* git log --pretty=oneline

amqrMBP:learngit amqr$ git log --pretty=oneline
e15c6063a6c70728fcedf1b466e355a39cfb9242 the add under the GPL
21f61335c295f9074cccec86cb2c0554b997700d allow add
1c50901d96e3db42f4f91c68da02f630a8b62b29 first commit readme

比如這樣這一串 e15c6063a6c70728fcedf1b466e355a39cfb9242 是提交的版本號(id)

—— 查看git的狀態

  • git status
    如果顯示 “nothing to commit, working directory clean”那么就代表是正常的,無任何沖突的
    是修改過,還是正常,還是沖突等

—— 查看文件被修改的內容與之前的區別

  • git diff

—— 版本回退

  • git reset --hard^
  • git reset --hard^^
  • git reset --hard~3

在Git中,用HEAD表示當前版本。

git reset --hard^ 表示往上回退一個版本
git reset --hard^^ 表示往上回退兩個版本
git reset --hard 1c50901 表示回退到指定版本

這個1c50901就是 git log --pretty=oneline 命令得到的那些版本的前面的一長串數字的前面幾個數字,我們取一定的位數足以代表就可以了。

amqrMBP:learngit amqr$ git log --pretty=oneline
e15c6063a6c70728fcedf1b466e355a39cfb9242 the add under the GPL
21f61335c295f9074cccec86cb2c0554b997700d allow add
1c50901d96e3db42f4f91c68da02f630a8b62b29 first commit readme

amqrMBP:learngit amqr$ git reset --hard HEAD^
HEAD is now at 21f6133 allow add

amqrMBP:learngit amqr$ git log --pretty=oneline
21f61335c295f9074cccec86cb2c0554b997700d allow add
1c50901d96e3db42f4f91c68da02f630a8b62b29 first commit readme
amqrMBP:learngit amqr$ 

—— 查看版本提交和回退的總的記錄

  • git reflog
amqrMBP:learngit amqr$ git reflog
21f6133 HEAD@{0}: reset: moving to HEAD^
e15c606 HEAD@{1}: commit: the add under the GPL
21f6133 HEAD@{2}: commit: allow add
1c50901 HEAD@{3}: commit (initial): first commit readme

—— 回退后還怎么跳轉到新的版本

amqrMBP:learngit amqr$ git reflog
21f6133 HEAD@{0}: reset: moving to HEAD^
e15c606 HEAD@{1}: commit: the add under the GPL
21f6133 HEAD@{2}: commit: allow add
1c50901 HEAD@{3}: commit (initial): first commit readme

amqrMBP:learngit amqr$ git reset --hard e15c606
HEAD is now at e15c606 the add under the GPL

======= 以上算是小小地說了一下增刪改查,接下說一下暫存區的概念 =====

Git的版本庫里存了很多東西,
其中最重要的就是稱為stage(或者叫index)的暫存區
還有Git為我們自動創建的第一個分支master,以及指向master的一個指針叫HEAD。

我們把文件往Git版本庫里添加的時候,是分兩步執行的:

第一步是用git add把文件添加進去,實際上就是把文件修改添加到暫存區;
第二步是用git commit提交更改,實際上就是把暫存區的所有內容提交到當前分支。

因為我們創建Git版本庫時,Git自動為我們創建了唯一一個master分支,所以,現在,git commit就是往master分支上提交更改。

你可以簡單理解為,
需要提交的文件修改通通放到暫存區,然后,一次性提交暫存區的所有修改。

add和commit的操作對應的state和head簡圖.png

具體學習點擊這里

—— 查看工作區和版本庫的不同

  • git diff HEAD -- 文件名.后綴

每次修改,如果不add到暫存區,那就不會加入到commit中。

—— 撤銷add到工作區的內容(只add到了工作區,還沒有commit到branch)

方法一:
git checkout -- file 比如 git checkout -- readme.txt
就可以把你剛剛add到暫存區的所修改的內容撤銷掉,也可以相當于恢復到之前最新的commit的狀態
git checkout -- file命令中的--很重要,沒有--,就變成了“切換到另一個分支”的命令 , 以后會涉及到的。

方法二:

  • git reset HEAD file 可以把暫存區的修改撤銷掉(unstage),重新放回工作區
    比如 git reset HEAD readme.txt

—— 已經把錯誤的內容add并且commit到了分支了,還可以補救嗎?可以,前提是還沒有推送到遠程庫。

使用 git reset 補救(前提是還沒有推送到遠程庫)。

—— 刪除提交到版本庫的branch的文件(這這是刪除版本庫的,本地的還在,想刪除本地的文件的話還需要自己刪除)

  • git rm file
    比如 git rm test.txt

—— 本地誤刪了一個文件,從版本拿到那個文件恢復過來到本地(前提是之前這個文件已經提交到版本庫)

  • git checkout -- ?file
    比如 git checkout -- test.txt
    git checkout其實是用版本庫里的版本替換工作區的版本,無論工作區是修改還是刪除,都可以還原。

========= 接下來是建立遠程倉庫(和github結合) ==============

建立遠程倉庫(和github結合)

現在已經在本地創建了一個Git倉庫后,又想在GitHub創建一個Git倉庫,并且讓這兩個倉庫進行遠程同步,這樣,GitHub上的倉庫既可以作為備份,又可以讓其他人通過該倉庫來協作

首先電腦得有git這個不用說了,我們上面都可以用了肯定有git。

前提準備:

  • git
  • github的賬號

接下里,就是需要 配 .ssh
配好 .ssh之后就可以把綁定到github了
配 .ssh 和 綁定github 請看這里

綁定好之后,我們要知道一件事,把我們的倉庫推到github有兩種是

  • 一種是通過 https
  • 一種是通過 ssh

我們上面的把ssh綁定到github就是為了通過ssh的方式把倉庫推到github

這里說明一點,按照廖雪峰的方式以ssh的方式push,推送失敗,但是只要在

The authenticity of host 'github.com (xx.xx.xx.xx)' can't be established.
RSA key fingerprint is xx.xx.xx.xx.xx.
Are you sure you want to continue connecting (yes/no)?

這個地方寫上 yes
就可以順利地推到github了。

對于以前已經弄過了ssh,怎么查看當初填寫的郵箱名?

打開 .ssh文件夾的 id_rsa.pub ,在文本的最后面就可看到 郵箱名字。

Git的倉庫克隆

git clone 后面加遠倉庫的https或者ssh鏈接

Paste_Image.png

類似于下面這樣子:

$ git clone git@github.com:michaelliao/gitskills.git
Cloning into 'gitskills'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.

$ cd gitskills
$ ls
README.md

分支管理

  • 查看分支:git branch

  • 創建分支:git branch <name>

  • 切換分支:git checkout <name>

  • 創建+切換分支:git checkout -b <name>

  • 合并某分支到當前分支:git merge <name>

  • 刪除分支:git branch -d <name>

分支具體參見

查看沖突合并情況

合并時出現沖突

$ git merge feature1
Auto-merging readme.txt
CONFLICT (content): Merge conflict in readme.txt
Automatic merge failed; fix conflicts and then commit the result.

查看沖突的原因:

$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 2 commits.
#
# Unmerged paths:
#   (use "git add/rm <file>..." as appropriate to mark resolution)
#
#       both modified:      readme.txt
#
no changes added to commit (use "git add" and/or "git commit -a")

解決沖突后 查看沖突合并情況

  • git log --graph
$ git log --graph --pretty=oneline --abbrev-commit
*   59bc1cb conflict fixed
|\\
| * 75a857c AND simple
* | 400b400 & simple
|/
* fec145a branch test
...

--no-ff的方式merge (保留歷史)

儲存工作和和恢復工作區

  • git stash 儲存工作區
  • git stash list 查看儲存的工作區列表
$ git stash list
stash@{0}: WIP on dev: 6224937 add merge

** 恢復兩個辦法:**

方法一:是用git stash apply恢復,但是恢復后,stash內容并不刪除,然后你需要用git stash drop來刪除;

  • git stash apply
  • git stash drop

方法二:另一種方式是用git stash pop,恢復的同時把stash內容也刪了:

  • git stash pop

$ git stash list
stash@{0}: WIP on dev: 6224937 add merge

強行刪除還沒合并的分支

  • git branch -D ?分支名

多人開發

  • 查看遠程庫信息,使用git remote -v;

  • 本地新建的分支如果不推送到遠程,對其他人就是不可見的;

  • 從本地推送分支,使用git push origin branch-name,如果推送失敗,先用git pull抓取遠程的新提交;

  • 在本地創建和遠程分支對應的分支,使用git checkout -b branch-name origin/branch-name,本地和遠程分支的名稱最好一致;

  • 建立本地分支和遠程分支的關聯,使用git branch --set-upstream branch-name origin/branch-name;

  • 從遠程抓取分支,使用git pull,如果有沖突,要先處理沖突。

給分支打上標簽

  • 命令git tag <name>用于新建一個標簽,默認為HEAD,也可以指定一個commit id;

  • git tag -a <tagname> -m "blablabla..."可以指定標簽信息;

  • git tag -s <tagname> -m "blablabla..."可以用PGP簽名標簽;

  • 命令git tag可以查看所有標簽。

  • 命令git push origin <tagname>可以推送一個本地標簽;

  • 命令git push origin --tags可以推送全部未推送過的本地標簽;

  • 命令git tag -d <tagname>可以刪除一個本地標簽;

  • 命令git push origin :refs/tags/<tagname>可以刪除一個遠程標簽。

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

推薦閱讀更多精彩內容