平台
base on Ubuntu18.04
git基础
git安装
Git 的工作需要调用 curl,zlib,openssl,expat,libiconv 等库的代码,所以需要先安装这些依赖工具。
$ apt-get install libcurl4-gnutls-dev libexpat1-dev gettext \
libz-dev libssl-dev
//安装git
$ apt-get install git
//检查git版本
$ git --version
git version 2.7.4
git用户配置
用户信息
$ git config --global user.name "baiy"
$ git config --global user.email test@baiy.com
查看配置信息
$ git config --list
user.name=baiy
user.email=****
git创建本地仓库
git init //初始化一个仓库
git init newrepo //指定目录
find . -name ".git" | xargs rm -Rf //删除文件夹下所有.git
git提交流程
git status . //查看当前目录下,git仓库的状态,显示变更的文件,绿色为add过在仓库暂存区, 红色为没add
git diff file.c //如果file.c有变更,则可以查看file.c变更内容
git add file //提交到暂存区
git add -u //提交被修改(modified)和被删除(deleted)文件,不包括新文件(new)
git add . //提交新文件(new)和被修改(modified)文件,不包括被删除(deleted)文件
git add -A //提交所有变化
git commit -m "init version" //提交暂存区到本地仓库
git commit -am " " //将当前目录下的变化提交到暂存和存到本地仓库
git commit --amend //撤销上一次提交,并将暂存区文件重新提交
git commit -a –amend //可修改提交名,ctrl-x退出
git show xxx//查看提交内容
git查看仓库的状态
git log . //查看当前目录下的提交记录
git log --oneline //查看当前分支git仓库所有提交,一行一行的显示
git reflog //可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)
查看git提交记录内容
git show commit_id //查看提交id为commit_id这条提交的修改内容
从暂存区恢复文件
git checkout
git checkout file.c //回退变更file.c到上一次提交
回退git仓库到某一个提交
git reflog //可以查看所有分支的所有操作记录
git reset (--mixed) commit_id //默认可不写
HEAD回退commit_id这条提交的同时,保留工作目录,并清空暂存区(红)即取消add
1.c工作区 2.c暂存 3.c最后一次添加
1.c工作区 2.c工作 3.c工作
即非commit_id记录的内容全停留在工作区
git reset --soft commit_id
HEAD回退commit_id这条提交的同时,保留工作目录和暂存区中的内容,并把重置HEAD所带来的新的差异放进暂存区
1.c工作区 2.c暂存 3.c最后一次添加
1.c工作区 2.c暂存 3.c暂存
即非commit_id记录的内容将保存在暂存区
git reset --hard commit_id
将三个分区都还原到commit_id的记录(工作区和暂存区修改的内容将丢失)
撤销某一次的提交
git revert commit_id
回退commit_id这个提交到上一个版本,并重新生成提交记录
分支操作
git branch //查看分支
-a //包括远程分支
git branch dev //新建dev分支
git branch -D dev //删除dev分支
git checkout dev //切换到dev分支,工作区还原到dev分支
git checkout -b dev //新建一个dev分支,并切换到dev分支
git merge dev //合并dev分支到当前分支
生成patch
git format-patch -1 commit_id
//生成commit_id提交对应的补丁(-n)
git format-patch commit_id
//生成commit_id提交之后的所有补丁,不包含commit_id这条提交,一个个的
git format-patch commit_id1..commit_2
//生成commit_id1到commit_id2之间的所有提交补丁,不包含commit_id1
git diff [commit sha1 id] [commit sha1 id] > [diff文件名]
应用patch
git apply --check 001-Fix-debug.patch //检查补丁的合法性
git apply 001-Fix-debug.patch
//合入补丁,修改内容在更新区,并没有提交
git am 001-Fix-debug.patch
//合入补丁并提交
clone远程服务器
git clone <repo>
git clone <repo> <directory>
//例子
git clone gitProject@192.168.1.xxx:/Project/xxx.git
查看远程仓库地址
git remote -v //查看远程仓库地址信息
git remote add origin xxx@xxx:xxxx.git //配置git远程地址
同步远程分支
git pull //更新远程仓库分支列表
git pull origin dev //拉取origin对应服务器dev分支到本地,并分本地分支dev目录合并
git fetch origin dev //同步远程服务器git仓库的dev分支到本地仓库origin分支(红色的分支)
git meger origin/dev //合并从服务器同步的dev分支到本地分支(将红色合并本地)
代码推送
git push origin dev
//推送本地分支修改到origin对应远程服务器git仓库的dev分支
拓展
git仓库被锁
fatal: Unable to create 'D:/go-base/.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.
rm .git/index.lock
git取消追踪
git rm -rf
git commit -m ""