git教程
我的有道云笔记
- SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作。
- Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
git学习大全
git clone 地址
git config --global --list
git config --local --list
git config --global user.name 'zhangliang'
git config --global user.email 'htlzl123@163.com'
以上同理 --local
git checkout -b feature/fund
git checkout dev (切换到本地dev分支)
git diff 查看你所修改的文件的具体信息 q键退出命令行
git restore 文件名(或者文件夹) 将本地所修改的文件回撤到修改前(配合 git status用)
本地修改配置文件,又修改了想要提交的文件,这时候把需要提交的文件先,git add 和 git commit 提交到本地版本库中,然后执行git stash 去存储不想提交的配置文件,然后执行提交或者合并操作,否则提交代码会报错说本地分支较远程分支behind,等push之后就可以使用git stash apply 去恢复
git stash save "save message" : 执行存储时,添加备注,方便查找,只有git stash 也要可以的,但查找时不方便识别。
git stash list :查看stash了哪些存储
git stash show :显示做了哪些改动,默认show第一个存储,如果要显示其他存贮,后面加stash@{$num},比如第二个 git stash show stash@{1}
git stash show -p : 显示第一个存储的改动,如果想显示其他存存储,命令:git stash show stash@{$num} -p ,比如第二个:git stash show stash@{1} -p
git stash apply :应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即stash@{0},如果要使用其他个,git stash apply stash@{$num} , 比如第二个:git stash apply stash@{1}
git stash pop :命令恢复之前缓存的工作目录,将缓存堆栈中的对应stash删除,并将对应修改应用到当前的工作目录下,默认为第一个stash,即stash@{0},如果要应用并删除其他stash,命令:git stash pop stash@{$num} ,比如应用并删除第二个:git stash pop stash@{1}
git stash drop stash@{$num} :丢弃stash@{$num}存储,从列表中删除这个存储
git stash clear :删除所有缓存的stash
git add . 跟踪所有更改的文件
git restore --staged 文件名(或者文件夹) 取消对文件的跟踪,但保留文件的更改
git commit -m '个股资讯修改' 把跟踪的文件提交到本地版本库
git commit -a -m 'change one file' git add 和 git commit 二合一
git reset --soft HEAD^ 回撤到本次commit之前,注意仓库首次commit信息不能用他撤回,会报错的
git reset --head HEAD^ 回撤到上一个commit版本,及把本次commit的修改全部废除了
git reset --hard b7d4d05 撤回到某个版本(你本次修改并commit的记录会废除)
git reset --soft b7d4d05 撤回到某个版本(暂存本地修改,即add了一下,但是没有commit)
git pull origin(远程主机名) feature/fund(本地分支):feature/fund(远程分支)
如果本地分支和远程分支名字一样 则可以简写为下面 =》
git pull origin feature/fund
git pull = git fetch(更新远程仓库的代码到本地仓库) + git merge(将内容合并到当前分支)
git fetch origin feature/fund 把最新远程feature/fund仓库的代码到本地仓库
git merge origin/feature/fund 将远程feature/fund仓库的代码合并到当前分支
如果存在冲突 解决冲突后需要重新提交 git add + git commit
查看冲突 git diff ,会显示到预期版本(线上版本)的操作,加减符号展示(例如 减号代码线上没有的,而本地有)
git merge --abort 回撤到冲突之前的代码
git push origin(远程主机名) feature/fund(本地分支):feature/fund(远程分支)
代码提交线上 ,可以简写为 git push origin feature/fund
git status 查看当前状态 并提示接下来可以要操作的git指令信息
git status -s 简约查看当前状态信息
git log 查看日志
git log --oneline 简约查看日志方式
git log --oneline --graph 简约图形方式查看日志
git log origin/master..HEAD 查看即将推送到远端的内容
git log dev1..dev2 查看dev2有,而dev1没有的内容
git log ^dev1 dev2 查看dev2有,而dev1没有的内容
git log dev2 --not dev1 查看dev2有,而dev1没有的内容
git log dev2...dev1 --left-right dev1或dev2不同时存在的内容
git log --stat 查看所有提交修改过的文件
git log --pretty=format:"%h - %an,%ar : %s"
作者是最初开展工作的人,而提交者则是最后将工作成果提交的人。所以
格式选项 输出格式的描述
%H 提交对象的散列值
%h 提交对象的简短散列值
%T 树对象的散列值
%t 树对象的简短散列值
%P 父对象的散列值
%p 父对象的简短散列值
%an 作者的名字
%ae 作者的电子邮箱
%ad 创作日期(可使-date=选定日期格式)
%ar 相对于当前日期的创作日期
%cn 提交者的名字
%ce 提交者的电子邮箱地址
%cd 提交日期
%cr 相当于当前日期的提交日期
%s 提交信息的主题
git log的常见选项
选项 描述
-p 按补丁格式显示每个提交引入的更改
--stat 显示每个提交中被更改的文件的统计信息
--shortstat 只显示上述--stat输出中包含“已更改/新增/删除”行的统计信息
--name-only 在每个提交信息后显示被更改的文件列表
--abbrev-commit 只显示完整的SHA-1 40位
--relative-date 显示相对日期(例如两周前),而不是完整日期
--graph 在提交历史旁边显示ASCII图表,用于展示分支和合并的历史信息
--pretty 用一种可选格式显示提交。选项有oneline、short 、full、 fuller、 format(用于指定自定义格式)
git log --oneline --graph --decorate 简约图形方式查看日志,并包含commit信息
git log -Sstr str是添加或者删除特殊的字段,查找最近操作str的文件commit提交
git log输出范围的选项
选项 描述
--since,--after 只输出指定日期之后的提交
--until,--before 只输出指定日期之前的提交
--author 只输出作者与指定字符串匹配的提交
--committer 只输出提交者与指定字符串匹配的提交
--grep 只输出提交信息包含指定字符串的提交
-S 只输出包含添加或删除指定字符串的更改的提交
git help config 弹出config网页说明
git help add 弹出add 网页说明
git help commit 弹出commit 网页说明
git help 命令 对应获取该命令的使用方法git
git add (命令) -h 如果只需要一部分手册 可以使用这个
git log --committer=zanlan --oneline 查看zanlan用户的commit记录
git log -p -2 生成两次commit的补丁(patch)
git log -1 查看最近一次提交信息
git diff 70b2c26 c256e22 比较两个commit更改 显示从70b2c26 到 c256e22 的过程
git show 70b2c26 查看70b2c26 的更改
git show -1 查看上一次提交了的更改
git config --global alias.ci commit 当要输入 git commit 时,只需要输入 git ci。
git config --unset alias.ci 删除别名
git commit --amend 沿用上一次commit
git remote -v 查看仓库
git remote add origin2 git@github.com:zanlan/twokey.git 添加远程仓库
git remote remove origin2 删除远程仓库
git remote rename origin2 origin3 重命名
git remote show origin3 查看某个仓库信息
git remote rm origin3 删除远程仓库origin3
git branch 查看本地分支
git branch -v 查看每个分支的最后一次提交
git branch -a 查看远程分支
git branch --merged 以过滤这个列表中已经合并
git branch --no-merged 尚未合并到当前分支的分支
git branch -d dev 删除dev本地分支
git branch -D dev 强制删除dev本地分支
git push origin -d dev 删除远程dev分支
git diff --staged 如果被修改的文件暂存了,需要查看修改信息,需要加--staged
git diff --ours 要在合并前比较结果与在你的分支上的内容,换一句话说,看看合并引入了什么
git diff --theirs 如果我们想要查看合并的结果与他们那边有什么不同,
git diff --base 来查看文件在两边是如何改动的。
git rebase master 以master为基地 开始变基
git rebase --continue 继续变基
git rebase --abort 取消变基
--------------------------------------------------------------------------------
由master主分支切换两个分支 hotfix iss53
如果iss53 分支需要拉取 hotfix 所做的修改,可以 git merge master 将 master 分支合并入 iss53 分支,
如果不需要可以等到 iss53 分支完成其使命,再将其合并回 master 分支。
git checkout master
git merge iss53
这和你之前合并 hotfix 分支的时候看起来有一点不一样。 在这种情况下,你的开发历史从一个更早的地方开始分叉开来(diverged)。 因为,master 分支所在提交并不是 iss53 分支所在提交的直接祖先,Git 不得不做一些额外的工作。 出现这种情况的时候,Git 会使用两个分支的末端所指的快照(C4 和 C5)以及这两个分支的公共祖先(C2),做一个简单的三方合并。
--------------------------------------------------------------------------------
创建一个 .gitignore 的文件,列出要忽略的文件的模式。对于线上已有的文件修改,则本文件无效
例如线上已经有了4.js .gitignore写了 *.js 并没有效果,它只会对本地新建的文件有作用
# 忽略所有的 .js 文件
*.js
# 但跟踪所有的 lib.js,即便你在前面忽略了 .js 文件
!lib.js
# 只忽略当前目录下的 TODO 文件,而不忽略 subdir/TODO
/TODO
# 忽略任何目录下名为 build 的文件夹
build/
# 忽略 doc/notes.txt,但不忽略 doc/server/arch.txt
doc*.pdf
--------------------------------------------------------------------------------
一台电脑两套密匙,扮演两个用户,练习git命令
ssh-keygen -t rsa -C zanlan123@163.com
回车后 第一项输入 id_rsa_github
ssh-keygen -t rsa -C htlzl123@163.com
回车后 第一项输入 id_rsa_oschina
把生成的文件拷贝到.ssh文件夹下
git config --local --list
git config --local user.name zanlan123
git config --local user.email zanlan123@163.com
.ssh 同级文件下新建config文件 放下下面内容
Host github.com
HostName github.com
User github
IdentityFile ~/.ssh/id_rsa_github
Host git.oschina.net
HostName git.oschina.net
User oschina
IdentityFile ~/.ssh/id_rsa_oschina
把两个id_rsa_github.pub 和 id_rsa_oschina.pub 放入github
在本地新建两个文件 第一个文件新建readme.md 文件
输入11111111111
git init
git config user.name 'zanlan'
git config user.email 'zanlan123@163.com'
会在.git 下的 config文件下看到设置信息
以后提交都会携带
另外一个文件同理
--------------------------------------------------------------------------------
常用命令
mkdir www 新建文件夹
touch 1.txt 新建文件
vim 1.txt 查看文件
mv 1.txt 2.txt 文件重命名
mv www wwww 文件夹重命名
mv 2.txt wwww/ 移动文件到文件夹
rm 2.txt 删除文件
rm -r www/ 删除文件夹
rimraf www/删除文件夹
--------------------------------------------------------------------------------
一个文件夹下开发不同的任务
git checkout -b feature/fund
git checkout master 接下一个任务 切换到主分支
git pull origin master 将代码更新一下
git checkout feature/nextrenwu
--------------------------------------------------------------------------------
有时候git add . 会报警告 arning: LF will be replaced by CRLF in
原因是需要提交的文件是在windows下生成的,windows中的换行符为 CRLF, 而在linux下的换行符为LF,所以在执行add . 时出现提示,解决办法
git config --global core.autocrlf false
--------------------------------------------------------------------------------
线上已有的文件
git update-index --assume-unchanged www/
git update-index --assume-unchanged 1111.md
git update-index --no-assume-unchanged 1111.md
git ls-files -v|grep '^h' 查看哪些没忽略了文件
.git/info/exclude 线上没有而本地新建的文件 类似/.gitignore
--------------------------------------------------------------------------------