Git
#Git #命令
常用操作
工程化操作 文章
git config --global core.autocrlf false
多账号和多仓库
- 在
~/.ssh/创建config文件
- Windows Powershell
New-Item -ItemType File config
- pwsh
type nul > config
- bash
> config
- 生成不同git repo的rsa密钥
example@xx.com: 邮箱
path: 生成的文件名, 例如
gitlab_lisa-t : 加密方式- ed25519
ssh-keygen -t rsa -C -b 4096 "example@xx.com" -f <path>
ssh-keygen -t ed25519 -C // gitlab
- 根据样板输入
- Host: 主机
- GitHub: github.com
- Gitlab: gitlab测试不通过,不推荐使用
- Gitee: gitee.com
- HostName: 主机名, 与
Host相同 - PreferredAuthentications: 首选身份验证
- publickey: 使用公钥,不用修改 IdentityFile: repo文件路径 把<repo_id_rsa>修改成对应文件
Host <gitrepo>
HostName <gitrepo>
PreferredAuthentications publickey
IdentityFile ~/.ssh/<repo_id_rsa>
示例:
# github rococoya
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/github.rococoya
# github Lookeke
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/github.lookeke
# GitLab
Host gitlab.com
HostName gitlab.com
IdentityFile ~/.ssh/gitlab_lisa
# Gitee
Host gitee.com
HostName gitee.com
IdentityFile ~/.ssh/gitee_id_rsa
一个项目提交到多个仓库
参考 语法:
git remote set-url --add <branch>/<git_uri> <git_uri2>
branch: 已经添加的分支 git_uri: 仓库URI 实例:
git remote set-url --add github https://git.oschina.net/zxbetter/test.git
Gitlab与Github共享一个git仓库
在你项目根目录创建.gitmodules文件
格式:
[submodule "<Repo>"]
path = <path>
url = <git_https_path>
[submodule "<Repo>"]
path = <path>
url = <git_https_path>
解析:
<Repo>: 共享git仓库的名称, 例如web
Gitlab: 如果该共享git仓库在同一个服务器下,则使用相对路径<user>/repo, 如共享git仓库在http://192.168.0.152:7000/root/sub路径下, 主git仓库在http://192.168.0.152:7000/root/edu-system下,相对路径为../../
GitHub: 直接使用HTTPS的git链接
示例:
[submodule "web"]
url = https://github.com/lookeke/edu-management-system-client.git
[submodule "web"]
path = web
url = ../../root/edu-system-client.git
一个项目包含多个子仓库
git submodule add <URI>
拉取远程仓库文件
git clone `<git地址>`
添加到缓存区
git add `<filename>` 单个文件
git add . 监控工作区的状态树,使用它会把工作时的所有变化提交到暂存区,包括文件内容修改(modified)以及新文件(new),但不包括被删除的文件
git add -u | --update 仅监听已经被添加的文件,将被修改的文件提交到暂存区.不会提交新文件
git add -A | --all:是上面两个功能的合集(git add --all的缩写)
填写注释
git commit -m "提交内容简要描述"
提交到远程仓库
git push
提交所有tag到远程
git push -u <分支> --tags
忽略提交内容
-
创建
.gitignoretouch .gitignore -
在
.gitignore文件添加需要忽略的内容` 例: node_modules
//.gitignore node_modules
本地创建仓库并且提交到远程仓库
- 创建仓库
git init - 链接到仓库
git remote add origin `<你的仓库地址>` - 提交文件
git add `<file>` - 提交注释
git commit -m `<message>` ``` - 推送
git push
修改和提交
git status 查看状态
git diff 查看变更内容
git mv <old> <new> 文件改名
git rm <file> 删除文件
git rm --cached <file> 停止跟踪文件但不删除
git commit --amend 重新填写commit message内容
git restore --staged 撤销已经commit的文件
git reset --soft HEAD~<commit,1表示最后一次> 软撤销,不撤销添加的文件
git reset --hard HEAD~1 恢复到了上一次的commit状态。
git push --follow-tags <本地分支> <远程分支> 将本次提交的内容的注释创建为tag分支推送至远程
查看提交历史
git log 查看提交历史
git log -p <file> 查看指定文件的提交历史
git blame <file> 以列表方式查看指定文件的提交历史
撤销
git remote remove <branch> 撤销链接远程仓库
git reset <file> 撤销已经添加的<file>文件
git reset 撤销已经添加的全部文件
git revert <commit> 撤消指定的提交
分支与标签
git branch -m <原分支名> <新分支名>
git push --force <本地分支> <远程分支> 本地分支覆盖远程分支
git pull --force <本地分支> <远程分支> 远程分支覆盖本地分支
git branch 显示所有本地分支
git checkout <branch/tag> 切换到指定分支或标签
git branch <new-branch> 创建新分支
git branch -d <branch> 删除本地分支
git tag 列出所有本地标签
git tag <tagname> 基于最新提交创建标签
git tag -d <tagname> 删除标签
分支操作示例 重命名一个分支,将本地分支与远程分支关联,并确保远程仓库的 HEAD 能够跟踪所有分支的最新提交
- 将本地分支名为
main的分支更名为lixia(与远程分支名对应) - 获取远程更新
- 将本地分支与远程分支建立关联, 该分支就可以跟踪远程分支的更改
- 将远程仓库 "origin" 的 HEAD 设置为 "a",这表示远程仓库的 HEAD 将跟踪所有分支的最新提交
- 远程有分支的情况下:
git checkout -b <远程分支名> <本地分支名>
git branch -u <本地分支名> <远程分支名>
git remote set-head <远程主分支名> -a
示例:
git init
git remote add main git@github.com:lookeke/tiktok.git
git fetch main
git checkout -b lixia main
git branch -u main lixia
git remote set-head main -a
遇到**error: The following untracked working tree files would be overwritten by checkout:**问题:
这个错误表示你正在尝试检出一个新的分支,但是这个操作会覆盖工作目录中一些未跟踪的文件。Git 为了保护这些文件不被覆盖,因此终止了操作。
3 种解决方案:
- 暂存并提交当前的更改: 如果这些文件是你新增或修改的,你可以选择提交它们。
git add .
git commit -m "Add new files and changes"
然后再次尝试检出新的分支。
- 使用stash保存工作进度: 如果你还不想提交这些更改,但希望临时存储它们以便稍后恢复,可以使用
git stash。
git stash
它将会保存你的工作进度。之后,之后可以使用git stash apply来恢复这些更改。
- 删除或移动这些文件: 如果你确定不需要这些文件,可以删除或移动它们到其他地方。
谨慎使用这个命令,它会删除所有未跟踪的文件。
git clean -fd
完成上述操作之后,你可以再次尝试创建并切换到main/<远程仓库>分支。
记住,创建新的分支前,最好确保工作目录是干净的,这样可以避免此类冲突。
- 示例 2: 远程没有分支, 需要本地创建分支情况下:
git fetch main 的
main为可选, 如果git fetch main无反应, 尝试执行git fetch
git fetch [main]
git branch -u main lixia
git remote set-head main -a
合并与
git merge <branch> 合并指定分支到当前分支
远程操作
git ls-remote 查看远程仓库的分支
git remote -v 查看远程版本库信息
git remote show <remote> 查看指定远程版本库信息
git remote add <remote> <url> 添加远程版本库
git fetch <remote> 从远程库获取代码
git pull<remote>``<branch># 下载代码及快速合并
git push <remote>``<branch> 上传代码及快速合并
git push <remote>``<branch/tag-name> 删除远程分支或标签
git push--tags 上传所有标签
git log 提交信息