初识Git

一 安装Git

  1. 配置用户名及邮箱 git config--global
    $ git config --global user.name "Your Name"
    $ git config --global user.email "email@example.com"
  2. git config
    --local
    $ git config --local user.name "Your Name"
    $ git config --local user.email "email@example.com"

     

 

二 创建版本库

  1. 新建目录
    $ mkdir learngit $ cd learngit
  2. 版本库初始化
    $ git init Initialized empty Git repository in /Users/michael/learngit/.git/

     

  3. 添加文件到暂存区
    $ git add readme.txt
  4. 提交文件到仓库
    $ git commit -m "wrote a readme file"
  5. 查看状态
    $ 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")
  6. 修改对比
    $ 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.

三 版本回退

  1. 版本日志
    $ 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
  2. 简写日志
    $ git log --pretty=oneline
    3628164fb26d48395383f8f31179f24e0882e1e0 append GPL
    ea34578d5496d7dd233c827ed32a8cd576c5ee85 add distributed
    cb926e7ea50ad11b8f9e909c05226233bf755030 wrote a readme file
  3. 返回上一版本
    $ git reset --hard HEAD^
  4. 返回指定版本
    $ git reset --hard 3628164
    HEAD is now at 3628164 append GPL
  5. 命令历史
    $ 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
  6. 撤销工作区修改
    $ git checkout -- readme.txt
  7. 撤销暂存区修改
    $ git reset HEAD readme.txt
    Unstaged changes after reset: M readme.txt
  8. 删除文件
    $ 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
  9. 撤消删除
    $ git checkout -- test.txt

三 远程仓库

  1. 创建SSH kEY
    $ ssh-keygen -t rsa -C "youremail@example.com"
  2. .ssh/id_rsa 私钥 ./ssh/id_rsa.pub 公钥
  3. 关联远程仓库
    $ git remote add origin git@github.com:xiaobingch/gittest.git
  4. 取消关联远程仓库
    $ git remote remove origin
  5.  第一次推送本地内容到远程仓库
    $ git push -u origin master
  6. 推送本地最新内容到远程仓库
    $ git push origin master
  7. 克隆远程仓库
    $ 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.

四 分支管理

  1. 创建并切换至分支dev
    $ git checkout -b dev Switched to a new branch 'dev'
  2. 查看分支
    $ git branch
  3. 创建分支
    $ git branch dev
  4. 切换分支
    $ git checkout dev
  5. 合并分支(Fast-forword快速模式)删除分支后无log
    $ git merge dev
    Updating d17efd8..fec145a Fast-forward readme.txt | 1 + 1 file changed, 1 insertion(+)
  6. 查看分支合并情况
    $ git log --graph --pretty=oneline --abbrev-commit
    * 59bc1cb conflict fixed |\ | * 75a857c AND simple * | 400b400 & simple |/ * fec145a branch test ...
  7. 删除分支
    $ git branch -d dev
    Deleted branch dev (was fec145a)
  8. 强制上传分支(未合并)
    $ git branch -D feature-vulcan
    Deleted branch feature-vulcan (was 756d4af).
  9. 冲突:Git用<<<<<<<=======>>>>>>>标记出不同分支的内容
  10. 合并分支(– 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(+)
  11. 储藏工作现场
    $ git stash
    Saved working directory and index state WIP on dev: 6224937 add merge HEAD is now at 6224937 add merge
  12. 恢复工作现场 
    $ git stash pop//恢复后删除stash内容
    $ git stash apply stash@{0}//恢复后不删除stash内容
  13. 查看stash列表
    $ git stash list stash@{0}: WIP on dev: 6224937 add merge
  14. 删除stash
    $ git stash drop
  15. 查看远程分支信息
    $ git remote -v origin
    git@github.com:michaelliao/learngit.git (fetch) origin
    git@github.com:michaelliao/learngit.git (push)
  16. 推送到远程分支
    $ git push origin master
  17. 抓取远程分支
    $ git pull
    Auto-merging hello.py CONFLICT (content): Merge conflict in hello.py
    Automatic merge failed; fix conflicts and then commit the result

五 标签管理

  1. 添加标签
    $ git tag v1.0
  2. 添加带有说明的标签
    $ git tag -a v0.1 -m "version 0.1 released" 3628164
  3. 查看标签
    $ git tag v1.0
  4. 查看标签详细信息
    $ git show v0.9
    commit 622493706ab447b6bb37e4e2a2f276a20fed2ab4
    Author: Michael Liao <askxuefeng@gmail.com>
    Date: Thu Aug 22 11:22:08 2013 +0800 add merge ...
  5. 对某次提交打标签
    $ git tag v0.9 6224937
  6. 删除标签
    $ git tag -d v0.1
    Deleted tag 'v0.1' (was e078af9)
  7. 远程删除标签
    $ git push origin :refs/tags/v0.9
    To git@github.com:michaelliao/learngit.git - [deleted] v0.9
  8. 推送标签到远程
    $ git push origin v1.0
  9. 一次性推送多个标签
    $ 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

  1. 指定git AUTO颜色
    $ git config --global color.ui true
  2. 忽略文件:在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。
    *.py[cod]
    *.so
    *.egg
    *.egg-info
    dist
    build
  3. 强制添加被忽略的文件
    $ git add -f App.class
  4. 配置别名 
    $ git config --global alias.co checkout
    $ git config --global alias.ci commit
    $ git config --global alias.br branch
  5. 配置文件 放在.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

 

posted @   xiaobingch  阅读(150)  评论(0编辑  收藏  举报
编辑推荐:
· 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)
点击右上角即可分享
微信分享提示