常用git指令总结

429 阅读8分钟

前言

git在平时的工作中可以高效的帮助我们进行版本的管理。但是不知道大家是不是跟我一样,平时用到的git指令就那么几个,有事没事 git pull 一下,完成代码之后就 git add .git commit -m xxxgit push 等等,可一旦遇到一些不常用的,像 版本回退撤销选择合并 之类的操作,虽然也知道是 reset, revertcherry-pick 指令,但是就还是不放心,要再去网上查一下,确认之后才继续使用,说到底还是这些指令用得少。

这次,就总结一下平时工作中会遇到的一些指令,以及一些好用的操作,方便自己也方便大家。

git指令

git config

git config 用于配置全局信息,一般常用于配置用户名,邮箱

git config --global user.name "zhangsan"

git config --global user.email "zhangsan@163.com"

git init

git init 初始化仓库

git clone

git clone <版本库的网址> 将存储库克隆到新目录中。

git add

git add 将文件添加至暂存区

git add . 将有更新的所有文件添加至暂存区

git commit

git commit -m xxxxx 将暂存区内容添加到本地仓库

git commit -am xxxxx 相当于git add . + git commit -m xxx 指令(但对于新增的文件不能直接使用该指令进行提交)。

git commit --amend 可以修改最近的一次提交信息。

具体操作:

  1. git commit --amend 在弹出面板中输入i,进入编辑模式,然后可以修改commit message信息
  2. 修改完成之后,按 ESC 退出编辑,输入:wq退出,完成修改
  3. 如果想在最近的一次修改中,新增其他修改,可以使用git commit --amend -a指令,类似上面两步操作,可以在第二步结束后自动带上暂存区的操作。

git fetch

git fetch 将某个远程主机的更新,全部取回本地。默认情况下,git fetch取回所有分支的更新。(注意: 仅仅只会拉取远程的更改,不会进行合并本地分支

git fetch <远程主机名> <分支名> 如果只想取回特定分支的更新,可以指定分支名

git merge

git merge branchNamebranchName 分支合并到当前分支中,自动进行新的提交

git merge --abort 当合并遇到冲突时, 想退出合并,可以执行该指令。

git merge --continue 当合并遇到冲突,解决完冲突之后,可执行该指令完成合并。

git merge 的合并,会产生一次新的提交

git rebase

git rebase branchNamebranchName 分支合并到当前分支中,自动进行新的提交

git rebase --abort 当合并遇到冲突时, 想退出合并,可以执行该指令。

git rebase --continue 当合并遇到冲突,解决完冲突之后,可执行该指令完成合并。

git rebase 整体指令跟merge差不多,但是不同点在于:

  • rebase的合并,并不会生成一次新的提交记录。
  • merge的合并,会生成一条新的提交记录。

merge解决冲突的时候,只需要解决一次即可,可以理解为,两个分支比对之后,后续更新的提交中所有的不同点都摘出来,处理之后,作为一次新的提交即可完成合并。

而rebase,如果有多次提交都有冲突文件,那么我们需要去依次解决这些冲突,每处理完成一个,执行git rebase --continue指令继续处理下一个冲突,如果某次冲突我们并不需要处理,那么可以使用 git rebase --skip 来跳过这次 rebase 操作(但这个操作使用的时候需谨慎),当所有冲突处理完成之后即可完成合并。

git pull

git pull <远程主机名> <远程分支名>:<本地分支名> 命令用于从远程获取代码并合并本地的版本,就是 git fetch 和 git merge的简写。

git pull如果当前分支只有一个追踪分支,远程主机可以省略。

git pull --rebase <远程主机名> <远程分支名>:<本地分支名> 如果合并需要采用rebase模式,可以使用–rebase选项。

git push

git push <远程主机名> <本地分支名>:<远程分支名> 用于将本地分支的更新,推送到远程主机。

git push -u <远程主机名> <本地分支名> 如果当前分支与多个主机存在追踪关系,则可以使用-u选项指定一个默认主机,这样后面就可以不加任何参数使用git push

git push --all origin 将所有本地分支都推送到origin主机。

git stash

git stash 命令用于将当前的更改存储在一个额外的工作目录中。一般在面对,我们需要临时处理bug,但是手头工作又没能完全处理完的情况,可以用这个命令暂时将当前分支修改的内容存起来,等后续bug解决之后,再将这部分内容拿出来继续工作。

git stash save "xxxxxx"  这个命令与直接git stash功能上类似,但是可以留下一些备注信息,方便后续应用这部分修改的时候去查找。

git stash list 展示额外工作目录中所有进行过的存储。也就是每进行一次git stash,就会留下一次记录,这个指令将所有的git stash操作记录给展示出来。

git stash apply 应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储。也可以使用git stash apply 1,后面数字可以变动,这样就可以使用存储列表中任一位置的存储。

git stash pop 用法和apply一样,只不过该指令在应用存储之后,会将存储从存储列表中删除。

git stash drop 从存储列表中删除最近一次的存储。后面加数字可以指定删除某个存储。

git stash clear 删除所有存储。

git reset

git reset [--soft | --mixed | --hard] [HEAD] 作用是修改HEAD指针指向的位置,便于我们回退版本。完成回退操作之后,则HEAD指针新指向的版本之后的所有版本都被丢弃。

git reset HEAD^ fileName 回退某个文件 (fileName) 到上一个版本。

git reset HEAD^ 回退所有内容到上一个版本。

git reset HEAD^ --mixed --mixed为默认,可以不用带该参数,版本会回退到上一个版本,从上一个版本到当前,这期间的修改内容都会被重新放入工作区,也就是工作区文件内容保持不变(git status之后,这部分内容是 红色 的)。

git reset HEAD^ --soft 加了--soft 之后,版本会回退到上一个版本,而从上一个版本到当前,这期间的修改内容会被重新放入暂存区(git status之后,这部分内容是 绿色 的)。

git reset HEAD^ --hard 加了--hard 之后,版本会回退到上一个版本,并将工作区的所有内容进行删除,是一个全方面的回退(git status之后,得到的是working tree clean)。

git reset commitId 回退到指定版本。可以通过git log查看日志,复制想要回退的版本commitId,再执行此命令进行回退操作。

git revert

git revert 是反做版本,类似于撤销。但这里的撤销和reset的那种回退不同的是,它会生成一个新的 commit 提交。一般用于我们提交了多个版本,但突然想撤销中间的某次修改,而保留其他的改动不变,这时就可以用revert 反做版本进行撤销操作。

git revert commitId 反做commitId对应的版本。撤销完成之后会自动进行提交文件,但需要通过编辑器编辑提交信息。

git revert -n commitId 反做commitId对应的版本,但不会自动进行提交,修改内容保留在暂存区,如果需要提交,可自行通过git commit进行操作。

git cherry-pick

git cherry-pick commitId 将指定 commitId 的提交合并至当前分支。主要应对某个分支的改动有很多,但是我们这次只想要其中的某一个提交。

git cherry-pick commitIdA..commitIdB 命令可以转移从 commitIdA 到 commitIdB 的所有提交。其中提交 commitIdA 必须早于提交 commitIdB。注意,commitIdA的提交将不会包含在cherry-pick 中。如果要包含提交 commitIdA,可以使用 git cherry-pick commitIdA^..commitIB

git checkout

git checkout 分支名 切换分支。

git checkout -b 分支名 以当前分支为基础,创建一个新的分支。

git checkout fileName 当还没有进行commit提交的时候,还原某个文件的改动。

git checkout  . 将工作区的所有文件的内容恢复到暂存区的状态。

git checkout 分支名 文件名 当我们进行合并操作出现冲突的时候,对于某个文件,我们想要完全保留某个分支对应的该文件版本,可以通过该指令进行操作。

git restore

git restore 文件名 丢弃对应文件工作区的内容,类似于撤销。

git restore --staged 文件名 将提交至暂存区的文件重新放回工作区。

最后

git 的这些指令我们平时常用的也就是那么几个,但是我们总会遇到一些特殊情况,希望这篇总结能够给朋友们带来些许帮助。我自己是用命令行用习惯了,有的朋友会使用工具进行界面化操作,当然也没有问题,只要好用就行嘛。

那 git 指令的总结就到这里啦。