Git -- 使用 -- 命令行

基本操作

cd <目录名> //进入某个目录
cd .. //返回上一级目录
ls //查看当前目录的文件
ls -l //查看当前目录的文件的详细信息
cat <文件名> //打印某个文件内容

设置身份信息

git config --global user.name <用户名>
git config --global user.email <邮箱>

查看身份信息

git config --global user.name
git config --global user.email

设置编辑器与对比器

git config --global core.editor emacs
git config --global merge.tool vimdiff

查看设置

git config --list //查看所有设置
git config --global --list //查看所有全局设置

Git里面一共有3个配置文件:仓库级配置文
件(local)、全局级配置文件(global)、系统级配置文件(system)。

获取帮助

git help <命令>

创建本地的代码仓库

本地没有项目情况:

git init <工程名>

本地有项目情况:

git init

将文件放入暂存区

git add <文件名> //添加一个文件到暂存区
git add -u //将所有Tracked文件中被修改或删除的文件信息添加到暂存区,不会处理Untracked文件
git add . //将工作区的所有文件全部加到暂存区

如果对新添加的文件执行git add操作,那么该文件已经添加到版本控制系统(Tracked)中。如果想从版本控制系统中移除,可以执行以下命令:

git rm -r --cached <文件名> //对某一个文件清除版本控制标记
git rm -r --cached . //对所有文件清除版本控制标记

问题:
文件存在于本地分支与远程分支,执行git rm -r --cached操作,修改远程分支文件,然后执行git pull操作,是否会覆盖工作区文件?
分析:
执行git rm -r --cached操作后,文件处于UnTracked状态,这时执行git pull操作,会同步远程分支到远程跟踪分支,但是远程跟踪分支合并到本地分支失败,因为工作区有未提交的修改(即执行git rm -r --cached操作后工作区有UnTracked文件,需要执行git add操作跟git commit操作)。如果先执行git add操作跟git commit操作,再执行git pull操作,就会同步远程分支到远程跟踪分支跟本地分支,工作区文件会被覆盖。

将暂存区的内容提交到分支

git commit -m <描述>

查看工作区与暂存区的状态

git status

查看差异对比

git diff //比较工作区与暂存区的差异
git diff <文件名> //比较工作区文件与暂存区文件的差异
git diff <7位版本号> <文件名> //比较工作区文件与某个提交历史记录的差异
git diff HEAD //比较工作区与HEAD指针指向内容的差异
git diff <7位版本号> <7位版本号> //比较两次提交之间的差异
git diff <分支名> //比较工作区与某分支的差异,远程分支这样写:remotes/远程仓库名/远程分支名
git diff <分支名>..<分支名> //比较两个分支之间的差异
git diff --staged //比较暂存区和版本库差异  
git diff --cached //比较暂存区和版本库差异 
如果只想统计哪些文件被改动,多少行被改动,可以添加 --stat 参数

git diff 输出结果分析

查看提交历史记录

git log //查看所有提交记录(SHA-A校验和,作者名称,邮箱,提交时间,提交说明)
git log -<次数> //查看最近多少次的提交记录
git log -p -<次数> //查看最近多少次的详细提交记录
git log <文件名> //查看某个文件的修改记录
git log -p <文件名> //查看某个文件的详细修改记录
git log --author=<用户名>  //查看某个人的提交记录
git log --grep=<过滤信息> //列出提交信息中包含过滤信息的提交记录
git log --pretty=format:"%ad : %h : %an : %s" //定制格式显示提交记录
git log --oneline //提交记录以精简的一行输出
git log --stat //显示每次提交有哪些文件被改动,多少行被改动
git log --graph --all //图像显示分支的合并历史
git log --graph --pretty=oneline --abbrev-commit //图像显示分支的合并历史,每个提交记录只显示一行且只显示7位的版本号

查看某次提交修改内容

git show <7位版本号>

查看某行代码是谁写的

git blame <文件名> //查看某个文件的每一行代码的作者,最新提交版本号和最新提交时间

查看某个分支的版本号

git rev-parse <分支名>

文件恢复(reset)

(1)工作区中的文件已删除,未执行git add操作:

git checkout <文件名> //注意:会抛弃工作区的修改,不可恢复

(2)工作区中的文件已删除,已执行git add操作,未执行git commit操作:

git reset HEAD <文件名>
git checkout <文件名>

(3)工作区中的文件已删除,已执行git add操作,已执行git commit操作:

git reset HEAD^ //回退到上一个版本
git reset HEAD^^ //回退到上上个版本,以此类推

git checkout <文件名> //从暂存区恢复某个文件到工作区
或者:
git reset --hard <7位版本号> //回退到某个版本,并且工作区会恢复到该版本的状态,不需要再执行git checkout操作

git reset的三个参数(默认为 --mixed):
--soft:修改HEAD指针指向,暂存区和工作区不变。
--mixed:修改HEAD指针指向,暂存区内容丢失,工作区不变。
--hard:修改HEAD指针指向,暂存区内容丢失,工作区恢复以前状态。

撤销提交(revert)

git revert HEAD //撤销最近的一个提交
git revert <7位版本号> //撤销某次修改

生成一个新的提交来覆盖旧的提交,被撤销的提交和新的提交都会有记录。

git revert之后输入 :q! 退出编辑状态。

查看输入的每一条指令

git reflog //不会永远保存,会定期清理

命令自动补全

输入命令的时候按两次Tab

查看分支

git branch //本地分支
git branch -a //本地分支 + 远程跟踪分支
git branch -r //远程分支

git remote //远程仓库名字
git remote -v //远程仓库地址

创建分支

git branch <分支名>

切换分支

git checkout <分支名>

创建和切换分支

git checkout -b <分支名>

分支合并

1.merge:
把develop分支的修改合并到master分支:
(1)快速合并,合并后无合并记录。切换到master分支:

git merge develop

(2)普通合并,合并后有合并记录。切换到master分支:

git merge --no-ff -m <描述> develop

2.rebase:
A分支跟B分支都是基于master分支的最新版本号checkout出来的。首先,A分支对某个文件进行修改,提交后合并到master分支,这时master分支的版本号已更新,而B分支的base版本号仍然是基于master分支的旧版本号,然后B分支基于master分支执行git rebase操作,将base版本号提高到master分支的最新版本号,这样B分支则是在master分支的最新版本号基础上做修改。

git rebase master

解决合并冲突

1.merge:
打开冲突文件,手动解决冲突,解决后执行git add操作跟git commit 操作。
2.rebase:
打开冲突文件,手动解决冲突,解决后执行以下命令处理下一个冲突:

git rebase --continue

所有冲突解决完后提交修改。

其它命令:

git rebase --abort //放弃所有的冲突处理,恢复rebase前的情况
git rebase --skip //跳过当前冲突,处理下一个冲突,不建议使用

删除分支

git branch -d <分支名> //删除分支,分支上有未提交的修改是不能删除的
git branch -D <分支名> //强行删除分支,尽管这个分支上有未提交的修改

恢复误删的分支

git reflog //查看误删分支的版本号
git branch <分支名> <7位版本号>

分支重命名

git branch -m <旧分支名> <新分支名>

切换分支时保存未commit的修改

1.分支不存在的文件
(1)develop分支新添加文件,未执行git add操作,需要切换到master分支:
可以直接切换到master分支,切换后master分支可以看到develop分支新添加的文件。
(2)develop分支新添加文件,已执行git add操作,需要切换到master分支:
可以直接切换到master分支,切换后master分支可以看到develop分支新添加的文件。
(3)develop分支新添加文件,已执行git add操作,已执行git commit操作,需要切换到master分支:
可以直接切换到master分支,切换后master分支不可以看到develop分支新添加的文件。

2.分支已存在的文件
(1)develop分支对已有的文件进行修改,未执行git add操作,需要切换到master分支,直接切换会报错:

error: Your local changes to the following files would be overwritten by checkout:
        <文件名>
Please commit your changes or stash them before you switch branches.
Aborting

可以执行git add操作跟git commit操作提交修改。
也可以执行以下命令保存修改:

git stash //执行该命令就可以保存develop分支的修改,然后就可以切换到master分支了
git stash apply //从master分支切换回develop分支后,执行该命令就可以恢复develop分支的修改
//之后提交修改需要执行git add操作跟git commit操作

git stash list //stash列表
git stash apply stash@{0} //根据stash标识符恢复修改

(2)develop分支对已有的文件进行修改,已执行git add操作,未执行git commit操作,需要切换到master分支,直接切换会报错:
可以执行git commit操作提交修改。
也可以执行git stash操作保存修改。

修改远程仓库地址

git remote set-url <远程仓库名> <远程仓库地址> 
或者:
git remote rm <远程仓库名> //删除仓库关联
git remote add <远程仓库名> <远程仓库地址> //添加仓库关联

克隆远程仓库

git clone <远程仓库地址> //克隆项目到当前文件夹下
git clone <远程仓库地址> <目录名> //克隆项目到某个目录下

推送本地分支到远程仓库

git push <远程仓库名> <远程分支名> //推送本地分支的内容到远程分支,如果远程分支不存在则会新建一个

比较本地分支与远程跟踪分支的差异

git log -p <本地分支名>..<远程跟踪分支名> 
//例如:git log -p develop..origin/develop

合并远程跟踪分支的内容

git merge <远程跟踪分支名>
//例如:git merge origin/develop

同步远程分支

1.fetch
远程分支获取最新版本到远程跟踪分支,如果不去合并的话,本地分支的内容不会改变。

git fetch <远程仓库名> <远程分支名> //从远程分支获取最新版本到远程跟踪分支
git merge <远程跟踪分支名> //从远程跟踪分支合并最新版本到本地分支

2.pull
pull = fetch + merge。

删除远程分支

git push <远程仓库名> :<远程分支名> //注意空格 
//例如:git push origin :temp

重命名远程分支

先删除远程分支,然后重命名本地分支,接着再push到远程仓库。

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

推荐阅读更多精彩内容

  • 文章基于Mac版本的git操作. 关于 git. 之前一直使用SVN, 开发个人项目时会使用GitHub Desk...
    KenZhangCn阅读 457评论 0 0
  • 1.git init 2.git remote add origin [git地址] 1.先在远程库创建项目,然后...
    易海飞鱼阅读 384评论 0 0
  • 注:此次基础操作来源于stormzhang的资料《从+0+开始学习+GitHub+系列.pdf》,特在此感谢帅张的...
    Wolfog阅读 614评论 0 0
  • 第一部分:基础管理 1 创建版本库 $ git init 2 通过ls -a 查看,就可以看见 .git/文件夹 ...
    php红薯阅读 459评论 0 0
  • 一分钟目的 首先定一个长期的目标,把长期目标分为许多的小目标,年目标细分到月目标,月目标化为周目标,周目标最终分到...
    咕叽_5101阅读 333评论 0 0