[转载自红超的吾记之谈的博客]Git 使用备忘

1.参与一个开源项目,一定要从自己的帐号下克隆版本库,这样你才能推送修改!

2.Repository 版本库,又名仓库:

可以简单地理解为一个目录,且目录下的所有文本文件可被 Git 管理(建议用 UTF8 编码)。

3.用 git config 命令的 --global 参数,表示你机器上所有的 Git 版本库都会使用这个配置:

$ git config --global user.name"你的名字"

$ git config --global user.email "你的邮箱"

可选设置:

$git config --global color.ui auto<-- 让Git显示颜色,会让命令输出看起来更醒目

$ git config --global alias.缩写后的命令别名 原命令名

注:加上 --global 是针对当前用户起作用的,不加那只针对当前的版本库起作用。

每个 Git 版本库的配置信息都放在 .git 下的 config 文件中。

当前用户的 Git 配置文件放在当前用户主目录下的一个 .gitconfig 隐藏文件中。

4.创建一个版本库:

1) 在你喜欢的路径下新建一个空目录,如:$ mkdir MyProject

注:全路径中不要含中文,以免出问题!

2) 进入目录且初始化成版本库:

$ cd MyProject

$ git init

注:在目录中创建了一个 .git 隐藏目录来管理版本库。

5.把提交新的或变更的文件到版本库中:

1) 用 git add 命令添加要提交的文件:

$ git add 文件名

注:把新添的或修改的文件添加到暂存区(stage)。

在提交前,建议用 git status 命令查看一下各文件的状态。

2) 用 git commit 命令提交全部要提交的文件:

$git commit -m "提交说明信息"

注:把暂存区的所有内容提交到当前分支。

创建 Git 版本库时,Git 自动为我们创建了唯一一个 master 分支。

完成了一定的修改后,就应用 git commit 提交一次,以便之后修改失误时回退。

6.用 git status 命令查看版本库当前的状态:

$ git status

.忽略特殊文件:

某些文件必须放到版本库中,但又不能提交它们,如:调试日志文件。

每次 git status 都会提示 “Untracked files ...”

在版本库的根目录下创建一个特殊的文件:.gitignore ,

然后把要忽略的文件名填进去,Git就会自动忽略这些文件。

注:Windows 资源管理器中新建 .gitignore 文件时,会提示输入文件名,

所以用文本编辑器(如:Notepad++)来生成 .gitignore 文件。

格式参见有用的 .gitignore 模板集:https://github.com/github/gitignore

以 Android.gitignore 举例:

# Built application files

*.apk

*.ap_

# Files for the Dalvik VM

*.dex

# Java class files

*.class

# Generated files

bin/

gen/

# Gradle files

.gradle/

build/

# Local configuration file (sdk path, etc)

local.properties

# Proguard folder generated by Eclipse

proguard/

# Log Files

*.log

注:别忘了把 .gitignore 也提交到版本库中啊!

检验 .gitignore 文件是否合格的方法就是执行 git status 命令。

7.用 git diff 命令查看最后修改的内容:

$ git diff

$ git diff HEAD -- 文件名<-- 查看指定文件在工作区和版本库里面最新版本的区别

8.用 git log 命令查看历史记录:

$ git log<-- 提交信息完整显示

$ git log --pretty=oneline<-- 每行一条提交记录,且仅显示[版本号]和[提交说明]

注:由近及远的显示提交记录。

输出信息中的 commit 后面跟的散列值(SHA1)就是版本号。

9.用 git reset 命令可以回退到指定版本:

1) HEAD - 当前分支上一次提交的版本

$ git reset HEAD

$ git reset HEAD 文件名<-- 把暂存区的修改撤销掉(unstage),重新放回工作区

2) HEAD^ - 当前分支上上一次提交的版本

3) HEAD^^ - 当前分支倒退三次提交的版本

4) HEAD~数字 - 当前分支倒退 n 次提交的版本

5) 指定当前分支版本号(有前七位就够了,Git 有的输出信息也仅输出七位分支版号)

$ git reset 当前分支版本号

A.用 git reflog 命令查看操作记录:

$ git reflog

注:输出信息中包含[版本号][操作类型][操作描述]。

B.用 git last 命令显示最后一次的提交内容:

$ git last

C.用 git checkout 命令切换分支:

$ git checkout -- 文件名<-- 把指定文件在工作区的修改全部撤销

注:在资源/文件管理器中误删除指定文件后可恢复。

注:-- 很重要,没有 --,就变成了切换到指定分支的命令。

注意以下两种情况:

1) 文件自修改后还没有被放到暂存区,撤销修改就回到了和版本库里面最新版本一样的状态;

2) 文件修改后并且已经添加到暂存区,再作修改,撤销修改后就和暂存区的版本一样的状态;

即让文件回到最后一次 git add 或 git commit 时的状态。

$ git checkout -b <本地新分支名> <远程主机名>/<远程分支名>

注:用 git checkout -b 命令在<远程主机名>/<远程分支名>的基础上,

创建一个本地新分支并切换为当前分支。

$ git checkout -b <本地新分支名>

等同于

$ git branch <本地新分支名>

$ git checkout <本地新分支名>

注:在本地当前分支的基础上,创建本地新分支并将其切换为本地当前分支。

用 git branch 命令查看所有分支,当前分支前面会标一个*号。

$ git checkout <本地分支名><-- 切换到指定本地分支

D.用 git rm 命令删除文件:

$ git rm 文件名

注:执行 git commit 命令后文件就从版本库中被删除了。

E.创建 SSH Key :

$ ssh-keygen -t rsa -C 电子邮箱名

注:Windows 下打开 Git Bash 。

当前用户目录里找到 .ssh 目录,里面有 id_rsa 和 id_rsa.pub 两个文件,

id_rsa- 私钥,不能泄露出去,

id_rsa.pub - 公钥,可以发给别人。

F.用 git remote 命令列出所有远程主机:

$ git remote

$ git remote -v<-- 可以查看远程主机的网址

注:为了便于管理,Git 要求每个远程主机都必须指定一个主机名。

克隆版本库的时候,所使用的远程主机自动被 Git 命名为 origin 。

如果想用其它的主机名,需要用 git clone 命令的 -o 选项指定。

1) 用 git remote rename <原主机名> <新主机名> 命令更改远程主机名。

2) 用 git remote rm <主机名> 命令于删除远程主机。

3) 用 git remote show <主机名> 命令查看该主机的详细信息。

G.用 git remote add 命令添加远程主机:

$ git remote add 远程主机名 远程主机地址

GitHub:

$ git remote add origin git@github.com:帐户名/版本库名.git

bitbucket:

$ git remote add origin git@bitbucket.org:帐户名/版本库名.git

注:origin 是远程主机名,这是 Git 默认的叫法,也可以改成别的。

H.用 git push 命令把本地库的所有内容推送到远程库上:

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

$ git push --all <远程主机名><-- 不管是否存在对应的远程分支,将本地的所有分支都推送到远程主机

$ git push <远程主机名> :<远程分支名><-等同-> $ git push <远程主机名> --delete <远程分支名>

注:如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支。

$ git push -u <远程主机名> <本地分支名>

注:如果当前分支与多个主机存在追踪关系,则可以使用 -u 选项指定一个默认主机,

Git 不仅会把本地分支名内容推送到远程主机上新建同名分支,

还会把本地分支和远程主机的同名分支关联起来,

这样接下来就可以用 git push <远程主机名> 命令。

如果当前分支只有一个追踪分支,那么主机名都可以省略,用 git push 命令。

$ git push --force <远程主机名>

注:如果远程主机的版本比本地版本更新,推送时Git会报错,

要求先在本地做git pull合并差异,然后再推送到远程主机。

使用 --force 选项,会导致远程主机上更新的版本被覆盖。

$ git push <远程主机名> --tags

注:使用 --tags 选项推送标签。

I.用 git clone 命令从远程主机克隆一个版本库:

$ git clone <版本库的地址><-- 在本地主机生成一个目录,与远程主机的版本库同名

$ git clone <版本库的地址> <本地目录名> <-- 在本地主机生成一个指定的目录名

注:版本库的地址支持 HTTP(S)、SSH、Git、本地文件协议等。

使用 https 除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令!

$ git clone [user@]域名:帐户名/版本库名.git<-- SSH 协议

执行 git clone 成功后,所有本地分支默认与远程主机的同名分支,建立追踪关系。

J.用 git fetch 命令将远程主机的更新取回本地:

$ git fetch <远程主机名><-- 将指定远程主机的全部更新到本地

$ git fetch <远程主机名> <远程分支名><-- 将指定远程主机的指定分支更新到本地

K.用 git merge 或 git rebase 命令在本地分支上合并远程分支:

$ git merge <远程主机名>/<远程分支名>

$ git rebase <远程主机名>/<远程分支名>

注:在当前分支上,合并<远程主机名>/<远程分支名>。

L.用 git pull 命令取回远程主机上某个分支的更新,再与本地的指定分支合并:

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

注:用 git branch --set-upstream <本地分支名> <远程主机名>/<远程分支名> 命令,

来手动建立追踪关系。

当前分支与远程分支建立了追踪关系,就可以省略 <本地分支名>:<远程分支名>,

用 git pull <远程主机名> 命令取回更新再合并。

如果当前分支只有一个追踪分支,连远程主机名都可以省略,

用 git pull 命令取回更新再合并。

$ git pull <远程主机名> <远程分支名>

注:上面这个命令表示,取回指定远程主机的指定分支,再与当前分支合并,

等同于先执行 git fetch 命令,再做 git merge 命令:

$ git fetch <远程主机名>

$ git merge <远程主机名>/<远程分支名>

M.用 git merge 命令合并指定分支到当前分支:

$ git merge <本地指定分支名> 或 <远程主机名>/<远程分支名>

注 Git 用如下格式标记出冲突内容:

<<<<<<< HEAD

合并时有冲突的当前分支内容

=======

合并时有冲突的指定分支内容

>>>>>>> 指定分支名

$ git merge --no-ff -m "合并说明信息" <本地分支名>

注:--no-ff 参数,表示禁用 Fast forward 模式。

Git 使用 Fast forward 模式后,删除分支后,会丢掉分支信息。

要强制禁用 Fast forward 模式,Git就会在合并时生成一个新的提交,

这样删除分支后也可以从分支历史上看到分支信息。

N.用 git branch 命令管理分支:

$ git branch -r<-- 命令查看远程分支

$ git branch -a<-- 命令查看所有分支

$ git branch <本地新分支名><-- 创建本地当前分支的新分支

$ git branch -d <本地分支名><-- 删除本地指定的分支

注:因为创建、合并和删除分支非常快,所以 Git 鼓励你使用分支完成某个任务,

这和直接在主分支上工作效果是一样的,但过程更安全。

Git 分支十分强大,在团队开发中应该充分应用。

$ git branch -D <本地分支名>

注:新分支还没有合并过,需要强行删除使用 -D 参数。

$ git log --graph<-- 可以看到分支合并图

O.用 git stash 命令存放当前工作现场:

$ git stash

$ git stash list<-- 查看存放的工作现场

$ git stash pop <-- 恢复并删除存放的工作现场

等同于

$ git stash apply stash@{数字} <-- 恢复存放的指定工作现场

$ git stash drop stash@{数字} <-- 删除存放的工作现场

注:如要仅有一个,则可省略 stash@{数字} 参数。

P.用 git tag 命令查看标签:

$ git tag<-- 查看标签

注:标签不是按打标签的时间顺序列出,而是按标签名字母排序的。

$ git tag <标签名><-- 打标签

$ git tag <标签名> [版本号] <-- 对指定版本号打标签

$ git tag -a <标签名> -m "标签说明信息" [版本号]<-- -a 参数指出标签名,-m 参数指出说明信息

注:首先切换到需要打标签的分支上,再打标签。

$ git show <标签名><-- 查看标签信息

$ git tag -d <标签名><-- 删除指定的标签

$ git push <远程主机名> <标签名><-- 推送指定标签到指定远程主机

$ git push origin --tags<-- 一次性推送全部尚未推送到远程的本地标签

注如果标签已经推送到远程,要删除远程标签,就要先从本地删除,然后从远程删除:

$ git tag -d <标签名>

$ git push origin :refs/tags/<标签名>

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

推荐阅读更多精彩内容