初识Git
一 安装Git
- 配置用户名及邮箱
git config
--global
$ git config --global user.name "Your Name" $ git config --global user.email "email@example.com" -
git config --local $ git config --local user.name "Your Name" $ git config --local user.email "email@example.com"
二 创建版本库
- 新建目录
$ mkdir learngit $ cd learngit - 版本库初始化
$ git init Initialized empty Git repository in /Users/michael/learngit/.git/ - 添加文件到暂存区
$ git add readme.txt - 提交文件到仓库
$ git commit -m "wrote a readme file" - 查看状态
$ 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: readme.txt # no changes added to commit (use "git add" and/or "git commit -a") - 修改对比
$ git diff readme.txt diff --git a/readme.txt b/readme.txt index 46d49bf..9247db6 100644 --- a/readme.txt +++ b/readme.txt @@ -1,2 +1,2 @@ -Git is a version control system. +Git is a distributed version control system. Git is free software.
三 版本回退
- 版本日志
$ git log commit 3628164fb26d48395383f8f31179f24e0882e1e0 Author: Michael Liao <askxuefeng@gmail.com> Date: Tue Aug 20 15:11:49 2013 +0800 append GPL commit ea34578d5496d7dd233c827ed32a8cd576c5ee85 Author: Michael Liao <askxuefeng@gmail.com> Date: Tue Aug 20 14:53:12 2013 +0800 add distributed commit cb926e7ea50ad11b8f9e909c05226233bf755030 Author: Michael Liao <askxuefeng@gmail.com> Date: Mon Aug 19 17:51:55 2013 +0800 wrote a readme file - 简写日志
$ git log --pretty=oneline 3628164fb26d48395383f8f31179f24e0882e1e0 append GPL ea34578d5496d7dd233c827ed32a8cd576c5ee85 add distributed cb926e7ea50ad11b8f9e909c05226233bf755030 wrote a readme file - 返回上一版本
$ git reset --hard HEAD^ - 返回指定版本
$ git reset --hard 3628164 HEAD is now at 3628164 append GPL - 命令历史
$ git reflog ea34578 HEAD@{0}: reset: moving to HEAD^ 3628164 HEAD@{1}: commit: append GPL ea34578 HEAD@{2}: commit: add distributed cb926e7 HEAD@{3}: commit (initial): wrote a readme file - 撤销工作区修改
$ git checkout -- readme.txt - 撤销暂存区修改
$ git reset HEAD readme.txt Unstaged changes after reset: M readme.txt - 删除文件
$ git rm test.txt rm 'test.txt' $ git commit -m "remove test.txt" [master d17efd8] remove test.txt 1 file changed, 1 deletion(-) delete mode 100644 test.txt - 撤消删除
$ git checkout -- test.txt
三 远程仓库
- 创建SSH kEY
$ ssh-keygen -t rsa -C "youremail@example.com" - .ssh/id_rsa 私钥 ./ssh/id_rsa.pub 公钥
- 关联远程仓库
$ git remote add origin git@github.com:xiaobingch/gittest.git - 取消关联远程仓库
$ git remote remove origin - 第一次推送本地内容到远程仓库
$ git push -u origin master - 推送本地最新内容到远程仓库
$ git push origin master - 克隆远程仓库
$ git clone git@github.com:xiaobingch/gittest3.git Cloning into 'gittest3'... remote: Counting objects: 3, done. remote: Total 3 (delta 0), reused 0 (delta 0) Receiving objects: 100% (3/3), done.
四 分支管理
- 创建并切换至分支dev
$ git checkout -b dev Switched to a new branch 'dev' - 查看分支
$ git branch - 创建分支
$ git branch dev - 切换分支
$ git checkout dev - 合并分支(Fast-forword快速模式)删除分支后无log
$ git merge dev Updating d17efd8..fec145a Fast-forward readme.txt | 1 + 1 file changed, 1 insertion(+) - 查看分支合并情况
$ git log --graph --pretty=oneline --abbrev-commit * 59bc1cb conflict fixed |\ | * 75a857c AND simple * | 400b400 & simple |/ * fec145a branch test ... - 删除分支
$ git branch -d dev Deleted branch dev (was fec145a) - 强制上传分支(未合并)
$ git branch -D feature-vulcan Deleted branch feature-vulcan (was 756d4af). - 冲突:Git用
<<<<<<<
,=======
,>>>>>>>
标记出不同分支的内容 - 合并分支(– no-ff普通模式)删除分支后保留log
$ git merge --no-ff -m "merge with no-ff" dev Merge made by the 'recursive' strategy. readme.txt | 1 + 1 file changed, 1 insertion(+) - 储藏工作现场
$ git stash Saved working directory and index state WIP on dev: 6224937 add merge HEAD is now at 6224937 add merge - 恢复工作现场
$ git stash pop//恢复后删除stash内容 $ git stash apply stash@{0}//恢复后不删除stash内容 - 查看stash列表
$ git stash list stash@{0}: WIP on dev: 6224937 add merge - 删除stash
$ git stash drop - 查看远程分支信息
$ git remote -v origin git@github.com:michaelliao/learngit.git (fetch) origin git@github.com:michaelliao/learngit.git (push) - 推送到远程分支
$ git push origin master - 抓取远程分支
$ git pull Auto-merging hello.py CONFLICT (content): Merge conflict in hello.py Automatic merge failed; fix conflicts and then commit the result
五 标签管理
- 添加标签
$ git tag v1.0 - 添加带有说明的标签
$ git tag -a v0.1 -m "version 0.1 released" 3628164 - 查看标签
$ git tag v1.0 - 查看标签详细信息
$ git show v0.9 commit 622493706ab447b6bb37e4e2a2f276a20fed2ab4 Author: Michael Liao <askxuefeng@gmail.com> Date: Thu Aug 22 11:22:08 2013 +0800 add merge ... - 对某次提交打标签
$ git tag v0.9 6224937 - 删除标签
$ git tag -d v0.1 Deleted tag 'v0.1' (was e078af9) - 远程删除标签
$ git push origin :refs/tags/v0.9 To git@github.com:michaelliao/learngit.git - [deleted] v0.9 - 推送标签到远程
$ git push origin v1.0 - 一次性推送多个标签
$ git push origin --tags Counting objects: 1, done. Writing objects: 100% (1/1), 554 bytes, done. Total 1 (delta 0), reused 0 (delta 0) To git@github.com:michaelliao/learngit.git * [new tag] v0.2 -> v0.2 * [new tag] v0.9 -> v0.9
自定义Git
- 指定git AUTO颜色
$ git config --global color.ui true - 忽略文件:在Git工作区的根目录下创建一个特殊的
.gitignore
文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。*.py[cod] *.so *.egg *.egg-info dist build - 强制添加被忽略的文件
$ git add -f App.class - 配置别名
$ git config --global alias.co checkout $ git config --global alias.ci commit $ git config --global alias.br branch - 配置文件 放在
.git/config
文件中:$ cat .git/config [core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true ignorecase = true precomposeunicode = true [remote "origin"] url = git@github.com:michaelliao/learngit.git fetch = +refs/heads/*:refs/remotes/origin/* [branch "master"] remote = origin merge = refs/heads/master [alias] last = log -1
设置多个ssh_key
1.可以使用 ssh-keygen
生成新的 SSH key,指定不同的文件名和路径,这样就可以为每个项目使用不同的 SSH key。例如,以下命令将生成一个 name 为 mykey 的新 SSH key 并将其保存到指定的路径下:
ssh-keygen -t rsa -C "mykey@gitproject1.com" -f ~/.ssh/gitproject1_key
2.将新的 SSH key 添加到 ssh-agent 中:使用以下命令将新的 SSH key 添加到 ssh-agent 中,确保使用正确的文件名
$ ssh-add ~/.ssh/<new-key-name>
无法push到GitHub
ssh-agent -s ssh-add ./xiaobingch_key ssh -T git@github.com
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)