local-初始化
全局变量
- git config --global user.name "jerry"
- git config --global user.email "jerry@163.com"
- git config --global color.ui "always"
-
解决中文乱码问题
- 解决bash控制台ls命令中文文件乱码:
在Git\etc\git-completion.bash 文件中追加一行 alias ls="ls --show-control-chars --color=auto"
- 解决bash控制台 git commit 无法输入中文注释:
修改Git\etc\inputrc文件
set output -meta on
set convert -meta off
- 解决git log命令中文注释乱码(只bash控制台好用):
在Git\etc\profile文件中追加一行:export LESSCHARSET=iso8859
- 解决gitk显示中文注释乱码
git config --global i18n.commitencoding ISO-8859
git config --global i18n.logoutputencoding ISO-8859
- 解决bash控制台ls命令中文文件乱码:
初始化新版本库
-
git init
*只会在根目录下创建一个名为.git文件夹
设置忽略的文件
-
设置每个人都要忽略的文件
-
在根目录新建一个名为.gitignore的文本文件
在命令行执行 echo *.jpg>.gitignore (注意>号左右不要有空格)
- 将.gitignore文件加入版本库并提交
-
-
设置只有自己要忽略的文件
修改.git/info/exclude文件,可使用正则表达式
添加新文件到版本库
-
添加单个文件
git add somefile.txt
-
添加所有txt文件
git add *.txt
-
添加所有文件
git add
提交
- git commit -m "add all txt file"
local-日常操作
提交
-
提交所有修改
git commit -m "some msg" -a
-
提交单个文件
git commit -m "some msg" one.txt
-
增补提交
git commit -C head -a --amend
撤销修改
-
撤销尚未提交的修改
-
撤销1、2个文件
git checkout head readme.txt foto.txt
-
撤销所有txt文件
git checkout head *.txt
-
撤销所有文件
git checkout head
-
-
撤销提交
-
反转提交。反转提交但不提交。
例:反转最近一次提交:git revert --no -commit head
*相当于提交最近一次提交的反操作
-
复位
-
取消暂存
git reset 或 fit reset head < filename >
-
复位到head之前的那个版本
git reset -head head^^
*不会在版本库中留下痕迹。使用^^或^
-
-
分支
-
列出本地分支
git branch
-
列出所有分支
git branch -a
-
基于当前分支的末梢创建新分支
git branch < branchname >
-
基于某次提交、分支或标签创建新分支
-
git branch emputy bfe57de0
*用来查看某个历史断面
- git branch emputy2 emputy
-
-
合并分支
-
普通合并
-
合并并提交
git merge < branchname >
*如果发生了冲突,就不会自动提交,如果冲突不多,不想立即解决他们,可以直接使用git checkout head 撤销
-
合并但不提交
git merger --no-commit
实测结果,--no-commit 参数没有生效
-
-
压合合并
-
压合合并后直接提交
git merge --squash < branchname >
-
合合并后但不提交
git merger --squash --no-commit
*两个人合作开发一个新功能时,需要在一个分支上提交多次,开发完成之后在压合成一次提交
-
-
拣选合并
-
挑选某次提交合并但不提交
git cherry-pick --no-commit 5b54b4
*但是要合并的提交只要比当前高2个版本,就会出现奇怪的冲突问题
-
-
-
重命名分支
-
git branch -m < branchname > < newname >
*不会覆盖已存在的同名分支
-
git branch -M < branchname > < newname >
*会覆盖已存在的同名分支
-
-
删除分支
-
git branch -d < branchname >
*如果分支没有被合并会删除失败
-
git branch -D < branchname >
*即使分支没有被合并会删除
-
-
切换分支
- git checkout < branchname >
解决冲突
-
冲突很少时
直接编辑有冲突的文件然后提交即可
-
冲突比较复杂时
git merge tool
- 会生成.BACKUP, .BASE, .LOCAL和.REMOTE四个文件
- 然后自动调用冲突解决工具
- 解决之后手动删除.orig文件(冲突解决之前的文件备份)
- 提交
标签
-
创建标签
-
为当前分支最近一次提交创建标签
git tag 1.0
*标签没有重命名
-
为A分支最近一次提交创建标签
git tag A_1.0 A
*也可以把标签命名为A/1.0
-
为某次历史提交创建标签
git tag 1.0 4ed54x21
-
-
显示标签列表
git tag
-
检出标签
git checkout 1.0
*查看标签断面很方便的方法,但是不能提交
-
由标签创建分支
- git branch b1.1.1.1
- git checkout -b b1.1.1.1
-
删除标签
git tag -d 1.0
查看状态
-
当前状态
git status
-
历史记录
- git log
-
gitk
-
gitk
查看当前分支历史记录
-
gitk < branchname >
查看某分支历史记录
-
gitk -all
查看所有分支
-
-
每个分支最后的提交
git branch -v
其他
导出版本库
- git archive --format=zip head>nb.zip
- git archive --format=zip --prefix=nb1.0/ head>nb.zip
remote-初始化
克隆版本库
-
git clone < url >
例:git clone d:\git\nb
-
*克隆之后会自动添加4个config
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
remote.origin.url=d:\usb
branch.master.remote=origin
branch.master.merge=refs/heads/master
别名
-
添加远程版本库的别名
- git remote add < 别名 $> < 远程版本库的url >
-
*添加别名后会自动添加2个config
remote.origin.url=d:\usb
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
-
删除远程库的别名和相关分支
git remote rm < 别名 >
创建一个无本地分支的库
-
git init -bare
*当需要一个公用的中央库时,非常适合把它简称bare库
remote-日常操作
分支
-
列出远程分支
git branch -r
-
删除远程库中已经不存在的分支
git remote prune origin
从远程库获取
-
获取但不合并
git fetch < 远程版本库 >
例:git fetch origin 。origin是远程库的默认别名
例:git fetch d:\git\nb
-
获取合并并到当前本地分支
-
git pull
*等价于git pull origin
*需配置branch.master.remote=origin和branch.master.merge=refs/heads/maeter。 如果使用了git clone克隆远程库会自动添加这个配置
-
git pull d:\git\nb master
*由于不是从默认远程库获取,所以要指定获取哪个分支
-
推入远程库
-
git push origin master
*远程的master不能是当前分支
remote-github
生成SSH Key
- 启动Git Bash控制台(git -bash.bat)
-
如果以前生成过SSH Key,要先备份
$cd ~/.ssh
$mkdir key_backup
$cd id_rsa*key_backup
* ~/.ssh就是C:\Users\jcl\.ssh
-
生成SSH Key
$ssh-keygen -t rsa -C "jerry@163.com"
*提示Enter passphrase时要输入密码
*生成的SSH Key存放在C:\Users\jcl\.ssh
-
将SSH Key添加到Github账户里
点击链接Account Settings|SSH Public Keys|Add another public key,将id_rea.pub文件中的内容粘贴到key文本框中
-
第一次连接到Github
$ssh git@github.com
输入密码后如果显示信息里包括you've successfully authenticated表示链接成功。之后会在C:\Users\jcl\.ssh建立一个名为known_hosts的文件
创建新库
-
进入Dashboard Tab 页,点击New Repository按钮
*免费的只能public
克隆版本库
-
进入新建的库,点击SSH按钮,复制版本库地址,然后使用git clone命令即可
*点击Git Read-Only按钮可获取只读权限的地址,克隆这个地址不需要密码
让ssh-agent替我们记住密码
-
把密码加密保存在硬盘上
$ssh-keygen -p
-
修改配置文件,让ssh-agent随git bash启动
在Git\etc\profile中追加:
#lanch ssh agent
SSH_ENV="HOME/.ssh/environment"
fucntion start_agent{
echo "Initializing new SSH agent.."
/usr/bin/ssh-agent|sed's/^echo/#echo/' > "${SSH_ENV}"
echo succeeded
chmod 600 "${SSH_ENV}"
."${SSH_ENV}" > /dev/null/usr/bin/ssh-add
}
-
#Source SSH setting, if applicable
if[ -f "${SSH_ENV}"]; then
."${SSH_ENV}" > /dev/null
#ps ${SSH_AGENT_PID} doesn't work under cywgin
ps -ef| grep ${SSH_AGENT_PID}|grep shh-agent$ > /dev/null||{
start_agent;
}else
start_agent
fi