常用的git指令

配置个人资料

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
    原文作者:猫之良品
    原文地址: https://segmentfault.com/a/1190000005017570
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞