# git笔记 **Repository Path**: myanderson/git ## Basic Information - **Project Name**: git笔记 - **Description**: 常用git使用方法笔记 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2021-02-09 - **Last Updated**: 2025-11-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 生成一对密钥 ``` ssh-keygen -t rsa -b 2048 -C "12345@qq.com" ``` ``` #生成到当前目录 ssh-keygen -t rsa -b 2048 -f id_rsa # 目录权限必须 700 chmod 700 /now_path # 私钥必须 600(仅属主读写) chmod 600 /now_path/id_rsa # 公钥建议 644(可读即可) chmod 644 /now_path/id_rsa.pub # 确保属主正确(如果用 root 就保持 root;若用其它用户,请改成对应用户名) chown -R $(id -un):$(id -gn) /now_path ``` 授权文件名:authorized_keys ## 1 常用 ```language $ git config core.ignorecase false # 设置大小写敏感 $ git config --global user.name "YOUR NAME" # 设置用户名 $ git config --global user.email "YOUR EMAIL ADDRESS" # 设置邮箱 $ git config --global push.default current # 设置默认推送分支 $ git config core.fileMode true # 设置跟踪文件权限变更 $ git fetch --progress "--all" # 从远程库获取代码 $ git branch -a # 显示所有分支 $ git rev-parse HEAD (git rev-parse --short HEAD) # 查看当前提交的(短)hashID $ git diff logic/.gitignore # 查看指定文件的变更内容 $ git push --set-upstream origin master # 推送到远端的同时,建立与远端分支的关联关系 ``` ## 2 别名Alias ```language $ git config --global alias.br="branch" # 创建/查看本地分支 $ git config --global alias.co="checkout" # 切换分支 $ git config --global alias.cb="checkout -b" # 创建并切换到新分支 $ git config --global alias.cm="commit -m" # 提交 $ git config --global alias.st="status" # 查看状态 $ git config --global alias.pullm="pull origin master" # 拉取分支 $ git config --global alias.pushm="push origin master" # 提交分支 ``` ## 3 创建版本库 ```language $ git clone # 克隆远程版本库 $ git init # 初始化本地版本库 $ git remote add origin git@gitee.com:myanderson/git.git # 配置远程git版本库 $ git fetch --progress "--all" # 从远程库获取代码 $ git checkout -b master origin/master # 创建并切换到master分支 ``` ## 4 修改和提交 ```language $ git status # 查看状态 $ git diff # 查看变更内容 $ git add . # 跟踪所有改动过的文件(处理删除文件:git add --all) $ git add # 跟踪指定的文件 $ git mv # 文件改名 $ git rm # 删除文件 $ git rm --cached # 停止跟踪文件但不删除 $ git commit -m "commit message v$(date +%Y.%m.%d-%H:%M:%S)" # 提交所有更新过的文件 ``` ## 5 查看提交历史 ```language $ git log # 查看提交历史 $ git log -p # 查看指定文件的提交历史 $ git blame # 以列表方式查看指定文件的提交历史 ``` ## 6 撤消 ```language $ git reset --hard HEAD # 撤消工作目录中所有未提交文件的修改内容 $ git reset --hard # 撤销到某个特定版本 $ git reset --hard origin/master # 撤销到某个特定分支 $ git checkout HEAD # 撤消指定的未提交文件的修改内容 $ git checkout -- # 同上一个命令(如"aaa.txt") $ git revert # 撤消指定的提交 ``` ## 7 分支与标签 ```language $ git branch # 显示所有本地分支 $ git checkout # 切换到指定分支或标签 $ git branch # 创建新分支 $ git branch -d # 删除本地分支 $ git tag # 列出所有本地标签 $ git tag # 基于最新提交创建标签 $ git tag -a "v1.0" -m "一些说明" # -a指定标签名称,-m指定标签说明 $ git tag -d # 删除标签 $ git checkout dev # 合并特定的commit到dev分支上 $ git cherry-pick 62ecb3 ``` #### 切换本地master分支已绑定的远程分支 1. 检查当前远程分支绑定情况 ```language git branch -vv ``` 2. 解除当前绑定 ```language git branch --unset-upstream master ``` 3. 将本地 master 分支绑定到远程 master_new 分支 ```language git branch --set-upstream-to=origin/master_new master ``` ## 8 合并与衍合 ```language $ git merge # 合并指定分支到当前分支 $ git merge --abort # 取消当前合并,重建合并前状态 $ git merge dev -Xtheirs # 以合并dev分支到当前分支,有冲突则以dev分支为准 $ git rebase # 衍合指定分支到当前分支 ``` ## 9 远程操作 ```language $ git remote -v # 查看远程版本库信息 $ git remote show # 查看指定远程版本库信息 $ git remote add # 添加远程版本库 $ git remote remove # 删除指定的远程版本库 $ git fetch # 从远程库获取代码 $ git pull # 下载代码及快速合并 $ git push # 上传代码及快速合并 $ git push : # 删除远程分支或标签 $ git push --tags # 上传所有标签 ``` ## 10 打包 ```language $ git archive --format=zip --output ../file.zip master # 将master分支打包成file.zip文件,保存在上一级目录 $ git archive --format=zip --output ../v1.2.zip v1.2 # 打包v1.2标签的文件,保存在上一级目录v1.2.zip文件中 $ git archive --format=zip v1.2 > ../v1.2.zip # 作用同上一条命令 git打包命令会自动忽略.gitignore中指定的目录和文件,以及.git目录。 ``` ## 11 全局和局部配置 ```language 全局配置保存在:$Home/.gitconfig 本地仓库配置保存在:.git/config ``` ## 12 远程与本地合并 ```language 如果在远程创建了代码仓,而且已经初始化,本地是具体的源代码,那么工作流程应该是: $ git init # 初始化本地代码仓 $ git add . # 添加本地代码 $ git commit -m "add local source" # 提交本地代码 $ git pull origin master # 下载远程代码 $ git merge master # 合并master分支 $ git push -u origin master # 上传代码 ``` ## 13 凭证存储 按照如下设置可只输入一次 记住密码(默认15分钟): ```language git config --global credential.helper cache ``` 自己定义时间(一小时后失效): ```language git config credential.helper 'cache --timeout=3600' ``` 永久存储密码: ```language git config --global credential.helper store ``` 使用如下指令重置用户名密码: ```language git config --system --unset credential.helper ``` 会在用户主目录的.gitconfig文件中生成下面的配置: ```language [credential] helper = store ``` 如果没有–global,则在当前项目下的.git/config文件中添加。 ## 14 修改自定义id_rsa路径 ** 每个仓库独立设置方式(per-repo way)** ```language # 1) 仅为当前仓库指定使用的私钥 git config core.sshCommand 'ssh -i /absolute/path/to/id_rsa -o IdentitiesOnly=yes -F /dev/null' # 2) 验证配置 git config --get core.sshCommand # 3) 测试 Gitee SSH 连接 ssh -T git@gitee.com # 期望输出类似:"Welcome to Gitee..." 或 "Hi " ``` 说明: - 使用你私钥的绝对路径(/absolute/path/to/id_rsa)。 - -o IdentitiesOnly=yes 参数会强制 SSH 仅使用指定的私钥。 - -F /dev/null 会忽略全局的 ~/.ssh/config,避免被覆盖。 **单次命令(One-off / 单次使用)方式** ```language GIT_SSH_COMMAND='ssh -i /absolute/path/to/id_rsa -o IdentitiesOnly=yes' git pull ``` **撤销 / 重置配置** ``` git config --unset core.sshCommand ``` ## 15 常见问题及解决方案 ### 15.1 "Host key verification failed" 把主机指纹加入 known_hosts(解决 Host key 验证) ``` # 一次性写入主机指纹到 known_hosts(安全做法) ssh-keyscan -H ***.host.com >> ~/.ssh/known_hosts # 验证 known_hosts 已有记录(可选) grep ***.host.com ~/.ssh/known_hosts || echo "no hostkey" ```