Skip to content

git 常用命令

shell 和 vim 操作

shell
# 获取当前所在路径
pwd
# 创建目录(文件夹)
mkdir [文件夹名]
# 创建文件
touch [文件名]
# 在指定文件夹中创建文件
touch /文件夹名/要创建的文件名
# 删除文件
rm [文件名]
# 删除文件夹
rm -rf [文件夹名]
# 查看当前文件夹里有哪些内容
ll 或者 ls
# 查看隐藏内容
ls -la
# 查看当前目录里的某个目录中的内容
ll -la(加上-la显示隐藏文件) [当前目录下的某个文件名]
# 查看文件中的详细内容(仅查看)
cat [文件名称]
# vim查看当前文件内容(可修改)
vim [文件名称]

配置

Git 的设置文件为.gitconfig,它可以在用户主目录下(全局配置),也可以在项目目录下(项目配置)。

bash
# 显示当前的Git配置
git config --list
# 显示全局配置 (用户名,邮箱,别名等)
git config --global --list
# 例:
user.name=章凯鹏
user.email=329690239@qq.com
alias.ck=checkout

# 编辑Git配置文件(可直接修改用户信息,命令别名等...)
git config -e [--global]

# 设置提交代码时的用户信息
git config [--global] user.name "[name]"
git config [--global] user.email "[email address]"

# 配置命令别名
git config --global alias.自定义命令 git后面的指令
# 使用方式:
git ck      等同于 git checkout

# 取消配置项
git config [--global] --unset <key>

# 取消命令别名 (或者直接使用上面的编辑配置命令来修改全局配置 git config -e [--global],删掉相应的别名 )
git config --global --unset alias.ck  取消ck别名
git config --global --unset user.name 取消git用户名配置

# 删除所有命令别名
git config --global --remove-section alias

初始化

bash
# 在当前目录新建一个Git代码库
git init

# 新建一个目录,将其初始化为Git代码库
git init [project-name]

# 下载一个项目和它的整个代码历史
git clone [url]

克隆

bash
# 克隆整个分支
git clone [repository_url]

# 克隆并指定本地目录名称
git clone [repository_url] [local_directory_name]

# 克隆指定分支
git clone -b [branch_name] [repository_url]

# 克隆指定分支并指定本地目录
git clone -b [branch_name] [repository_url] [local_directory_name]

# 克隆指定标签
git clone --branch [tag_name] [repository_url]

添加

bash
# 添加指定文件到暂存区
git add [file1] [file2] ...

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

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

提交

bash
# 提交暂存区到仓库区
git commit -m [message]------->[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 reset : 默认 git reset --mixed [ HEAD~number 或 第一次commit hash ]

bash

--soft:撤销上一次提交,并将工作目录和暂存区恢复到上一次提交的状态。不会丢弃修改或新增的文件.
        [--soft仅撤销提交,所修改的代码依然是提交过后的状态,工作区与暂存区显示无变化,之前的修改已保存]

--mixed:撤销上一次提交,并将工作目录恢复到上一次提交的状态,但暂存区不会受到影响。这个选项是 git reset 的默认选项。
        [--mixed在撤销提交的同时,将代码恢复到暂存区(既git add .命令之后的状态)]

--hard:撤销上一次提交,并将工作目录、暂存区和 stash 都恢复到上一次提交的状态。任何修改、新增或暂存的更改都将被丢弃。
        [直接回复到某个提交之前的状态,代码修改会丢失]

--merge:撤销上一次提交,并将工作目录和暂存区更新到上一次提交的状态。如果存在冲突,会尝试自动合并冲突。

--keep:撤销上一次提交,并将工作目录和暂存区更新到上一次提交的状态。如果存在冲突,会尝试自动合并冲突,并保留解决冲突后的文件。

分支

bash
# 列出所有本地分支
git branch

# 列出所有远程分支
git branch -r

# 列出所有本地分支和远程分支
git branch -a

# 新建一个分支,但依然停留在当前分支
git branch [branch-name]

# 新建一个分支,并切换到该分支
git checkout -b [branch]

# 切换到指定分支,并更新工作区
git checkout [branch-name]

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

# 合并指定分支到当前分支
git merge [branch]

# 重命名分支
git branch -m oldbranch newbranch

# 删除本地分支 当分支中含有未合并的变更时,Git会阻止这一次删除操作。
git branch -d [branch-name]

# 强制删除指定分支,即便其中含有未合并的变更
git branch -D [branch-name]

# 删除远程分支
git push origin --delete [branch-name]
git branch -dr [remote/branch]

合并

bash
# 将branchName合并到当前所在分支,会产生提交记录
git merge [branchName]

# 合并到当前分支,不生产提交记录
git merge [branchName] --no-commit

远程同步

bash
# 克隆远程仓库
git clone [url] [文件别名(克隆完成后的文件夹名称)]

# 下载远程仓库的所有变动(只是抓取,并不会自动merge)
git fetch [remote]

# 拉取远程仓库的变化(git pull = git featch + git merge)
git pull

# 拉取远程仓库代码,不生成提交记录
git pull --no-commit

# 显示远程仓库地址
git remote -v

# 显示某个远程仓库的信息(包括所有分支以及仓库地址)
git remote show [远程仓库名(一般为origin)]

推送本地分支代码到远程分支:

1.首次推送代码到远程关联仓库:

bash
git push -u origin master

2.再次推送到关联仓库:

bash
git push

3.推送到指定的远程分支:

如果你本地的分支名称和远程名称相同,则使用以下命令:

bash
git push origin branchName

如果本地的分支跟远程的分支不一样,则指定本地和远程的分支的名称:

bash
git push origin localBranchName:remoteBranchName

4.拉取远程指定分支代码

shell
git pull origin remoteBranchName:localBranchName

查看当前文件的修改记录

shell
# 查看fileName文件的修改记录
# 格式: 提交id 提交人 提交时间 实际代码
git blame [fileName]

# 查看文件指定行的修改记录
# 查看fileName文件的第n1 到 n2 行的修改记录
git blame -L n1,n2 [fileName]

#  git blame -L 10,13 hello.txt  (查看hello.txt文件10到13行的修改记录)
# 提交id前的^代表当前行并未修改
^364e229 (章凯鹏 2022-11-13 10:02:20 +0800 10) hello 123
^364e229 (章凯鹏 2022-11-13 10:02:20 +0800 11) hello 123
^364e229 (章凯鹏 2022-11-13 10:02:20 +0800 12) hello 123
f563afd2 (章凯鹏 2022-11-13 10:03:00 +0800 13) 5555