脸脸的小家

脸脸的个人小家

欢迎来到我的个人站~ | PM, deveplopment, Linux


git 常用命令

目录

git 常用命令

1. 仓库相关

1. git init

创建仓库

git init
git init <directory>
  • directory 本地目录。

2. git clone

拉取远程仓库

git clone <repo>
git clone <repo> <directory>
  • repo Git 仓库。
  • directory 本地目录。

3. git config

  1. 显示全部配置文件
git config --list
  1. 编辑 git 配置文件
#针对当前仓库
git config -e
# 针对系统上所有仓库
git config -e --global

例:设置提交代码时的用户信息

git config --global user.name "runoob"
git config --global user.email test@runoob.com

2. 提交和修改

1. git add

添加文件到暂存区

  1. 添加文件
git add . | [file...]

可用.添加全部文件,可用* 进行模糊匹配,

  1. 可视化添加
git add -i
The file will have its original line endings in your working directory
           staged     unstaged path
  1:        +0/-2      nothing RuanZhuCode.iml
  2:    unchanged      +29/-11 src/main/java/cn/devmeteor/ruanzhucode/App.java

*** Commands ***
  1: status       2: update       3: revert       4: add untracked
  5: patch        6: diff         7: quit         8: help
  1. status 查看变更状态
  2. update 更新文件
  3. revert 还原提交
  4. add untracked 添加未跟踪文件
  5. patch 补丁
  6. diff 比较不同
  7. quit 退出
  8. help 帮助

patch 命令的选项

y - 暂存此区块
n - 不暂存此区块
q - 退出;不暂存包括此块在内的剩余的区块
a - 暂存此块与此文件后面所有的区块
d - 不暂存此块与此文件后面所有的 区块
g - 选择并跳转至一个区块
/ - 搜索与给定正则表达示匹配的区块
j - 暂不决定,转至下一个未决定的区块
J - 暂不决定,转至一个区块
k - 暂不决定,转至上一个未决定的区块
K - 暂不决定,转至上一个区块
s - 将当前的区块分割成多个较小的区块
e - 手动编辑当前的区块
? - 输出帮助

2. git status

git status命令用于查看在你上次提交之后是否有对文件进行再次修改。

git status

通常我们使用-s命令获取简短的输出结果

git status -s

AM 状态的意思是这个文件在我们将它添加到缓存之后又有改动。

3. git diff

git diff 命令比较文件的不同,即比较文件在暂存区和工作区的差异。

git diff 命令显示已写入暂存区和已经被修改但尚未写入暂存区文件的区别。

git diff 有两个主要的应用场景。

  • 尚未缓存的改动:git diff
  • 查看已缓存的改动: git diff --cached
  • 查看已缓存的与未缓存的所有改动:git diff HEAD
  • 显示摘要而非整个 diffgit diff --stat
  1. 显示暂存区和工作区的差异
git diff [file]
  1. 显示暂存区和上一次提交(commit)的差异
git diff --cached [file]
# or
git diff --staged [file]
  1. 显示两次提交之间的差异
 git diff [first-branch]...[second-branch]

4. git commit

git commit 命令将暂存区内容添加到本地仓库中。

  1. 提交暂存区到本地仓库中
git commit -m [message]
  • message 可以是一些备注信息。
  1. 提交暂存区的指定文件到仓库区
git commit [file1] [file2] ... -m [message]
  1. 修改文件后直接提交
git commit -a

该命令直接提交无需git add .

5. git reset

git reset命令用于回退版本,可以指定退回某一次提交的版本。

会删除之前全部的提交

  1. 基本命令
git reset [--soft | --mixed | --hard] [HEAD]
  • --soft 用于回退到某个版本, 将之前提交的内容保存到缓存区
  • --mixed 为默认,可以不用带该参数,用于重置暂存区的文件与上一次的提交(commit)保持一致,工作区文件内容保持不变。
  • --hard 撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到上一次版本,不保留缓存区

  • HEAD 设置回退到那个版本
    • head^ 回退到上个版本
    • head~[number] 回退到之前第number个版本
    • commit id 回退到指定commit
  1. 取消文件暂存
git reset HEAD <file_name>

执行 git reset HEAD 以取消之前 git add添加,但不希望包含在下一提交快照中的缓存。

6. git rm

git rm命令用于删除文件。

如果只是简单地从工作目录中手工删除文件,运行 git status时就会在 Changes not staged for commit的提示。

  1. 将文件从暂存区和工作区中删除
git rm <file>
  1. 强行删除文件

如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f

git rm -f <file>
  1. 暂存区域移除,但仍然希望保留在当前工作目录(从stash中删除)
git rm --cached <file>

7. git mv

git mv 命令用于移动或重命名一个文件、目录或软连接。

git mv [file] [newfile]

如果新文件名已经存在,但还是要重命名它,可以使用 -f 参数

git mv -f [file] [newfile]

8. git rebase

git rebase -i [startpoint] [endpoint]
git rebase -i HEAD~[number]

# 复制到指定分支
git rebase [startpoint] [endpoint] --onto [branchName]
  • -i的意思是--interactive,即弹出交互式的界面让用户编辑完成合并操作,[startpoint] [endpoint]则指定了一个编辑区间,如果不指定[endpoint],则该区间的终点默认是当前分支HEAD所指向的commit(注:该区间指定的是一个前开后闭的区间)。
  • 可以通过[HEAD]指定number的方式进行选择需要合并的内容

命令选项

  • pick:保留该 commit(缩写:p)
  • reword:保留该 commit,但我需要修改该 commit 的注释(缩写:r)
  • edit:保留该 commit, 但我要停下来修改该提交(不仅仅修改注释)(缩写:e)
  • squash:将该 commit 和前一个 commit 合并(缩写:s)
  • fixup:将该 commit 和前一个 commit 合并,但我不要保留该提交的注释信息(缩写:f)
  • exec:执行 shell 命令(缩写:x)
  • drop:我要丢弃该 commit(缩写:d)

参考简书: 【Git】rebase 用法小结

9. git restore

git restore命令是撤销的意思,也就是把文件从缓存区撤销,回到未被追踪的状态。

该命令有git restore <file>git restore --staged <file>

3. 提交日志

1. git log

查看历史提交记录。

git log
  • --oneline 简洁版本
  • --graph 查看开发历史
  • ` –reverse` 逆向显示
  • ` –author`指定用户
  • more 查看

2. git blame

查看指定文件修改记录

git blame <file>

4. 远程操作

1. git remote

git remote 命令用于在远程仓库的操作。

  1. 显示所有远程仓库
git remote -v
  1. 显示某个远程仓库信息
git remote show [remote]
  1. 添加远程版本库
git remote add [shortname] [url]
  1. 删除远程仓库
git remote rm name
  1. 修改仓库名
git remote rename old_name new_name
  1. 更改远程仓库地址
git remote set-url origin [url]

注: 新版本GitHub需要usertoken方式进行认证,username/password会提示失败

2. git fetch

git fetch 命令用于从远程获取代码库。(只拉取远程代码不合并)

git fetch [alias]
  • alias 远程仓库名

3. git pull

git pull <远程主机名> <远程分支名>:<本地分支名>

git pull命令用于从远程获取代码并合并本地的版本。

git pull 其实就是 git fetchgit merge FETCH_HEAD 的简写

4. git push

git push命用于从将本地的分支版本上传到远程并合并。

git push <远程主机名> <本地分支名>:<远程分支名>

如果本地分支名与远程分支名相同,则可以省略冒号

git push <远程主机名> <本地分支名>
  • --force 强行推送
  • --delete 删除分支

5. 分支管理

1. git branch

  1. 创建分支
git branch (branchname)
  1. 查看分支
git branch

没有参数时,git branch会列出你在本地的分支。

  1. 创建分支并立即切换
git checkout -b (branchname)
  1. 删除分支
git branch -d (branchname)

2. git checkout

  1. 切换分支
git checkout (branchname)

3. git merge

  1. 合并分支
git merge