加载中...
git使用技巧
发表于:2022-10-26 |

git的工作流程一般是这样的:

  • 使用git add将工作区(workspace)的文件提交到暂存区(Index)
  • 使用commit将暂存区(Index)提交到本地仓库(Repository)
  1. 在工作中添加,修改文件

  2. 将需要进行的版本管理的文件放入暂存区域

  3. 将暂存区域文件提交到git仓库

    因此,git管理的文件有三种状态:已修改(modified),已暂存(staged),已提交(committed)

上面j讲的是Git的基本配置和项目搭建,接下来才是关于如何操作文件内容

git的4个区

  • 工作区(Working Area)

    就相当于我们的工作空间的目录,我们代码本地存放的地方。

  • 暂存区(缓冲)(Stage)

    也称作Index,用来跟踪已暂存的文件,一般是存在.git下的index文件,所以有时也称暂存区为索引。

  • 本地仓库(Local Repository)

  • 远程仓库(Remote Repository)

文件的五种状态

版本控制就是对文件的版本控制,要对文件进行修改,提交等操作,首先要知道文件当前什么状态,不然可能会提交了现在还不想提交的文件,或者要提交的文件没提交上。

  • Untracked:未跟踪,此文件在文件夹中,但并没有加入到git仓库,不参与版本控制.通过git add 状态变为Staged.
  • Unmodify:文件已经入库,未修改,即版本库中的文件快照内容与文件夹完全一致.这种类型的文件有两种去处,如果它被修改,而变为Modified.如果使用git rm 移出版本库,则成为Untracked文件.
  • Modified(已修改):文件已修改,仅仅是修改,并没有进行其他的操作.这个文件也有两个去处,通过git add可进入暂存staged状态,使用git checkout,则丢弃修改过,返回unmodify状态,这个git checkout即从库中取出文件,覆盖当前修改!
  • Staged(已暂存):暂存状态,执行git commit则将修改同步到库中,这时库中的文件和本地文件又变为一致,文件为Unmodify状态.执行git reset HEAD filename取消暂存,文件状态为Modified
  • 已提交(Committed)
  • 已推送(Pushed)

image-20230101164700294

查看文件状态

上面说的文件的4种状态,通过如下命令可以查看到文件的状态:

1
2
3
4
5
6
7
8
9
10
11
#查看制定文件状态
git status [文件名]

#查看所有文件状态
git status

#添加所有文件到暂存区
git add .

#提交暂存区中的内容到本地仓库 -m:提交的信息
git commit -m "信息"

忽略文件

有些时候我们不想把某些文件纳入版本控制中,比如数据库文件,临时文件,设计文件等

在主目录下建立“.gitignore”文件,此文件有如下规则:

1.忽略文件中的空行或以井号(# )开始的行将会被忽略。
2.可以使用Linux通配符。例如∶星号(*)代表任意多个字符,问号(﹖)代表一个字符,方括号([abc] )代表可选字符范围,大括号( {string1,string2……})代表可选的字符串等。
3.如果名称的最前面有一个感叹号( !),表示例外规则,将不被忽略。
4.如果名称的最前面是一个路径分隔符(/ ),表示要忽略的文件在此目录下,而子目录中的文件不忽略。
5.如果名称的最后面是一个路径分隔符(/ ),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)。

例如以下这些实例:

1
2
3
4
5
*.txt   #忽略所有的.txt结尾的文件
!lib.txt #但lib.txt除外
/temp #进忽略项目根目录下的TODO文件,不包括其他目录temp
bulid/ #忽略bulid目录下的所有文件
doc/*.txt #会忽略doc/notes.txt 但是不包括doc/sever/arch.txt

git 修改.gitignore后生效

有时在使用过称中,需要对.gitignore文件进行再次的修改。这次我们需要清除一下缓存cache,才能是.gitignore 生效。

1
2
3
4
git rm -r --cached .  #清除缓存
git add . #重新trace file
git commit -m "update .gitignore" #提交和注释
git push origin master #可选,如果需要同步到remote上的话

配置git账户

1
2
3
4
5
6
git config --global --list  # 查看当前git的配置信息
git config user.name
git config user.email

git config --global user.name "username" # 修改
git config --global user.email "email"

连接远程仓库和多远程仓库

Hexo折腾笔记:git分别配置Github和Gitee

  1. 清除全局设置
1
2
3

git config --global --unset user.name

  1. 生成ssh-key

    1
    2
    3
    4
    #github
    ssh-keygen -t rsa -f ~/.ssh/id_rsa.github -C "邮箱"
    #gitee
    ssh-keygen -t rsa -f ~/.ssh/id_rsa.gitee -C "邮箱"

    id_rsa.github可以换成你可以辨别的名字,user/.ssh / 下就可以看到生成的文件.

  2. 识别 SSH 新的私钥

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
       ```



    # git接管文件夹

    ```bash
    git init # 初始化git仓库 (mac中Command+Shift+. 可以显示隐藏文件)
    git status # 查看文件状态
    git add # 文件列表 追踪文件
    git commit -m # 提交信息 向仓库中提交代码
    git log # 查看提交记录

git分支常用命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#列出本地所有分支
git branch

#列出所有远程分支
git branch -r

#新建一个分支,但依然停留在当前分支
git branch 分支名

#新建一个分支,并切换到该分支
git checkout -b 分支名

#合并指定分支到当前分支
git merge 分支名

#删除分支
git branch -d 分支名

#删除远程分支
git push origin --delete 分支名
git branch -dr 分支名

连接远程仓库(可见仓库提供方法)

1
git remote add origin git@github.com:xxx.git

查看库

查看该库的本地分支

1
git branch

git 查看已经放到本地仓库的文件

1
git ls-files

删除 Git 仓库中的文件

1
2
3
4
5
$ git rm <filename>

$ git commit -m "commit message"

$ git push origin branch_name
1
2
3
4
#查看最后一次提交记录的修改文件信息
git show --raw
#查看所有
git log --stat

git文件比较

1
2
3
4
5
git diff  命令,默认查看的就是 工作区 和 暂存区之间文件的差异
1.git diff : 查看工作区和暂存区之间所有的文件差异
2.git diff -- 文件名:查看具体某个文件 在工作区和暂存区之间的差异
3.git diff -- 文件名1 文件名2 文件名3:查看多个文件在工作区和暂存区之间的差异
【注意】:查看具体文件的时候 `--` 和`文件名` 之间有一个 `空格`,`文件名1` 和 `文件名2` 和 `文件名3`之间也有`空格

撤回

git checkout 用法总结

git checkout 丢弃工作区的修改,并用最近一次的commit内容还原到当前工作区(对文件中内容的操作,无法对添加文件、删除文件起作用

git checkout HEAD^ 将指定commit提交的内容(HEAD^表示上一个版本)还原到当前工作区

git checkout 将指定分支的指定提交内容还原到当前分支工作区

git restore

git restore —staged 将暂存区的修改重新放回工作区(包括对文件自身的操作,如添加文件、删除文件

git restore 丢弃工作区的修改(不包括对文件自身的操作,如添加文件、删除文件

git reset回退

--soft--mixed以及--hard是三个恢复等级。

  • 使用--soft就仅仅将头指针恢复,已经add的暂存区以及工作空间的所有东西都不变。
  • 如果使用--mixed,就将头恢复掉,已经add的暂存区也会丢失掉,工作空间的代码什么的是不变的。
  • 如果使用--hard,那么一切就全都恢复了,头变,aad的暂存区消失,代码什么的也恢复到以前状态。

  • git reset --hard :进行已修改或者暂存,但未提交文件的回退

1
2
3
4
5
6
git reset --hard head #当前版本
git reset --hard HEAD^ #回退到上一个版本
git reset --hard HEAD^^ #回退到上上一个版本
git reset --hard HEAD~3 #回退到往上3个版本
git reset --hard HEAD~10 #回退到往上10个版本

  • git reset --hard origin/master ”进行已提交,但未推送的版本回退
  • 1: git reset --hard HEAD^ 2:git push -f 这两条命令是进行已提交且推送的回退,
    • git reset --hard HEAD^为先回退到上一个版本
    • git push -f是进行强制推送,覆盖远程分支。

github访问

1
2
3
# hosts文件修改:C:\Windows\System32\drivers\etc\hosts
# 去这里看方法 https://gitee.com/snow2zhou/GitHub520
# ipconfig /flushdns

换行符警告和解决

最简单的一种办法就是把自动转换功能关掉即可。
输入命令 :git config core.autocrlf false (仅对当前git仓库有效)
git config --global core.autocrlf false (全局有效,不设置推荐全局)

修改gitigone后生效

1
2
3
4
git rm -r --cached .  #清除缓存
git add . #重新trace file
git commit -m "update .gitignore" #提交和注释
git push origin master #可选,如果需要同步到remote上的话

参考连接

git 使用简易指南 (bootcss.com)

git linux 命令 在线中文手册 (51yip.com)

菜鸟git入门(.runoob.com/)

上一篇:
vim使用教程
下一篇:
next使用的一些坑