git 一些操作的总结

git几个区域图
$$.初始化
git init  //初始化本地git仓库(创建新仓库)
git config --global user.name "xxx"  //配置用户名
git config --global user.email "xxx@xxx.com"  //配置邮件
附加: git merge -Xignore-space-change test //合并代码,忽略空格修改,可避免格式化代码带来的冲突
$$.创建本地分支:git branch a   // git checkout -b a

$$.本地分支推送远程,并将本地与远程分支关联:
git push --set-upstream origin b

$$.删除分支
git branch -d/-D 分支名 //删除本地
$ git push origin --delete/-d <BranchName> //删除远程
$ git branch --merged 已经合并过的分支

$$.提交

git add .   //增加当前子目录下所有更改过的文件至缓存区
git commit -m 'xxx'                  //提交                     
git commit -am 'xxx'                  //上面两句的合并简写           

$$. revert一次提交 【HEAD向前移】

git revert [commit 哈希值]  
git push 
//产生一条新的记录,之前的推送commit记录也还在。
//如果需要将revert的内容再次回滚回来。只需要再次revert之前的记录。

git revert [上一次revert生成的commit哈希值]

$$.revert一次合并
git revert -m 1【要撤销的那条merge线的编号,从1开始计算】 [merge commit 哈希值]

执行操作之后,会生成一条记录,之后再次revert这条记录代码就回来了。

看git graph图
执行操作之后生成的记录

$$. reset
回到指定的HEAD,把HEAD向后移动了一下。并且HEAD之后的记录都会删除。

git reset [回到指定的hash]   //如果不加--hard 会使代码放入工作区,会导致需要手动清除工作区的一些东西。
git reset --hard  [回到指定的hash] //使用这个,本地也会一并删除reset掉的代码
git push -f    //需要强制提交。

此操作执行之后,东西比较不好找回来,所以要慎重使用。
如果实在想要恢复回来。那就是只能去git log文件里面查找回复的
hash。
.git/logs/refs/分支文件里面找到想要恢复到的commit节点。
然后执行:
git reset --hard [commit hash]
$$. 放弃本地【工作区】所有修改,文件的删除,添加

git checkout -- filename //可以把工作区的某个文件的修改撤回到上一次add或者commit的状态,不过filename不能省略。
 
git checkout -- // 不加文件名来查看当前工作区修改了哪些文件,这个只是针对工作区的问题。

e.g.:git checkout a.js  //放弃指定文件修改

git checkout . //放弃所有修改, 只能放弃本地【工作区】修改,并不能放弃已经git add 之后在缓存区的修改。

/**
git clean是从工作目录中移除没有track的文件.
通常的参数是git clean -df:
-d表示同时移除目录,-f表示force,因为在git的配置文件中, clean.requireForce=true,如果不加-f,clean将会拒绝执行.
**/
git clean -df  //只能放弃本地【工作区】添加删除,并不能放弃已经git add 之后在缓存区的操作。

$$. 承接5 那么我们如何把缓存区的修改给删除掉。其实这就是4的操作了。我们只要返回到最初的版本就好了。

git reset【commit hash】 filename 可以把add到缓存区的文件回退到工作区,也就是把add filename这个过程给回退了,这并不会修改文件的内容,这只是要把缓存区的某个文件变成和HEAD这个当前版本相同,也就是说如果你多次add,这会回退到第一次add的过程,和上面的操作一样,也可以不带上文件名来查看哪些文件被添加到了缓存区;

e.g.: git reset 92add090e36390cec5c6d0847755f1de1d0f429f //这个操作会将缓存区的内容都回退到工作区。 git status查看一下,你就能看出来。 如果不想要了

git checkout . && git clean -df //删除工作区新增文件或者修改

如果想要一步到位: git reset --hard 92add090e36390cec5c6d0847755f1de1d0f429f。

$$. 工作区执行merge操作之后,又不想要merge了。
  git merge --abort
cherry-pick
$$.cherry-pick
操作过程相当于将该提交导出为补丁文件,然后在当前HEAD上重放,形成无论内容还是提交说明都一致的提交,冲突是可能的。
另外,cherry-pick不是你描述的那样,他会重新生成一个commit的,只是描述完全一样。
git checkout branch2
git cherry-pick c的哈希码
git cherry-pick e的哈希码
git cherry-pick f的哈希码

一篇很好的关于git rebase 和git merge合并代码的区别总结

$$.git rebase和merge 区别和应用场景

对于两个分支而言,rebase和merge没有区别,
1.但是rebase更干净,因为log hisitory是线性的,但commit不一定按日期先后排,而是local commit总在后面

2.merge之后history变得比较复杂,但是commit按日期排序

总结:普通分支合并master分支用rebase,master分支合并普通分支用merge.

$$.交互式rebase

这种方法通常用于在向别处推送提交之前对它们进行重写。
交互式rebase提供了一个简单易用的途径让你在和别人分享提交之前对你的提交进行分割、合并或者重排序。
在把从其他开发者处拉取的提交应用到本地时,你也可以使用交互式rebase对它们进行清理。

对于我们主要用途可能就是合并commit,修改不好看的commit文案之类的。用法比较难描述,直接上图。我以最近三次的commit为例子。

1.修改最近一次commit描述

git rebase -i HEAD^
image.png

点击i进入编辑模式。根据上面的指令描述来。
将pick该成r ---> wq保存退出,会弹出如下内容

image.png

进入编辑模式 修改你的提交文案 然后 wq。

image.png

修改成功 git log

已经变了

同步远程 git push -f 即可

下面我们一起来看看执行git rebase -i HEAD^^^^ 得到的图:

image.png

红框里面的信息表示从你上一次推送操作起有4个提交。每个提交都用一行来表示,行格式如下:
(action) (partial-sha) (short commit message)

现在你可以将操作(action)改为'edit'(使用提交,但是暂停以便进行修正)或者'squash'(使用提交,但是把它与前一提交合并),默认是'pick'(使用提交)。你可以对这些行上下移动从而对提交进行重排序。当你退出编辑器时,git会按照你指定的顺序去应用提交,并且做出相应的操作(action)。

代码已经push, 要修改.gitignore后如何操作

git rm -r --cached .
git add .
git commit -m  "update .gitignore"
git push

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

推荐阅读更多精彩内容