git常用命令

Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念。

  • 工作区(Working Directory)

就是你在电脑里能看到的目录

  • 版本库(Repository)

工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD
前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。
你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。
所以,git add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit就可以一次性把暂存区的所有修改提交到分支。

  • git init

在当前目录下创建一个空的git仓库

  • git add

添加一个文件到仓库
例如,此时目录下有一个hello.txt格式的文件,要添加这个文件到仓库,命令为git add hello.txt
如果目录下有多个文件,都要添加到仓库的话,命令为git add .
这个[.]点符号,就是代表全选的意思

  • git commit

将之前添加到仓库的文件提交到仓库
命令后面可以加参数-m 是对这次提交的注释,例如git commit -m "首次提交"
还有一种用法,就是不使用git add 添加文件到仓库,直接使用git commit -a -m "首次提交"
这个命令就是直接提交你改动过的文件到仓库

  • git cherry-pick

命令git cherry-pick [commit ID]合并某个分支上的某个提交,操作对象是一个commit提交,首先查询到要合并commit提交的commit ID,然后执行前面的命令,如果没有代码冲突,合并到这里就结束了。如果有代码冲突,解决代码冲突,然后继续执行命令

git add .
git cherry-pick --continue
git push

解决冲突之后,git add .把合并过来的修改添加到仓库中,然后git cherry-pick --continue继续执行之前的合并操作,至此合并完成,就可以git push提交到远程仓库了。

  • git status

查看仓库当前的状态。 命令git status

  • git diff

difference的所写,顾名思义,就是查看差异的,可以查看文件的改动内容。命令git diff
命令git diff HEAD -- hello.txt可以查看工作区和版本库里面最新版本的区别

  • git reset

  1. 回退提交版本,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100,命令git reset [options] HEAD^ options参数有两个--soft保留当前回退版本之后的工作区修改 --hard 撤销当前回退版本之后的工作区修改(谨慎使用)
    最新的那个版本已经看不到了!好比你从21世纪坐时光穿梭机来到了19世纪,想再回去已经回不去了,肿么办?
    办法其实还是有的,只要上面的命令行窗口还没有被关掉,你就可以顺着往上找啊找啊,找到那个commit id,于是就可以指定回到未来的某个版本: git reset --soft [commit id]
    如果是误提交且已经推送到了远程,现在要回退到某个提交版本,误提交的版本不再需要了,完成的操作流程如下:
    <1>. git log查看提交记录,找到正确版本的commit id
    <2>. git reset --soft [commit id]回退版本, 使用--soft保留修改比较稳妥
    <3>. git push origin [分支名] --force强制提交当前版本为最新版本
    此时,暂存区内还保留着上次误提交的修改记录,如果修改或删除,再使用git reset HERD [filename]撤销暂存,接下来就可以按需修改了。
  2. 如果已经git add提交到了暂存区,但是还没有git commit提交到分支,就可以使用命令git reset HEAD <file>可以把暂存区的修改撤销掉(unstage),重新放回工作区,这样暂存区就是干净的了,工作区里有修改
    命令git reset HEAD -- <filename>
  3. 现在,假设你不但改错了东西,还从暂存区提交到了版本库,怎么办呢?可以回退到上一个版本。不过,这是有条件的,就是你还没有把自己的本地版本库推送到远程。
  • git log

显示从最近到最远的提交日志
如过信息输出太多不好看的话,可以加上--pretty=oneline参数简化输出信息。
命令git log --pretty=oneline
命令git log --graph可以看到分支合并图
命令git log -p可以查看每次提交的更改内容

  • git reflog

如果在回退版本以后又想再次回到之前的版本,git reflog可以查看所有分支的所有操作记录(包括commit和reset的操作),包括已经被删除的commit记录,git log则不能察看已经删除了的commit记录

  • git checkout

命令git checkout -- hello.txt意思就是,把hello.txt文件在工作区的修改全部撤销,这里有两种情况:
一种是hello.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是hello.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit或git add时的状态。
git checkout -- file命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令
git checkout sixah origin/sixah 创建本地分支sixah,映射远程分支origin/sixah

  • git rm

命令git rm用于删除一个文件。假如你在工作区误删了一个文件,如果这个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。
如果版本库中也不需要删除的那个文件的话,使用git rm命令就可以删掉这个文件了
命令git rm -r --cache [directory]删除远程仓库中已经提交的目录,执行完命令,记得commit一次提交

  • git remote

命令git remote add origin <远程仓库地址>关联远程仓库,这样就可以把本地仓库的文件同步到远程仓库
origin是远程仓库的名字,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库
命令git remote -v查看当前本地的Git仓库关联的远程仓库信息
命令git remote remove <远程仓库名>删除关联的远程仓库

  • git push

把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。命令git push -u origin master
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
git push --set-upstream origin master如果是第一次提交,需要设置提交和追踪的分支

  • git config credential.helper store

如果是http的远程仓库地址,也没有添加git密钥,每次提交都会让你输入你的git用户名和密码,当你输入过一次用户名和密码后,输入这个命令,git就会自动保存你的用户名和密码,下次再提交的时候,就不需要输入用户名和密码了

  • git clone

要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone命令克隆。命令git clone <远程仓库地址>
然后就会在本地当前目录下,创建一个本地库

  • git branch

git branch命令会列出所有分支,当前分支前面会标一个*
git branch <name>创建分支
git checkout <name>切换分支
git checkout -b <name>创建+切换分支
git branch -d <name>删除分支
如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。

  • git merge

git merge <name>命令用于合并指定分支到当前分支。默认为fast forward快速合并模式
合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。命令git merge --no-ff -m "merge with no-ff" dev
请注意--no-ff参数,表示禁用Fast forward

  • git stash

git stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作
git stash list命令可以查看存储起来的工作现场
Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法:
一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;
另一种方式是用git stash pop,恢复的同时把stash内容也删了:
比如模拟场景。修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。
git stash clear 清空所有记录

  • git pull

从远程抓取分支,使用git pull

  • git rebase

git rebase操作可以把本地未push的分叉提交历史整理成直线
git rebase -i修改提交历史信息,运行命令后,会进入交互式界面,如下所示

pick 5e187c7dbe8    add center style indent
pick 6d577eb3440    add center style
pick f9b9508a3ab    add center style
pick 111ab9cc261    update templates
# Rebase 150a643..2fad1ae onto 150a643
#
# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like "squash", but discard this commit's log message
#  x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out

如果我们需要合并历史的话,可以修改pick 为fixup,代表把当前提交信息合并到上一次的提交

pick 5e187c7dbe8    add center style indent
fixup 6d577eb3440   add center style
fixup f9b9508a3ab   add center style
fixup 111ab9cc261   update templates
# Rebase 150a643..2fad1ae onto 150a643
#
# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like "squash", but discard this commit's log message
#  x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out

这样就把最近的三次提交都合并到了第一次提交里面

  • git tag

命令git tag <tagname>用于新建一个标签,默认为HEAD,也可以指定一个commit id
命令git tag -a <tagname> -m "blablabla..."可以指定标签信息
命令git tag可以查看所有标签
命令git push origin <tagname>可以推送一个本地标签;
命令git push origin --tags可以推送全部未推送过的本地标签;
命令git tag -d <tagname>可以删除一个本地标签;
命令git push origin :refs/tags/<tagname>可以删除一个远程标签。

  • 配置别名

有没有经常敲错命令?比如git statusstatus这个单词真心不好记。
如果敲git st就表示git status那就简单多了,当然这种偷懒的办法我们是极力赞成的。
我们只需要敲一行命令,告诉Git,以后st就表示status

$ git config --global alias.st status

好了,现在敲git st看看效果。
当然还有别的命令可以简写,很多人都用co表示checkoutci表示commitbr表示branch

$ git config --global alias.co checkout
$ git config --global alias.ci commit
$ git config --global alias.br branch

以后提交就可以简写成:

$ git ci -m "bala bala bala..."

--global参数是全局参数,也就是这些命令在这台电脑的所有Git仓库下都有用

  • 参考文档

https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000#0

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 210,914评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 89,935评论 2 383
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,531评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,309评论 1 282
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,381评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,730评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,882评论 3 404
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,643评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,095评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,448评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,566评论 1 339
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,253评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,829评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,715评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,945评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,248评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,440评论 2 348

推荐阅读更多精彩内容

  • 一、 Git 常用命令速查 git branch 查看本地所有分支 git status 查看当前状态 git c...
    LOVE_晴天阅读 2,321评论 0 10
  • git branch 查看本地所有分支 git status 查看当前状态 git commit 提交 git b...
    猿万阅读 5,046评论 1 45
  • Git简介 Git是Linux之父Linus的第二个伟大的作品,它最早是在Linux上开发的,被用来管理Linux...
    Windy_816阅读 27,125评论 1 37
  • 图片来源于自拍和部分网络, 文:墨涵哥哥! 内容:胡编乱造! 笔名李墨涵,书名《墨涵哥哥》! 第三章:《古寺禅悟之...
    书香留韵阁阅读 2,130评论 33 25
  • 1 曾经在我的意识里,“浪费时间”就是一个绝对的贬义词,一种应该被谴责的行为。直到我看到演员张鲁一的一个采访,突然...
    S的魔镜阅读 650评论 1 7