Git使用说明

Git 使用说明

本地

1. linux命令

> 表示写入
$ echo "wodiunima" > a.txt;
$ cat a.txt 
wodiunima
>> 表示追加
$ echo "____wodiuleilaomou">> a.txt
$ cat a.txt
wodiunima____wodiuleilaomou
# git 不会把控文件夹放入到版本库中

2. 配置用户

$ git config --global user.name kevin
$ git config --global user.email kevin@163.com
# 查看配置信息
$ git config --global --list

3. 创建仓库

#在一个本地目录中
$ git init
#获取远端
$ git clone [url]
# 查看本地状态
$ ll
$ git status
# 查看暂存区中的内容
$ git ls-files

4 .add 添加到cache区域

$ kevin@Kevin:~/myprojects/gitlearn$ cat a.txt
$ wocao niubi a ****************************
$ kevin@Kevin:~/myprojects/gitlearn$ ll
total 16
drwxrwxr-x  3 kevin kevin 4096 Oct 23 15:11 ./
drwxrwxr-x 13 kevin kevin 4096 Oct 23 15:07 ../
drwxrwxr-x  7 kevin kevin 4096 Oct 23 15:10 .git/
-rw-rw-r--  1 kevin kevin   43 Oct 23 15:11 a.txt
$ kevin@Kevin:~/myprojects/gitlearn$ git status
On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        a.txt# 这里没有add是红的

nothing added to commit but untracked files present (use "git add" to track)
$ kevin@Kevin:~/myprojects/gitlearn$ git add a.txt
$ kevin@Kevin:~/myprojects/gitlearn$ git status
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage) #提示你使用 git rm --cached a.txt 删add
        new file:   a.txt # 绿色
# 添加该文件夹下的所有文件
$ git add .

5. git 提交 commit

  • git cimmit 只会提交cache里的文件 可以使用通配符 * ,* 可以匹配多个文件
$ kevin@Kevin:~/myprojects/gitlearn$ vim b.txt
$ kevin@Kevin:~/myprojects/gitlearn$ cat b.txt
######################### test
$ kevin@Kevin:~/myprojects/gitlearn$ ls
a.txt  b.txt
$ kevin@Kevin:~/myprojects/gitlearn$ git status
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   a.txt

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

$ kevin@Kevin:~/myprojects/gitlearn$ git commit -m "提交cache里的a.txt"
[master (root-commit) 3f9dff5] 提交cache里的a.txt
 1 file changed, 1 insertion(+)
 create mode 100644 a.txt
$ kevin@Kevin:~/myprojects/gitlearn$ git commit
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        b.txt

nothing added to commit but untracked files present (use "git add" to track)
  • git log 查看提交记录
$ kevin@Kevin:~/myprojects/gitlearn$ git log
commit 3ae2c6fe38eede4b422efca0c399bcd9b988d5e8 (HEAD -> master)
Author: kevin <kevin@163.com>
Date:   Mon Oct 23 15:39:31 2023 +0800

    这是第二次提交

commit 3f9dff5ff45032db3d7840ea64b6f07d722328a2
Author: kevin <kevin@163.com>
Date:   Mon Oct 23 15:33:25 2023 +0800

    提交cache里的a.txt```

* 到本地仓库

```bash
在这里插入代码片
  • 到远端

6. 回退

  • git reset 回退
$ git reset --soft //回退到某一版本并且保留工作区和缓存区
$ git reset --hard //回退到某一版本并且丢弃工作区和缓存区
$ git reset --mixed //回退到某一版本并且保留工作区和丢弃缓存区
$ kevin@Kevin:~/myprojects/gitlearn/gitreset$ git add file1.txt
$ kevin@Kevin:~/myprojects/gitlearn/gitreset$ git commit -m "commit 1"
[master (root-commit) 823127c] commit 1
 1 file changed, 1 insertion(+)
 create mode 100644 file1.txt
$ kevin@Kevin:~/myprojects/gitlearn/gitreset$ git add file2.txt
$ kevin@Kevin:~/myprojects/gitlearn/gitreset$ git commit -m "commit 2"
[master 7434e92] commit 2
 1 file changed, 1 insertion(+)
 create mode 100644 file2.txt
$ kevin@Kevin:~/myprojects/gitlearn/gitreset$ git add file3.txt
$ kevin@Kevin:~/myprojects/gitlearn/gitreset$ git commit -m "commit 3"
[master f4c24ee] commit 3
 1 file changed, 1 insertion(+)
 create mode 100644 file3.txt
$ kevin@Kevin:~/myprojects/gitlearn/gitreset$ git log
commit f4c24eeebe8c1adcd91a3bcfa9e298a08bb2bdb5 (HEAD -> master)
Author: kevin<kevin@163.com>
Date:   Mon Oct 23 15:53:33 2023 +0800

    commit 3

commit 7434e92a76c95381dfdaefcaab3c18db9693e92b
Author: kevin<kevin@163.com>
Date:   Mon Oct 23 15:53:24 2023 +0800

    commit 2

commit 823127cf89afc7949c0ad1c6763153dd8910ad04
Author: kevin <kevin@163.com>
Date:   Mon Oct 23 15:53:11 2023 +0800

    commit 1
# 一行一行的查看提交历史
$ kevin@Kevin:~/myprojects/gitlearn/gitreset-soft$ git log --oneline
f4c24ee (HEAD -> master) commit 3//版本号 提交备注
7434e92 commit 2
823127c commit 1
# 统一回退带第二个版本
# 回退 ---soft
$ kevin@Kevin:~/myprojects/gitlearn/gitreset-soft$ git reset --soft 7434e92
$ kevin@Kevin:~/myprojects/gitlearn/gitreset-soft$ git log --oneline
7434e92 (HEAD -> master) commit 2
823127c commit 1
$ kevin@Kevin:~/myprojects/gitlearn/gitreset-soft$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   file3.txt #绿色 第三个还在cache里面

# 回退 ---hard
$ kevin@Kevin:~/myprojects/gitlearn/gitreset-hard$ git reset --hard 7434e92
HEAD is now at 7434e92 commit 2
$ kevin@Kevin:~/myprojects/gitlearn/gitreset-hard$ git log --oneline
7434e92 (HEAD -> master) commit 2
823127c commit 1
$ kevin@Kevin:~/myprojects/gitlearn/gitreset-hard$ git status
On branch master
nothing to commit, working tree clean #所有的都没了

# 回退 ---mixed
$ kevin@Kevin:~/myprojects/gitlearn/gitreset-mixed$ git reset --mixed 7434e92
$ kevin@Kevin:~/myprojects/gitlearn/gitreset-mixed$ git log --oneline
7434e92 (HEAD -> master) commit 2
823127c commit 1
$ kevin@Kevin:~/myprojects/gitlearn/gitreset-mixed$ git status
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        file3.txt #红色文件3 还在工作区

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

7. git diff 查看差异(默认工作区和cache 比较)

  • 查看三个区域的差异,工作 cache 仓库
# 比较工作区和cache  git diff
kevin@Kevin:~/myprojects/gitlearn/gitreset$ vim file3.txt
kevin@Kevin:~/myprojects/gitlearn/gitreset$ git diff # 比较工作区和cache
diff --git a/file3.txt b/file3.txt # 变更文件
index 55bd0ac..ca4ce02 100644   #40为的hash 100644是文件权限
--- a/file3.txt
+++ b/file3.txt
@@ -1 +1 @@
-333
+我改了file3
# 比较工作区和版本库 git diff HEAD
kevin@Kevin:~/myprojects/gitlearn/gitreset$ git add .
kevin@Kevin:~/myprojects/gitlearn/gitreset$ git diff
kevin@Kevin:~/myprojects/gitlearn/gitreset$ git diff HEAD
diff --git a/file3.txt b/file3.txt
index 55bd0ac..ca4ce02 100644
--- a/file3.txt
+++ b/file3.txt
@@ -1 +1 @@
-333
+我改了file3
# 比较cache和版本库  git diff --cached
kevin@Kevin:~/myprojects/gitlearn/gitreset$ git diff --cached
diff --git a/file3.txt b/file3.txt
index 55bd0ac..ca4ce02 100644
--- a/file3.txt
+++ b/file3.txt
@@ -1 +1 @@
-333
+我改了file3
kevin@Kevin:~/myprojects/gitlearn/gitreset$ git commit -m "git diff --cached"
[master 2abb63a] git diff --cached
 1 file changed, 1 insertion(+), 1 deletion(-)
kevin@Kevin:~/myprojects/gitlearn/gitreset$ git diff --cached
kevin@Kevin:~/myprojects/gitlearn/gitreset$

  • 查看不同版本差异 git diff [版本号] [版本号]
kevin@Kevin:~/myprojects/gitlearn/gitreset$ git diff 2abb63a f4c24ee
diff --git a/file3.txt b/file3.txt
index ca4ce02..55bd0ac 100644
--- a/file3.txt
+++ b/file3.txt
@@ -1 +1 @@
-我改了file3
+333
# 和上一个版本的比较
$ git diff HEAD~ HEAD
# 或者
$ git diff HEAD^ HEAD
# 之前的第二个版本
$ git diff HEAD~2 HEAD 
# 可以只差看一个文件
$ git diff HEAD~ HEAD filename
  • 查看不同分支

8. 版本库中删除

#在本地工作区删除
# 方法1 
$ kevin@Kevin:~/myprojects/gitlearn/gitreset$ rm file1.txt
$ kevin@Kevin:~/myprojects/gitlearn/gitreset$ git ls-files
file1.txt
file2.txt
file3.txt
$ kevin@Kevin:~/myprojects/gitlearn/gitreset$ git add .
$ kevin@Kevin:~/myprojects/gitlearn/gitreset$ git ls-files
file2.txt
file3.txt
# 方法2 工作区和暂存区全部都删除了
kevin@Kevin:~/myprojects/gitlearn/gitreset$ git rm file2.txt
rm 'file2.txt'
kevin@Kevin:~/myprojects/gitlearn/gitreset$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        deleted:    file1.txt
        deleted:    file2.txt
# 方法2 暂存区删除了文件file2.txt
kevin@Kevin:~/myprojects/gitlearn/gitreset$ git rm --cached file2.txt
rm 'file2.txt'

9. 可忽略文件.gitignore

  • 应该忽略的文件,
    • 系统或软件生成的文件
    • 编译残生的中间文件和结果
    • 日志文件,缓存文件,临时文件
    • 涉及身份,密码,口令,密钥等敏感信息的文件
  • gitignore 文件的匹配规则
    • 从上到下逐行匹配,每一行表示一个忽略模式
    • #是注释
    • 其中 * 匹配任意字符
    • ? 匹配单个字符
    • [ ] 表示匹配 [ ] 里的单个字符 [ abc ] 匹配a ,b ,c中的一个,可以使用 [a-z] 或 [0-9]
    • 其中 ** 表示匹配任意的中间目录
    • ! 取反 例如 忽略 *.a 保留 !lib.a
# 如何设置呢
# 就是把要忽略的东西加到 .gitignore文件里就行了 ,前提是不能忽略已经添加到版本库里的文件
kevin@Kevin:~/myprojects/gitlearn/gitreset$ echo "systemlog&&&&&&&&&&&&" >system.log
kevin@Kevin:~/myprojects/gitlearn/gitreset$ ls
file3.txt  system.log
kevin@Kevin:~/myprojects/gitlearn/gitreset$ echo system.log > .gitignore
# 也可以使用通配符
# 在.gitignore 文件里加上*.log所有的log文件都会被忽略
# 忽略文件夹时,文件夹名称后要加 /

远端

配置ssh密钥

$ cd
$ cd .ssh
$ ssh-keygen -t rsa -b 4096
# 会生成一个id_rsa 和 id_rsa.pub文件
# 打开公钥文件pub
# 复制公钥文件内容
# 打开 github 的setting 里面有ssh和GPG配置选项

1. 推送

  • 从远端克隆一个再push
$ git clone [ssh url]
$ git add .
$ git commit -m "test"
$ git push
  • 本地直接创建push到远端
    • 关联本地仓库和远端仓库
$ git remote add origin git@github.com:wocao/gangan.git
# origin 是远程仓库别名 后面那一串就是你的github 的ssh地址
#远端信息
$ kevin@Kevin:~/myprojects/gitlearn/localrepo$ git remote -v
origin  git@github.com:wocao/gangan.git (fetch)
origin  git@github.com:wocao/gangan.git (push)
# 出现问题
$ kevin@Kevin:~/myprojects/gitlearn/localrepo$ git push -u origin main
error: src refspec main does not match any
error: failed to push some refs to 'git@github.com:wocao/gangan.git'


# 解决方法
# 方法 1 强行push 无视警告,README和license我不要了。
$ git push --force


# 方法 2 试着获取远程仓库的初始提交( initial commit),就是README和
#license这两个文件的commit,在此基础上 rebase commit。但是这种方法
# 可能有点棘手,不如暴力提交简单。
$ git fetch origin  //获取初始提交
$ git rebase origin/mian 


# 方法 3 试着合并初始提交与你的提交,这也是我最推荐的方法:
$ git fetch origin 
$ git merge --allow-unrelated-histories origin/main
# 会出现一个让你填说明的界面直接ctrl c 跳出即可
$ git push origin main 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值