配置个人资料
git config --global user.email william0760@qq.com
git config --global user.name "William Wen"
git config --list
生成公钥SSH
安装git,打开Git Bash
ssh-keygen -t rsa -C "william0760@qq.com"
之后会生成id_rsa与id_rsa.pub
id_rsa.pub为公钥,把它贴到托管网站(如github, git@OSC)
要注意托管代码需要使用SSH,不是HTTP
版本操作
git clone https://xxx : 提取远程上的最新代码并初始化
git reset –mixed <commit_id>:此为默认方式,不带任何参数的git reset,即时这种方式,它回退到某个版本,只保留源码,回退commit和index信息
git reset –-soft <commit_id>:回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可
git reset –-hard <commit_id>:彻底回退到某个版本,本地的源码也会变为上一个版本的内容,无视所有commit
git checkout HEAD : 回滚最新的代码 (history > Working Directory)
git checkout xxx.php: 还原单个文件 (history -> Working Directory)
git add -u : 把修改过的文件加入index
git add -A : 把所有修改、新增、删除 文件变动加入index
git commit (stage -> history)
git commit -a -m "your message" (提交所有已经git add过的代码) (Working Directory -> history)
git commit --amend -m"your message" (你保存得过于频繁,可将此次的commit和上一次commit合并)
git fetch: 相当于是从远程获取最新版本到本地,不会自动merge
git fetch origin: 从“origin”资源库取得所有的历史记录而不改变本地的副本.
git pull: 相当于是从远程获取最新版本并merge到本地副本
git push: 提交版本到远程
git submodule update --init --recursive : 更新submodule,git pull不会自动下载submodule
git stash: 保存当前改动并还原未改动状态,通常用于代码修改中临时切换分支
git stash pop: 恢复改动记录
git archive --format zip -o code.zip HEAD: 导出项目
分支操作
git checkout -b <name> 新建分支
git branch -D <name> 删除分支
git branch 查看本地分支
git branch -a 查看远程分支
git merge test 把test分支合并到当前分支上 (合并之后 git会在发生冲突的文件上标出冲突 自己打开这些文件手工解决冲突 如果不解决不能commit)
git checkout test 切换到test分支 (history -> Working Directory)git rebase my_branch: 把my_branch分支合并到当前副本中
git push origin :master 删除远程master分支
查询操作
git diff (当你了修改文件并保存了,使用这个命令观察下)
git diff abcde (对比特定版本,至少版本号前5位)
git status (自己使用观察下)
git log -p (当你修改了文件,再使用git commit -m "XXX"时候,再用这个命令看看)
git log --stat --summary (包括文件改动的摘要信息)
git log --grep "search text" (搜索匹配内容的LOG)
git log filename (某文件所有修改记录)
git log --author=<name> (某作者的记录)
git branch 查看分支
git show commit_id (查看某次提交的修改细节)
git branch --contains <commit-id> 某个commit的所属分支
Applying and creating patches
git apply xxxx.patch
git diff HEAD^^ > (issue id)-title.patch
git format-patch HEAD^^ --stdout > (issue id)-title.patch // 把上一次commit的内容转为补丁
组合指令
对现有源代码建立GIT库
git init
git add --all ( or git add .)
git commit -m "init"
打包最近一次差异文件(bash)
git archive -o latest.tar HEAD $(git diff HEAD^ --name-only)
或
git diff HEAD^ --name-only > __list.txt
cat __list.txt | xargs -i tar rvPf latest.tar {}
rm __list.txt
最近一次差异文件提取 (powershell)
git diff HEAD^ > __list.txt --name-only
cat __list.txt | foreach {
$target = "/diff/"+$_
New-Item -type file -Force $target
cp $_ $target
}
rm __list.txt
合并另一个git库
git remote add {project name} {git uri}
git remote -v
git fetch {project name}
git merge {project name}/master