Git - 命令

一、 简单命令

  • 创建一个新的 Git 权限
git init     
  • 将文件从工作目录到存储区域。
git add filename    
  • 检查工作目录的内容,暂存区域。
git status         
  • unchecked 未开始跟踪状态(此时状态是红色的)
  • 查看工作目录和存储区域文件的区别
    白色的是上一个版本,+之后绿色的是修改的地方
    按 q 退出 diff 状态
git diff  
  • 添加或者更改文件,Git允许把两部合成一步:
git commit  filename
  • 移动或者删除文件,需要分开
git rm filename
git commit
  • 权限中存储区下的临时存储文件的修改
git commit -m “详情信息”     
  • 查看工程早期的提交版本。提交顺序存放在存储仓库中,你可以这样来查看它。
git log     
- 输出是:一个40位 SHA 的码,提交的唯一标识符。

提交的作者
提交的日期时间
提交的信息

  • 在 Git 中,提交你当前工作的环境的提交称为 HEAD commit。在许多情况下,最近一次的提交时 HEAD commit。
git show HEAD

二、关于回退

  • 将文件存储在你的工作目录下,丢弃当前工作目录上的改变
git checkout HEAD filename
  • 批量添加
git add filename_1 filename_2
  • 在存储区域中重置文件为 HEAD commit 它不能够销毁工作路径中的改变,它仅仅是从存储区域中移除了它们。
    将某一个版本置为HEAD commit。
git reset HEAD filename
gitreset 理解.png

三、分支

  • 输出 * master, * 后面显示了你当前在什么分支下工作。
git branch 
gitreset 理解.png

git branch new_branch
创建新的分支

  • 切换分支
git checkout branch_name
  • 合并分支
git merge branch_name

冲突的情况:

<<<<<<< HEAD
master version of line
=======
fencing version of line
>>>>>>> fencing

输入 fencing 选择 fencing 分支中的 HEAD 作为 HEADcommit

  • 删除分支
git branch -d branch_name

三、remote 远程仓库

  • 克隆远程仓库到工作目录下的名称
git clone remote_location clone_name
  • 查看 git 的远程仓库
git remove -v
  • 将远程仓库的改变合并到本地的仓库中。它将会将这些改变添加到远程分支里面。
git fetch
  • 将远程仓库中的改变合并到你的本地 master 分支。
git merge origin/master
  • 将 test 分支上的指定文件合并到当前分支
git checkout test xxx.txt
  • 创建本地分支,并指定拉取跟踪的远程分支
git checkout --track origin/remoteName -b localName
  • 将其他分支的提交合并到当前分支 cherry-pick
git checkout 想要合并的分支
//单个提交
git cherry-pick 某分支的某个提交的commit-hash
//多个提交,中间使用空格分割
git cherry-pick commit-hash1 commit-hash2 commit-hash3
//合并 commit1 到 commit2 的多个提交
git cherry-pick commit1..commit2
  • git revert
    当别人已经克隆线上提交的代码之后,尽量使用 git revert 来减少影响
//撤销master当前往上属第三个提交
git revert master~3
//撤销前的分支
A->B->C->D->E->F->G
//撤销后
A->B->C->D->E->F->G->D‘
  • 修改之前的提交
 git commit --amend
  • 变基提交
    • 用来改变一串提交是以什么为基础的,举例说明,master 在基于 D 提交之后出现了topic 分支,topic 分支在之后发展了 w、X、Y、Z 提交,master 在D 之后有了 E、F、G、H、I 提交,如果让topic 以最新的 master 的 I 提交作为基,如图:


      变基前.png

      变基后.png
//变基命令
git checkout topic
git rebase master
//或者
git rebase master topic
  • 将一条分支上的开发线整个移植到完全不同的分支上:
//将基于 maint 当前提交的上一个提交分出的分支feature 移植到master 分支上。
git rebase --onto master maint^ feature
移植前.jpg

移植后.jpg
  • 变基操作出现冲突解决方案:

    • 如果发现冲突 rebase 会临时挂起,当冲突解决可以使用 git rebase -continue 恢复变基操作,当觉得这个提交是没有必要的,可以使用 git rebase --skip 跳过(风险很大,有可能之后的提交会依赖这个提交)。如果认为不应该进行变基操作,使用 git rebase --abort 终止
  • 改写提交历史,合并之前提交

//修改基于commit 之后的提交
git rebase -i  commit
  • 多人协作时候的提交merge 现象:
    两个人都基于 develop 分支 B commint 进行开发,a 提交到了远程仓库 C 提交,
    b 也提交了D 本地提交,当b 想要推送至远程仓库的时候,就发生了,问题,出现了 merge 痕迹。

  • git pull --rebase
    拉取上游提交并且把本地提交变基到它们的头部后。

  • 设置一些git配置

git config --global user.name "name"
git config --global user.email "eamil@xx.com"
//查看配置
git config -l
//cat 查看
cat .git/config
//移除设置
git config --unset --global user.email
  • 设置别名
git config --global alias.show-graph \ 
  'log --gragh --abbrev-commit --pretty=oneline'
  • 查看已暂存的文件的sha1
git ls-files --stage
  • 将文件从暂存中取消
git rm --cached filename
  • 重命名文件
//1
mv stuff newstuff
git rm stuff
git add newstuff
//2
git mv stuff newsuff
//显示被改名的文件的整个历史记录
git log --follow filename

四、Git 对象模型

  • Git 对象模型分为工作目录,索引和对象库。


    git对象模型.png
  • 第一步,工作目录变化。当刚编辑完文件,有变化的只有工作目录中的文件内容。

  • 第二步,对象库中出现新的blob,索引指向新的blob。当 add file1 之后对象库中出现了新的 file1 文件的散列ID,然后索引也重新指向新的散列 ID。

  • 第三步,创建新的提交,HEAD变化。commit 之后会有三个步骤:

    • 虚拟树对象,索引将转换成一个真实的树对象之后,以SHA1 命名,然后放到对象库中。
    • 其次,用日志消息创建一个新的提交对象后,新的提交将会指向新创建的树对象以及前一个或父提交。
    • master 分支的引用从最近一次提交移动到新创建的提交对象,成为新的master HEAD。

五、Git 的工作流程

1.从远程仓库抓取并且合并改变
2.为一个新的工程创建一个工作的分支
3.在分支上开发并且提交工作
4.从远程仓库抓取并且合并
5.将分支传递到远程仓库

git push origin your_branch_name

  • 会将内容上传到远程仓库,origin 原始仓库。别人可以重新生成分支并且将你的工作合并到 master 分支上。

六、提交

  • HEAD
    始终指向当前分支的最近提交,当切换分支的时候HEAD会更新为指向新分支的最近提交
  • ORIG_HEAD
    当进行某些操作,merge或reset 时,会将调整为心智之前的先前版本的HEAD记录到ORIG_HEAD,便于回滚。
  • FETCH_HEAD
    当使用远程库时候,git fetch命令将抓取分支的头记录到 git/FETCH_HEAD中。FETCH_HEAD是最近抓取fetch分支的HEAD 简写。
  • MERGE_HEAD
    当一个合并操作正在进行时候,MERGE_HEAD是正在合并进 HEAD 的提交
  • 在master 分支但是不在dev topic 分支上的提交
git log ^dev ^topic master
  • 使用git blame 查看每一行责任归属
#从第一行开始查询
git blame -L 1, filename ```

---

###七、diff
+ 工作目录与索引

git diff

+ 工作目录与 HEAD

git diff HEAD

+ 索引与 HEAD

git diff --cached


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

推荐阅读更多精彩内容

  • git常用命令 GIT常用命令备忘:http://stormzhang.com/git/2014/01/27/gi...
    新篇章阅读 8,449评论 1 26
  • 1. 安装 Github 查看是否安装git: $ git config --global user.name "...
    Albert_Sun阅读 13,627评论 9 163
  • 转 33.2Git命令介绍 一、Git常用命令速查 gitbranch 查看本地所有分支 git status 查...
    xjbclz阅读 979评论 0 11
  • 在我们的一生中有的时候太累了,身体的疲劳,心灵的痛苦,而我们却不知所然,累了,只有自己知道,苦了,也只有自己明白,...
    月古君阅读 145评论 0 0
  • A2-06曾莉 #周检视# 0630-0706 百日目标检视 1. 目标.健身塑形,每月跑步150公里,体重减至4...
    ALLY曾莉阅读 87评论 1 1