git的使用(一)
git —version 展示git的版本
1 2 | tanya ~$ git --version git version 2.22 . 0 |
最小配置
git config —global user.name ‘your_name’ git config —global user.email ‘your_emai@163.com’
config 的三个作用域,设置缺省等于local
git config —local local只对仓库有效
git config --global global对登录用户所有仓库游侠
git config --system system对系统的所有用户有效
显示config的配置,加 —list
1 2 3 | git config --list — local git config --list —global git config --list --system |
清除
git config --unset --local user.name
git config --unset --global user.name
git config --unset --system user.name
优先级
local > global > system
建git仓库
两种⽅式:
1. ⽤ Git 之前已经有项⽬代码
cd 项⽬代码所在的⽂件夹
git init
2. ⽤ Git 之前还没有项⽬代码
cd 某个⽂件夹
git init your_project #会在当前路径下创建和项⽬名称同名的⽂件夹
cd your_project
GIT基础
git add
实现对指定文件的追踪,添加到暂缓区
git status
查看 哪些文件处于什么状态
1 2 3 | $ git status On branch master nothing to commit, working directory clean |
这说明你现在的工作目录相当干净,所有已跟踪文件在上次提交后都未被更改过。还表明上面当前目录下没有出现任何处于未追踪状态的新文件
1 2 3 4 5 6 7 8 9 10 | $ git status On branch master Untracked files: (use "git add <file>..." to include in what will be committed) README nothing added to commit but untracked files present (use "git add" to track) |
在状态报告中可以看到新建的 README 文件出现在 Untracked files 下面。 未跟踪的文件意味着 Git 在之前的快照(提交)中没有这些文件;
1 2 3 4 5 6 | $ git status -s M README MM Rakefile A lib /git .rb M lib /simplegit .rb ?? LICENSE.txt |
git status -s 或者git status --short将得到一种更为紧凑格式输出
git diff
查看具体尚未暂存的文件更新了哪些地方
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | git diff diff --git a /CONTRIBUTING .md b /CONTRIBUTING .md index 8ebb991..643e24f 100644 --- a /CONTRIBUTING .md +++ b /CONTRIBUTING .md @@ -65,7 +65,8 @@ branch directly, things can get messy. Please include a nice description of your changes when you submit your PR; if we have to read the whole diff to figure out why you're contributing in the first place, you're less likely to get feedback and have your change -merged in . +merged in . Also, split your changes into comprehensive chunks if your patch is +longer than a dozen lines. If you are starting to work on a particular area, feel free to submit a PR that highlights your work in progress (and note in the PR title that it's |
git diff 本身只显示尚未暂存的改动,而不是自上次提交以来所做的所有改动。 所以有时候你一下子暂存了所有更新过的文件后,运行 git diff 后却什么也没有,就是这个原因。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $ git diff --staged diff --git a /README b /README new file mode 100644 index 0000000..03902a1 --- /dev/null +++ b /README @@ -0,0 +1 @@ +My Project git diff --cached 或者git diff —staged查看已暂存的将要添加到下次提交里的内容,就是已经add过的 git commit 提交更新 -m后面 $ git commit -m "Story 182: Fix benchmarks for speed" [master 463dc4f] Story 182: Fix benchmarks for speed 2 files changed, 2 insertions(+) create mode 100644 README |
git commit
提交到版本历史
在git commit之前,请一定要确认还有什么修改过的或新建的文件还没有 git add 过,否则提交的时候不会记录这些还没暂存起来的变化。 这些修改过的文件只保留在本地磁盘。 所以,每次准备提交前,先用 git status 看下,是不是都已暂存起来了, 然后再运行提交命令 git commit,可以在 commit 命令后添加 -m 选项,将提交信息与命令放在同一行
1 2 3 4 | $ git commit -m "Story 182: Fix benchmarks for speed" [master 463dc4f] Story 182: Fix benchmarks for speed 2 files changed, 2 insertions(+) create mode 100644 README |
跳过使用暂存区域
只要在提交的时候,给 git commit 加上 -a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $ git status 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: CONTRIBUTING.md no changes added to commit (use "git add" and /or "git commit -a" ) $ git commit -a -m 'added new benchmarks' [master 83e38c7] added new benchmarks 1 file changed, 5 insertions(+), 0 deletions(-) |
git rm
移除文件
要从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除(确切地说,是从暂存区域移除),然后提交。 可以用 git rm 命令完成此项工作,并连带从工作目录中删除指定的文件,这样以后就不会出现在未跟踪文件清单中了。
如果只是简单地从工作目录中手工删除文件,运行 git status 时就会在 “Changes not staged for commit” 部分(也就是 未暂存清单)看到:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | $ rm PROJECTS.md $ git status On branch master Your branch is up-to- date with 'origin/master' . Changes not staged for commit: (use "git add/rm <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) deleted: PROJECTS.md no changes added to commit (use "git add" and /or "git commit -a" ) 然后再运行 git rm 记录此次移除文件的操作: $ git rm PROJECTS.md rm 'PROJECTS.md' $ git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) deleted: PROJECTS.md |
下一次提交时,该文件就不再纳入版本管理了。 如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f(译注:即 force 的首字母)。 这是一种安全特性,用于防止误删还没有添加到快照的数据,这样的数据不能被 Git 恢复。
另外一种情况是,我们想把文件从 Git 仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作目录中。 换句话说,你想让文件保留在磁盘,但是并不想让 Git 继续跟踪。 当你忘记添加 .gitignore文件,不小心把一个很大的日志文件或一堆 .a 这样的编译生成文件添加到暂存区时,这一做法尤其有用。 为达到这一目的,使用 --cached 选项:
1 | $ git rm --cached README |
git log
查看提交历史
默认不用任何参数的话,git log 会按提交时间列出所有的更新,最近的更新排在最上面。 正如你所看到的,这个命令会列出每个提交的 SHA-1 校验和、作者的名字和电子邮件地址、提交时间以及提交说明。
git log 有许多选项可以帮助你搜寻你所要找的提交, 接下来我们介绍些最常用的。
一个常用的选项是 -p,用来显示每次提交的内容差异。 你也可以加上 -2 来仅显示最近两次提交
撤销操作
有时候我们提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了。 此时,可以运行带有 --amend 选项的提交命令尝试重新提交:
1 | $ git commit --amend |
这个命令会将暂存区中的文件提交。 如果自上次提交以来你还未做任何修改(例如,在上次提交后马上执行了此命令),那么快照会保持不变,而你所修改的只是提交信息。文本编辑器启动后,可以看到之前的提交信息。 编辑后保存会覆盖原来的提交信息。
例如,你提交后发现忘记了暂存某些需要的修改,可以像下面这样操作:
1 2 3 | $ git commit -m 'initial commit' $ git add forgotten_file $ git commit --amend |
最终你只会有一个提交 - 第二次提交将代替第一次提交的结果。
取消暂存的文件
你已经修改了两个文件并且想要将它们作为两次独立的修改提交,但是却意外地输入了 git add * 暂存了它们两个。 如何只取消暂存两个中的一个呢? git status 命令提示了你:
1 2 3 4 5 6 7 8 9 | $ git add * $ git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) renamed: README.md -> README modified: CONTRIBUTING.md |
在 “Changes to be committed” 文字正下方,提示使用 git reset HEAD <file>... 来取消暂存。 所以,我们可以这样来取消暂存 CONTRIBUTING.md 文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | $ git reset HEAD CONTRIBUTING.md Unstaged changes after reset: M CONTRIBUTING.md $ git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) renamed: README.md -> README 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: CONTRIBUTING.md |
撤销对文件的修改
如果你并不想保留对 CONTRIBUTING.md 文件的修改怎么办?
1 2 3 4 5 6 7 8 9 10 | $ git checkout -- CONTRIBUTING.md $ git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) renamed: README.md -> README |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!