常用git命令

记录一些我经常用到的git命令,等以后学到新命令后再来补充。
再附上git官方文档:git命令文档

配置

1. 查看当前git配置

git config --list

2. 修改用户信息

  • 修改用户名 git config --global user.name "userName"
  • 修改邮箱地址 git config --global user.emal "emal address"
--global:全局配置。如果没有这个参数则只针对当前仓库有效

创建仓库

1. 本地初始化仓库

尚未进行版本控制的本地目录转换为 Git 仓库

git init <directory>

<directory>:本地目录地址。如果没有这个参数则在当前目录初始化,有这个参数则找到这个目录(没找到则新建目录)并初始化。

2. 克隆远程仓库

已有远程仓库,只需要克隆到本地

git clone <url> <directory>

<url>:是你要拷贝的远程仓库地址。通常远程仓库都有http和ssh两种形式的地址,要注意使用ssh地址前需要配置个人的ssh key。
此命令会自动设置本地 master 分支跟踪克隆的远程仓库的 master 分支(或其它名字的默认分支)。

远程仓库

1. 查看关联的远程仓库

  • 查看所有的远程仓库 git remote -v
  • 查看某一个远程仓库 git remote show <remote>
<remote>:本地仓库为对应的远程仓库设置的简称,一般是 origin ,也可以根据需求进行修改。
如果远程仓库不只一个,-v 命令会将他们全部列出。show 命令只会列出当前查看的远程仓库的 URL 与跟踪分支的信息。

每个远程仓库会有一个 fetch 和 push地址,同一个远程仓库这两个地址应该是一样的。这代表我们有拉取和推送的权限。

2. 添加远程仓库关联

git remote add <shortname> <url>

<url>:远程仓库地址。

3. 远程仓库的重命名与移除

  • 重命名远程仓库 git remote rename <old_remote> <new_remote>
  • 移除远程仓库 git remote remove <remote>git remote rm <remote>
重命名只会修改远程仓库在本地的简称,并不会修改远程仓库的地址。
同样也会修改所有远程跟踪的分支名称。

4. 从远程拉取

  • 只拉取内容 git fetch <remote>git fetch <remote>git fetch <remote> <branch>
  • 拉取内容并执行合并 git pullgit pull <remote> <branch>
如果当前分支设置了跟踪远程分支,那么可以用 git pull 简单自动拉取并合并;
如果未设置跟踪远程分支,那么需要注意是否在错误的分支上执行 git pull,这可能会带来错误的内容。

5. 推送到远程

  • 正常的提交推送 git pushgit push <remote> <branch>
  • 强制推送 git push -fgit push <remote> <branch> -f
强制推送会覆盖远程仓库的提交记录,导致远程仓库和本地不一致的修改内容被删除。
如果当前分支设置了跟踪远程分支,那么可以用 git push 简单推送。

分支管理

1. 查看分支

  • 查看本地分支 git branchgit branch --list
  • 查看远程分支 git branch -r
  • 查看全部分支,本地分支+远程分支 git branch -a

2. 切换分支

git checkout <branch>

3. 创建分支

  • 只创建本地分支 git branch <branch>
  • 创建本地分支并切换到新分支 git checkout -b <branch>
  • 拉取远程仓库分支 git fetch <remote> <branch>
本地分支创建时是以本地当前分支当前 <commit> 为节点,有可能当前<commit>是很老旧的内容,这会导致新分支在合并到别的分支时出现冲突。
所以推荐先拉取远程仓库中生产分支最新的提交,再创建新的分支。

4. 合并分支

4.1 合并整个分支

git merge <branch>

如果遇到有冲突的合并,执行此命令后 Git 做了合并,但是没有自动地创建一个新的合并提交。
Git 会暂停下来,等待你去解决合并产生的冲突。 你可以在合并冲突后的任意时刻使用 git status 命令来查看那些因包含合并冲突而处于未合并状态的文件。
任何因包含合并冲突而有待解决的文件,都会以未合并状态标识出来( <<<<<<< , ======= , 和 >>>>>>>)。
在完全解决冲突后,执行 git add,git commit 命令重新提交。

合并前需要先切换到要合并到的分支上执行此命令。
无冲突的合并,会自动创建一个新的合并提交。

有冲突的合并,先解决冲突,再手动增加提交。

4.2 只合并某些提交

  • 合并单个提交 git cherry-pick <commit-id>
  • 合并多个连续的提交 git cherry-pick <commit-id1>...<commit-id3>
合并前需要先切换到要合并到的分支上执行此命令。
无冲突的合并会根据<commit-id>对应的代码和相关信息,并作为一个全新的提交引入到当前所在的分支上。

因为是全新的提交,所以合并后的分支再和原<commit-id>所在的分支合并时也可能出现冲突。
合并连续提交的时候<commit-id>是并没合并进去的,要先合并<commit-id>才可以。

4.3 只合并某个文件

git checkout --patch <branch> <file>

此命令的本质是拷贝文件,执行命令后会并给出一些命令选项,需要输入一个命令告诉 Git 如何处理这个文件。

合并前需要先切换到要合并到的分支上执行此命令。
如果不加上分支名,默认则是当前分支,那么就没有改变。
确认后的文件是已经在暂存区的状态,需要根据情况手动修改文件内容或增加提交。
执行此命令后出现的命令选项在此处不列出,有需要的可自行去官方文档查询。

5. 删除分支

  • 安全删除本地分支 git branch --delete <branch>git branch -d <branch>
  • 强制删除本地分支 git branch --delete --force <branch>git branch -d -f <branch>git branch -D <branch>
  • 删除远程分支 git push --delete <remote> <branch>
删除本地分支时,先切换到其他存在的分支,再执行命令。
安全删除分支:当分支中含有未合并的变更时,Git会阻止这一次删除操作。
强制删除分支:即便其中含有未合并的变更,也要删除。

工作区、暂存区、版本库

1. 查看状态

  • 完整状态输出 git status
  • 缩短状态的输出 git status --shortgit stauts -s
可以查看当前分支所有有修改内容的文件状态。
工作区 未跟踪 的文件和 已跟踪 的文件,及暂存区文件会分开显示,并提示相应的操作命令。

2. 添加

2.1 添加到暂存区

  • 添加全部文件 git add .
  • 添加部分文件 git add <files>
<files>:有修改的文件或目录的的路径。
工作区 未跟踪 的文件添加后,Git 开始跟踪这个新文件,并添加到暂存区。

2.2 添加到本地版本库

  • 提交修改文件,并启动你选择的文本编辑器来输入提交说明 git commit
  • 提交修改文件,将提交说明与命令放在同一行 git commit -m '提交说明'
  • 跳过暂存区提交修改文件 git commit -agit commit -a -m '提交说明'
在跳过暂存区提交命令中,不会提交 未跟踪 的文件。

3. 撤销

3.1 撤销工作区修改

git restore <files>git checkout -- <files>

工作区撤销后,修改内容将被彻底删除。

3.2 撤销暂存区修改

git restore --staged <files>git reset -g <files>

暂存区撤销后,修改内容将回到工作区。
<files>:在restore命令中不能缺少;在reset命令中可以缺少,此时会撤销暂存区所有修改文件。

3.3 撤销版本库修改

  • 删除提交记录,并且不保留提交文件 git reset --hard HEAD^git reset --hard <commit-id>
  • 删除提交记录,但保留提交文件 git reset --soft HEAD^git reset --soft <commit-id>
  • 只修改最后一次提交 git commit --amendgit commit -m '提交说明' --amend
--soft:让工作目录还跟 reset 之前一样,不作任何改变。即撤销后文件回到暂存区。
HEAD:表示当前 <commit> 指向。^ 符号表示向前移动,HEAD^^^ 表示撤销到前3个 <commit>,等同于 HEAD~3。
<commit-id>:表示具体的<commit>生成的哈希值,即撤销到这个哈希值对应的 <commit>
只修改最后一次提交时,如果不加 -m 提交说明,会启动你选择的文本编辑器来输入提交说明;
如果有遗漏文件,可以先执行 git add 命令,再执行此修改

贮藏/储存

将 工作区 和 暂存区 里 跟踪文件未完成的修改内容保存到一个上,此时工作区和暂存区会恢复到上一次提交的状态,而保存到栈内的修改可以在任何时候重新应用。

一般使用场景:
1. 本地和远程冲突,但需要先拉取远程新的提交。
2. 在错误的分支上更改内容,需要保存这些修改,再到正确的分支上应用。
3. 临时需要去修改其他分支的内容,需要保存这些修改,等再次回到这个分支可以接着原来的进度修改。

1. 查看所有栈储存列表

git stash list

不同的分支保存在同一个栈里

2. 添加储存

git stashgit stash push -m '储存内容名称'git stash save '储存内容名称'

推荐使用 git stash push 命令,因为此命令引入了贮藏选定的 路径规范 的选项。
如果不加 储存内容名称 会以当前 <commit>的提交说明为名称保存到栈里,当有存有多个栈的时候无法区分具体储存内容。

3. 取出储存

  • 按出栈顺序取出 git stash pop
  • 指定取出栈内某个储存 git stash pop stash@{$num}
无冲突时,取出栈后会自动删除当前储存在栈内的信息,工作区和暂存区回到储存前的内容。

有工作区或暂存区的文件冲突时,取出储存失败

无工作区或暂存区的文件冲突时,取出储存成功,但是不会删除当前储存在栈内的信息,并且有冲突的文件都会以未合并状态标识出来( <<<<<<< , ======= , 和 >>>>>>>)。

4. 删除储存

git stash drop stash@{$num}

一定要指定删除某一个储存

5. 清空储存

git stash clear


日志

1. 查看当前分支所有提交记录

  • 按时间顺序显示每次提交的信息 git log
  • 按时间顺序显示每次提交的简略统计信息 git log --stat
  • 按时间顺序定制记录的显示格式 git log --pretty=format:"%h %an %s %cd" --date=iso
    format内容:简写哈希,作者名,提交说明,提交时间;date内容:ISO 标准日期格式)
  • 筛选指定时间之后的提交 git log --since=日期git log --after=日期
  • 筛选指定时间之前的提交 git log --until=日期git log --before=日期
  • 筛选指定作者的提交 git log --author=作者名字
  • 筛选指定提交说明的提交 git log --grep=提交说明
只能查看当前分支的提价和合并操作。
顺序是按时间倒序显示,最近的提交排在最上面
<format> 和 <date> 的选项这里不列出,有需要的可以自己去官方文档中查看。
date日期格式可以在Git 配置中修改。

2. 查看当前仓库的所有操作记录

git reflog

能查看初始化、拉取、切换、提交、合并、变基、重置等操作。
顺序是按时间倒序显示,最近的提交排在最上面

2.1 恢复删除的分支

  1. 执行 git reflog, 在记录中找到被删除分支的最后一次有效操作的SHA-1值。
  2. 基于找到的SHA-1值,新建一个分支,分支名和原来相同,即可找回被删除的分支。
    git branch <old_branch> <commit-id>

2.2 恢复删除的提交

  1. 执行 git reflog在记录中找到被删除的提交的SHA-1值。
  2. 基于找到的SHA-1值,新建一个分支。
    git branch <new_branch> <commit-id>
  3. 再将新分支合并到原来的分支,即可恢复被删除的分支。
    git merge <new_branch>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值