跳至主要內容

Git 指南

Yuchen大约 6 分钟GitGit

Git 指南

官方文档open in new window

安装

windows 版本open in new window

Linux/Unix 版本open in new window

Mac OS 版本open in new window

Git 常用命令

生成 SSH Key

ssh-keygen -t rsa -C "your-email"

生成时会要求确认路径和输入密码

key 默认会保存在 ~/.ssh/id_rsa.pub 里

git init/clone

git init 初始化仓库,git clone克隆仓库

# 使用当前目录作为根目录初始化仓库
git init

# 将newrepo目录作为仓库根目录,若newrepo不存在会自动在当前目录下新建一个newrepo目录
git init <newrepo>

# 下载一个完整的项目
git clone <repo-url>

git config

更改配置

# 显示当前配置
git config --list

# 编辑(全局)配置文件
git config -e [--global]

# 输出(全局)用户信息
git config [--global] user.name
git config [--global] user.email

# 编辑(全局)用户信息
git config [--global] user.name "your-name"
git config [--global] user.email "your-email"

如果添加了 --global 参数就是全局配置,如果想要在某个项目下使用其他的用户名或邮件, 去掉 --global 参数重新配置即可

git add

将工作区文件添加到暂存区

# 添加一个文件到暂存区
git add <file1>

# 添加多个文件到暂存区
git add <file1> <file2>

# 添加指定目录到暂存区,包括子目录
git add <dir>

# 添加当前目录下所有文件到暂存区
git add .

git commit

将暂存区的文件添加到本地仓库

# 提交暂存区文件到本地仓库
# message为代码提交的详细信息
git commit -m "message"

# 提交指定文件到本地仓库
git commit <file1> <file2> -m "message"

# 提交工作区自上次commit之后的变化,直接到仓库区
git commit -a

# 提交时显示所有diff信息
git commit -v

# 使用一次新的commit,替代上一次提交
# 如果代码没有任何新变化,则用来改写上一次commit的提交信息
git commit --amend -m "message"

# 重做上一次commit,并包括指定文件的新变化
git commit --amend <file1> <file2> 

git push

将本地的仓库分支上传到远程仓库并合并

# 命令格式
# git push <远程主机名> <本地分支名>:<远程分支名>
git push origin main:main
# 如果本地分支名与远程分支名相同可以省略远程分支名
git push origin main

# 推送所有分支到远程仓库
git push origin --all

如果本地版本和远程版本有差异,可以使用--force 强制推送

git push --force origin main

git pull

下载远程代码并合并到本地版本

# 命令格式
# git pull <远程主机名> <本地分支名>:<远程分支名>
git pull origin main:main
# 如果与当前分支合并可以省略远程分支名
git pull origin main

git remote

# 显示所有远程仓库
git remote -v

# 添加远程仓库地址
git remote add origin address

# 修改远程仓库地址
git remote set-url origin <url>

# 移除远程仓库
git remote remove <repository>

git branch

# 查看本地分支
git branch

# 查看所有远程分支
git branch -r

# 查看所有分支包括本地和远程分支
git branch -a

# 新建分支,但仍停留在当前分支
git branch <branch-name>  # branch-name为要创建的分支名

# 新建分支,并切换到该分支
git checkout -b <branch-name>

# 新建分支,指定commit
git branch <branch-name> <commit>

# 新建一个分支,与指定的远程分支建立追踪关系
git branch --track <branch> <remote-branch>

# 重命名分支

git branch -m <old-branch-name> <new-branch-name>

# 编辑分支介绍
git branch <branch-name> --edit-description

# 切换分支
git checkout <branch-name>

# 切换到上一个分支
git checkout -

# 合并分支到当前分支
git merge <branch-name>

# 选择一个commit,合并进当前分支
git cherry-pick <commit>

# 删除分支
git branch -d <branch-name>

# 删除远程分支
git push origin --delete <branch-name>
# or
git branch -dr <remote/branch>

git merge

# 合并分支
git merge <branch-name>
# 合并单个文件
git checkout <branch name> <path to file> --patch

git rebase

# 合并分支
git rebase <branch name>
# 合并远程
git pull --rebase origin <branch name>
# 交互式编辑从当前分支向前最近n个提交
git rebase -i HEAD~n

git rebase 会更改提交历史记录,确保仅在本地使用,永远不要在公共分支上使用 rebase

git tag

# 列出所有标签
git tag

# 新建标签
git tag <tag-name>

# 指定标签信息
git tag -a <tag-name> -m "message"

# 在指定commit上新建一个标签
git tag -a <tag-name> <commit>

# 在指定commit上新建一个标签,并添加信息
git tag -a <tag-name> <commit> -m "message"

# 查看标签所修改的内容
git show <tag-name>

# 推送一个本地标签
git push origin <tag-name>

#推送全部未推送过的本地标签
git push origin --tags

# 删除本地标签
git tag -d <tag-name>

# 删除一个远程标签
git push origin :refs/tags/<tagname>
# or
git push origin --delete tag <tagname>

git log

# 显示自上次提交后有变更的文件
git status
git status -s # 查看更详细的信息

# 查看所有提交记录
git log

# 显示几条提交信息
git log -n <num>
git log -n 10    # 显示10条提交信息

# 查看指定文件的提交记录
git log <file-name>

# 查看最近两次详细的修改内容
git log -p -2

# 查找指定用户
git log --author=[user-name]

# 显示指定文件是什么人在什么时间修改过
 git blame <file-name>

撤销操作

撤销 add

# 适用于已 add 但未 commit
git status        # 首先查看哪些文件已经add
git reset file    # 撤销 file

撤销 commit

git reset --hard HEAD^     # 返回到上个版本,既上一个commit
git reset --hard HEAD~n    # 返回到倒数第n版本

还可以根据 commitId 返回到特定的版本

# 首先获取 commitId
git log    # commit后面一长串就是id, 按q退出log
git reset --hard commitId  # 返回到commitId这个版本

# 如果撤销错了,想取消这次操作
git reflog    # 查看操作记录
git reset --hard commitId   # 返回到想回到的commit

删除远程文件或文件夹

预览文件,检查文件是否存在(不会删除源文件)

git rm -r -n --cached file/fileName

确定删除文件(不会删除本地的文件,只是从 git 仓库中移出文件)

git rm -r --cached file/fileName

提交到本地并推送到远程服务器

git commit -m "message"  # message为代码提交的详细信息
git push origin main