Git日常笔记

2015-12-10

初次使用配置用户信息

git config --global user.name "xxxx"
git config --global user.email "xxxx@malu.me"

一次完整提交

git add .
git commit -m'修改BUG'
git push

使用代理

git config http.proxy http://user:pwd@server.com:port

查询

显示文件的每一行是在哪个版本最后修改。

git blame filename.c 

查找commit内容

git log  --pretty=oneline|grep 关键字

查看用户代码量

git log --stat --author='username'|perl -ne 'END { print $c } $c += $1 if /(\d+) insertions/;'

分支

查看本地分支

git branch

查看所有分支 (加-v显示最后一次提交信息)

git branch -a -v

本地创建分支

git branch dev

将本地分支上传至远程

git push origin dev

下载在线的一个分支

git branch dev origin/dev

删除本地分支

git branch -d dev

删除远程分支

git branch -r -d origin/branch-name
git push origin :branch-name

切换本地分支到dev

git checkout dev

标签

本地新建标签

git tag -a only_apache -m "只有apache集成环境"

查看本地标签

git tag

切换至指定标签

git checkout only_apache

把所有本地标签提交到服务器

git push origin --tags

将标签only_apache提交到服务器

git push origin only_apache

Git 合并遇到冲突解决办法

1.使用栈保存编辑数据后pull下来再合并

git stash: 备份当前的工作区的内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前的工作区内容保存到Git栈中。
git pull:  暂存了本地修改之后,就可以pull了。
git stash pop: 从Git栈中读取最近一次保存的内容,恢复工作区的相关内容。由于可能存在多个Stash的内容,所以用栈来管理,pop会从最近的一个stash中读取内容并恢复。
git stash list: 显示Git栈内的所有备份,可以利用这个列表来决定从那个地方恢复。
git stash clear: 清空Git栈。此时使用gitg等图形化工具会发现,原来stash的哪些节点都消失了。

###2.从xxxx分支合并到dev### 先把xxxx分支上的提交hash找出来,再去dev上执行cherry-pick:

git cherry-pick a2a544fd01c2578046b335636e4
git push origin dev

Git后悔药(慎用)

放弃本地修改,直接覆盖之

git reset --hard
git pull

如果只需要移除一个文件

git reset <文件名>

或者如果你想从暂存区移除所有没有提交的修改

git reset

放弃远程上一次提交的内容

git reset --hard HEAD^
或用:
git reset --hard HEAD~1

git push --force

修改错误的提交信息

git commit --amend -m ”YOUR-NEW-COMMIT-MESSAGE”
git push <remote> <branch> --force

恢复某个文件到指定hash

git checkout fc0c4369b362a38 .\index.html

Stash未提交的更改

stash在本质上会取走所有的变更并存储它们为以备将来使用

git stash

检查stash列表,你可以运行下面的命令

git stash list

如果想要解除stash并且恢复未提交的变更

git stash apply

每个stash都有一个标识符,一个唯一的号码(尽管在这种情况下只有一个stash)。 如果只想留有余地进行apply stash,你应该给apply添加特定的标识符

git stash apply stash@{2}

如果想取出stash

git stash pop

取出指定stash

git stash pop stash@{2}

清除stash

git stash drop stash@{0}

清除所有stash

git stash clear

找回删除的stash

git fsck --lost-found
git show 8dd73fa8d14880182f11e24dc10bca570b6127d7

gitk乱码问题

编辑C:\Users\Administrator\.gitconfig 全局文件(也可编辑项目目录.git/config用于设定单个项目):

[gui]
  encoding = utf-8
[i18n]
  commitencoding = {utf-8|gbk}

[gui]用于设定gitk总的编码格式

[i18n]用于设定commit等编码,这个默认不需要去设置

Git Bash中查看日志是能正常显示中文

修改%Git%\etc\profile (Linux下为 ~/.bash_profile 文件),在末尾添加如下一行:

export LESSCHARSET=utf-8

要马上生效,直接设置该环境变量,或者重新登录

ERROR

git pull 报错:

Auto packing the repository for optimum performance. You may also run “git gc” manually. See “git help gc” for more information.

git gc

由于git本身不保存文件之前的差异文件.只保存每个文件的快照.所以在频繁修改大文件的情况下会造成git目录变得肥大不堪.git早就有了解决方案.git gc后,会在.git目录下生成一个packfile与idx文件.只保存文件差异

Git忽略规则及.gitignore规则不生效的解决办法

原因是.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。

那么解决方法就是先把本地缓存删除(改变成未track状态),然后再提交:

git rm -r --cached .    #将会移除所有的缓存索引
git add .
git commit -m 'update .gitignore'

git pull的时候遇到

Unlink of file ‘.git/objects/pack/pack-***.pack’ failed. Should I try again? (y/n) y

上面的问题,按n或者y都没有用,先Ctrl+C

再执行:

git gc --auto  #自动清理本地的文件
git repack -d -l   #	将版本库未打包的松散对象打包

openshift git clone Permission denied

openshift执行git clone ssh://xxx@xxx.rhcloud.com/~/git/xxx.git/ 时报错 :

Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

fatal: Could not read from remote repository.

Please make sure you have the correct access rights

and the repository exists.

解决办法:

将密钥拷贝的.ssh目录下,改名id_rsa/id_rsa.pub(密钥/公钥)再执行克隆命令成功解决。

自动脚本

每次提交md笔记需要敲命令,感觉太麻烦了,于是有了这个windows BAT脚本

自动git pull

@echo off
@echo ========================================================
@echo 更新git
@echo ========================================================
C:\Users\malu\AppData\Local\GitHub\PortableGit_d76a6a98c9315931ec4927243517bc09e9b731a0\git-cmd.exe "git pull && exit"

自动提交:

@echo off
@echo ========================================================
@echo 提交git
@echo ========================================================

C:\Users\malu\AppData\Local\GitHub\PortableGit_d76a6a98c9315931ec4927243517bc09e9b731a0\git-cmd.exe "git add . && git commit -am 'update' && git push && exit"
exit