git命令

Linus Torvalds —— Just For Fun
HEAD头指针

1.获取帮助

  • git help <verb>
  • git <verb> --help

2.建立仓库

(工作平台)

  • git init
  • git add <文件名>( 跟踪该文件)(添加到暂存区)
  • git commit -m“ ....”(添加到git仓库)
    git commit 不加参数则直接打开vim编译与.gitignore格式相同,+'-m'则直接在命令行中输入提交信息
    如果+ " -a"参数则可以跳过add 直接一步操作,跳过使用暂存区
    如 git commit -a -m"跳过暂存区"
  • git push [远程仓库名] [远程分支]

3. git 别名

  • 如 git config --global alias.ci commit ,这输入 git commit 时只需要 git ci

4.查看状态

  • git status
  • git diff
    查看工作区与已暂存的文件的区别,更新了哪些,也就是修改之后还没有暂存起来的变化内容
  • git log (-p查看不同,-num 查看最近几次 -3,-2)
  • git reflog 来查看引用日志
  • git remote show origin(查看origin仓库的更多信息,分支跟踪等信息)
  • git show [commit id]--查看某次提交修改了什么

5. .gitignore

• 所有空行或者以 # 开头的行都会被 Git 忽略。
• 可以使用标准的 glob 模式匹配。
• 匹配模式可以以(/)开头防止递归。
• 匹配模式可以以(/)结尾指定目录。
• 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。

所谓的glob 模式是指 shell 所使用的简化了的正则表达式。星号()匹配零个或多个任意字符;[abc] 匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);问号(?)只匹配一个任意字符;如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如[0-9] 表示匹配所有 0 到 9 的数字)。使用两个星号() 表示匹配任意中间目录,比如a/**/z 可以匹配 a/z,a/b/z 或 a/b/c/z等。

6.撤销操作

  • use "git checkout -- <file>..." to discard changes in working
    如文件readme
    命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:

    1. 一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
    2. 一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

    总之,就是让这个文件回到最近一次git commit或git add时的状态。

  • use "git reset HEAD <file>..." to unstage
    对于上面的第二种,如果已经add到暂存区,可以先use "git reset HEAD <file>..." ,然后再git checkout -- <file>.使他完全撤销更改

版本回退
  • 用git log / git reflog查看commit id
  • git reset --hard [commit id] / git reset --hard [HEAD^] (一个^代表上一个提交)

7.删除文件

  • git rm <file>
    删除工作区和git仓库中的文件
  • git rm --cached
    只取消跟踪,本删除本地工作区文件

8.远程仓库

  • git remote 列出远程服务器的简写 (-v详细)
  • git remote add <shortname> <url>添加远程仓库
  • git clone [url] [name] (可添加自定义仓库名) 克隆,在当前目录下建立一个文件夹
  • git fetch [remote-name]抓取远程仓库的所有数据
    如果你使用 clone 命令克隆了一个仓库,命令会自动将其添加为远程仓库并默认以 “origin” 为简写。所以,git fetch origin 会抓取克隆(或上一次抓取)后新推送的所有工作。必须注意 git fetch 命令会将数据拉取到你的本地仓库 - 它并不会自动合并或修改你当前的工作。当准备好时你必须手动将其合并入你的工作。
  • git pull 会抓取并自动合并到当前分支
  • git remote show origin(查看origin仓库的更多信息)
  • git remote rename [原] [新] 远程仓库重命名
  • git remote rm <name>远程仓库删除

git分支 (重点)

注意,git还有一个指针HEAD,指向当前分支的指针(也就是当前分支的别名)
-git branch <name> 创建分支
-git checkout <br name>切换分支  git checkout -b <>创建分支并切换到这个分支上

在你这么做之前,要留意你的工作目录和暂存区里那些还没有被提交的修改,它可能会和你即将检出的分支产生冲突从而阻止 Git 切换到该分支。最好的方法是,在你切换分支之前,保持好一个干净的状态。

  • git merge <name > 将当前分支与name 分支合并(如果时直接上游将快进,不会用冲突)
  • git branch -d <name>删除分支
2018-08-23 00-24-35 的屏幕截图.png

master和hotfix直接合并,快进


2018-08-23 00-31-51 的屏幕截图.png

master和iss53为和并提交

合并冲突

  • git status 查看冲突文件及位置
 <<<<<<< HEAD:index.html
<div id="footer">contact : email.support@github.com</div>
=======
<div id="footer">
please contact us at support@github.com
</div>
>>>>>>> iss53:index.html

上面HEADB表示当前分支的文件内容,下面表示合并分支的内容

  • git mergetool
    第一次使用要设置: git config merge.tool vimdiff 参见
    这个命令使用图形化界面来合并冲突
  • git add 标记合并的文件
  • git commit 合并完成后输入
    然后显示一个文件,可加如详细信息

分支管理

  • git branch 显示当前所有分支
  • git branch -v 查看分支及其最后一次提交

远程分支

(remote)/(branch) 形式命名
git clone是会自动建立远程分支指针,并以远程的master分支为基础建立本地master分支每次 git fetch d都会更新远程分支指针,本地只能切换到远程分支查看,而不能操作,也就是只要不和远程服务器连接,远程指针就不会移动,但是可以git checkout -b (remote)/(branch)这样以远程分支建立本地分支进行操作


2018-08-23 00-48-50 的屏幕截图.png
拉取操作
  • git fetch <远程仓库名>拉取数据并移动远程仓库指针
    当 git fetch 命令从服务器上抓取本地没有的数据时,它并不会修改工作目录中的内容。它只会获取数据然后让你自己合并。然而,有一个命令叫作 git pull 在大多数情况下它的含义是一个 git fetch 紧接着一个git merge 命令。

  • git merge origin/serverfix 将这些工作合并到当前所在的分支


    2018-08-23 00-50-28 的屏幕截图.png
  • git push origin <本地分支的名字>
    建立远程分支,还本地分支名字一样

  • git push origin serverfix:serverfix,
    它会做同样的事 - 相当于它说,“推送本地的 serverfix 分支,将其作为远程仓库的 serverfix 分支”可以通过这种格式来推送本地分支到一个命名不相同的远程分支。如果并不想让远程仓库上的分支叫做 serverfix,可以运行 git push origin serverfix:awesomebranch 来将本地的 serverfix 分支推送到远程仓库上的 awesomebranch 分支

  • git checkout -b serverfix origin/serverfix
    git checkout -b [branch] [remotename]/[branch]
    fetch到新的远程分支后不会在本地自动建立分支,只会有一个<orign><branch>的只读的远程分支,可以执行改命令,会给你一个用于工作的本地分支,并且起点位于 origin/serverfix。

  • git checkout --track origin/serverfix创建一个跟踪分支(git pull /git push自动识别,)

  • git checkout -b [branch] [remotename]/[branch] 跟踪分支
    git remote show origin(可查看

  • git push origin --delete [remote branch] 删除远程分支

最后,一个远程仓库版本回退的操作

  • git push -f(加上-f 强制执行)
    现在本地master分支上回退版本,然后加上 -f 强制推到远程仓库

参考:《Pro Git》

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

推荐阅读更多精彩内容