git 日常操作记录

git 作为一款流行的协作工具,可以提高发开效率,对于我们开发人员来说,掌握git的使用已经成为一项必备的技能。下面是我平时使用git的一些总结。
首先,线上一张简单概括的技能图:


git 技能图

能掌握上面这张图的技能,你就已经成为git大神级人物了。我只是把日常用到的操作记录下来,给大家分享一下。

1. 使用git查看某个文件的历史修改记录。

使用 git log --follow -p filename 就可以看到这个文件所有的历史修改记录。这样在我们pull代码下来之后想查看某个文件,或者修改了某个文件但是想找到以前版本的代码非常有用。

2. 使用git工具执行 git pull 命令是出现 ssh: connect to host github.com port 22: Bad file number

平常有在公司写demo的习惯,有些写不完的demo,周末回家还可以写写。于是在github上面建了个仓库,在家里与公司的电脑都pull了一份,在公司写不完的demo,回家也可以继续写。
但是今天在公司想要把平时写的demo push到github上面,回家再看看来着,发现竟然报错了,而且还不是平常的错误,错误如下图:

clipboard.png

经谷歌一查,是因为公司把ssh的端口22给禁掉了,但是ssh的端口是可以改的,于是找了一些方法,果然奏效,方法如下:

1)使用管理员权限打开命令窗口,输入 cd ~/.ssh 就进入到了 c:\Users\zhangsan.ssh文件夹下。在该文件夹下新建config文件,输入

host github.com
hostname ssh.github.com
port 443

然后保存退出。

2)在git里面执行 ssh -T git@github.com
3)执行命令之后,出现 Are you sure you want to continue connecting(yes/no)? 输入yes按回车,出现成功提示即可。

2. 使用git工具执行git pull 的时候出现error: unable to create file /web/module/index/login.js (Permission denied)

当pull代码的时候,由于远程分支上有新的文件,pull下来之后应该需要在本地硬盘新建一个文件,由于git没有权限操作硬盘创建文件,才会出现这个错误
所以可以使用管理员权限打开git,然后再pull一遍就可以了。

3. git的后悔药操作

1)本地修改的代码搞乱了,不想要了,想恢复到没改动之前
git checkout -- filePath
2)本地修改的代码使用git add . 添加到暂存区,又不想要了
git reset --soft
git checkout -- filePath
3)本地修改代码之后,并且commit了,也不想要了,就是本地修改的代码给commit的代码都没了
git reset --hard
4)当git pull 的时候,我靠一大堆冲突,老子不知道怎么解决,等别人merge好了再说
git reset --hard
5)老子正在改代码,有个同事过来临时叫我改点东西,那就先把刚改的缓存起来吧
git stash
改完那个问题之后,继续找出刚才的代码
git stash pop

  1. 丢弃所有新建的文件
    git clean -df #返回到某个节点
4. 重新安装git之后、创建rsa 密钥出现 hzliaobolin%USEROROFILE%.ssh/ 不存在,rsa文件不能保存

USEROROFILE 原本是不存在的,是使用git config --global user.name 之后才会出现的,而且这个文件夹应该保存在C:\user\hzliaobolin\下,其实这个文件夹必须在git安装完成之后立即配置git config --global 才会生成
而安装完git之后,打开git、默认进入的路径是C:\user\hzliaobolin\,在此文件夹下配置用户信息就可。需要正确按照不走安装git
1) 安装git完成、打开git。显示的路劲应该是C:\user\hzliaobolin、然后配置个人信息
git config --global user.name "lbl"
git config --global user.email "hzliaobolin@corp.netease.com"
配置完成之后、会在C:\user\hzliaobolin下生成一个%USEROROFILE%文件夹。
2) 生成git 的ssh key
进入到C:\user\hzliaobolin\目录下、看看是否有.ssh文件夹存在.
如果存在:
清空.ssh文件夹、在C:\user\hzliaobolin文件夹下打开git
然后 cd .ssh
ssh-keygen -t rsa -C "hzliaobolin@corp.netease.com" 按三个回车,密码为空

3)在github上添加ssh密钥,把id_rsa.pub复制粘贴即可

5. 使用git pull 代码或者是git checkout 切换分支时出现 Unlink of file 'templates/media/container.html' failed. Should I try again? (y/n)

出现这个问题的主要原因是由于有其他应用也运行着本地工程里的一些文件,导致更新文件或者切换分支的时候其他应用汇阻止git moving该文件。导致操作失败,
解决方法是找到打开这个文件的应用并将其关闭,实在找不到,那么把其他应用全关了就ok。

使用git diff 查看文件修改了哪些部分

还没有git add . 时:
git diff 查看全部文件的修改
git diff filename 查看具体某一个文件的修改
git add . 之后:
git diff --cached 查看全部文件的修改
git diff --cached filename 查看具体某一个文件的修改

6. 使用git stash 缓存修改 或把修改迁移到其他的分支

当我们当dev分支开发时,突然需要到master分支去改个bug,懒得提交了,那么我们可以使用git stash 把修改的内容缓存起来。然后切到master改完bug之后再切回dev分支,再执行git stash pop,我们的修改又回来到工作区了

当我们在master分支修改代码时,发现我操,分支错了,但是那么多的代码不舍得删啊。那么我们可以使用git stash 先把代码缓存,然后切到dev分支,再使用git stash pop 把代码还原回来了。
git stash list 查看所有的缓存列表
git stash pop [--index] 还原最新/指定的缓存,同时把缓存记录从缓存列表里面删掉
git stash apply [--index] 还原最新/指定的缓存, 不删掉缓存记录
git stash drop [--index] 删除最新的缓存/指定的缓存
git stash clear 删除所有分支的缓存

7. 使用git重命名本地/远程分支

先切换到需要重命名的分支,然后执行以下的命令

git branch -m old_branch new_branch # 重命名本地分支,此时老的分支已不存在
git push origin :old_branch # 删掉远程的老的分支
git push --set-upstream origin new_branch # 推送新的本地分支到远程,并设置本地分支跟踪新的远程分支
8. 使用git bash生成密钥/公钥,并拷贝私钥要github中

今天重装了下git,push代码的时候提示没有权限

lbl@lbl-PC MINGW64 /g/workspace/wuyanxia (master)
$ git pull
The authenticity of host 'github.com (xxx.xx.252.123)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,xxx.xx.252.123' (RSA) to the list of known hosts.
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

发现是忘记生成秘钥了,导致跟以前保存在github中的ssh key不对应,所以不能push代码,于是又去找命令生成了一遍,忘得太快,还是记录一下好:

  1. 随便一个目录打开git bash
  2. 运行命令 cd ~/.ssh
  3. ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
  4. 连续三个回车,然后到c盘下的.ssh文件下就可以看到秘药跟公钥的文件了
  5. 打开id_rsa文件,复制全部的内容,然后打开github
2016-06-19_224853.png

这样就ok了。

9、在windows 7下面git bash 反应异常缓慢

重新装了git最新版本之后,发现在git bash中输入命令之后,一两秒钟才有反应,异常的卡,google了下,找到了解决方法,只要出入一下三条命令就可以了

$ git config --global core.preloadindex true
$ git config --global core.fscache true
$ git config --global gc.auto 256
10、git add 出现/./.git/index.lock': File exists..操作异常

当执行git add 或者git checkout时都提示. /.git/index.lock': File exists.错误,导致git使用不了
只需要去.git目录下把index.lock文件删掉就好了

$ git add .
fatal: Unable to create 'E:/javaWorkspace/study-platform/.git/index.lock': File exists.

Another git process seems to be running in this repository, e.g.
an editor opened by 'git commit'. Please make sure all processes
are terminated then try again. If it still fails, a git process
may have crashed in this repository earlier:
remove the file manually to continue.

git 删除删除分支命令
删除远程分支: git push origin --delete branch-name
删除本地分支: git branch -d branch-name
git 同步远程于本地的分支

使用git branch 查看本地分支与用git branch -r查看本地存的远程分支,发现有些分支在代码仓库中已经被删掉,需要同步。

git remote prune origin // 删除掉没有与远程分支对应的本地分支

11、设置git pull 的默认行为为rebase

git pull操作会先把代码拉下来,然后进行merge,会把一些commit合并掉,然后只有一条merge纪录,不方便review,所以最好改成rebase方式,保留commit

In git >= 1.7.9:
    git config --global pull.rebase true
In git < 1.7.9:
    git config --global branch.autosetuprebase always

参考

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

推荐阅读更多精彩内容