前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Git常用命令总结

Git常用命令总结

作者头像
拓荒者
发布2019-09-25 11:03:25
5460
发布2019-09-25 11:03:25
举报
文章被收录于专栏:运维经验分享运维经验分享

Git常用命令总结

2018年06月08日 14:37:39 Elvis_lfc 阅读数 290

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/Elvis_lfc/article/details/80622912

Git

git bash下 cd 切换目录,pwd显示当前目录 ls或dir 显示目录下文件 ,rm删除文件

在E:下新建learnGit文件夹,此时他只是个目录,将他变为git仓库,打开git bash切换到此目录 cd e: 之后cd learnGit

在该目录下执行 git init ,此时你会发现目录下多了一个.git文件,然后创建一个readme.txt文件,内容随便写,以下东西都是基于readme.txt来进行的

git init 初始化一个空仓库,Git自动为我们创建了一个master分支

工作区:就是你的工作目录 如E:\learnGit .git 表示git版本库   staged(或index) 就是暂存区 git add XXX.txt 添加到暂存区 git add -A 全部提交到暂存区 git commit -m "xxx" 提交到仓库  XXX为备注 第一步是用“git add”把文件添加进去,实际上就是把文件从工作区添加到暂存区;  第二步是用“git commit”提交更改,实际上就是把暂存区的所有内容提交到当前分支。  commit:提交的是暂存区的内容,而非工作区的 git status 检查状态 git diff 对比 git log  提交日志 git log --pretty=oneline 日志显示一行 注意:每个人的commit id都不一样 第三次提交  3628164fb26d48395383f8f31179f24e0882e1e0(commit id) append GPL  备注 第二次提交  ea34578d5496d7dd233c827ed32a8cd576c5ee85 add distributed  第一次提交  cb926e7ea50ad11b8f9e909c05226233bf755030 wrote a readme file  HEAD^ 回退到上个版本 HEAD^^  回退到上上个版本 HEAD~100  回退到之前100个版本 git reset --hard HEAD^ 回退到第二次提交 此时 git log --pretty=oneline 查看最新的是我们上面的第二次提交,第三次提交不见了 bade4a31a0d2d4487e67fe367e0741c7712b4e77 add distributed d82cb2bb230b72f04e7edc335a187b9289d082da addtxt 如何回到第三次提交?只要窗口没关,我们可以根据commit id 回退 git reset --hard 3628164fb(第三次提交id) 再次回到之前版本 it log --pretty=oneline 查看如下 deb77a2d31cef84e276804bc293e872a72874306 add GPL bade4a31a0d2d4487e67fe367e0741c7712b4e77 add distributed d82cb2bb230b72f04e7edc335a187b9289d082da addtxt 如果窗口关了咋办? git reflog 追踪提交日志,如下  是不是有 commit id了 bade4a3 HEAD@{0}: reset: moving to HEAD^ deb77a2 HEAD@{1}: reset: moving to deb77a2d31 bade4a3 HEAD@{2}: reset: moving to HEAD^ deb77a2 HEAD@{3}: commit: add GPL bade4a3 HEAD@{4}: commit: add distributed d82cb2b HEAD@{5}: commit (initial): addtxt HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。 穿梭前,git log可以查看提交历史,以便确定要回退到哪个版本。 要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。  撤销工作区的修改,没有被提交到暂存区,git checkout -- file命令中的“--”很重要,没有“--”,就变成了“创建分支命令 git checkout -- readme.txt  如果已经提及到到了暂存区,使用下面命令可以把暂存区的修改撤销掉  git reset HEAD readme.txt  ,然后使用 git checkout -- readme.txt  修改工作区到上个版本和分支一致 从分支删除文件,要先删除,再提交 git rm a.txt 然后 git commit -m "remove a.txt"  本地提交到远程 github注册账号,新建repository名字learngit 查看远程分支 git remote 查看本地分支 git branch 添加远程仓库分支origin git remote add origin git@github.com:lifucai/learngit.git 注意:名字要改 把当前分支master推送到远程, git push -u origin master 加上了-u参数,Git不但会把本地的 master分支内容推送的远程新的master分支, 还会把本地的master分支和远程的master分支关联起来 之后再推送到远程 git push origin(远程分支) master (本地分支) 远程clone到本地 先在github上创建repository git bash执行,把远程库clone 到本地 git clone https://github.com/lifucai/gitskills.git 名字要改 创建远程origin的dev分支到本地 git checkout -b dev origin/dev   git pull也失败了,原因是没有指定本地dev分支与远程origin/dev分支的链接,根据提示,  设置dev和origin/dev的链接:git branch --set-upstream dev origin/dev git pull 拉取,git push 推送 如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建, 用命令git branch --set-upstream branch-name origin/branch-name。  从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;  • 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branchname,本地和远程分支的名称好一致;  • 建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name; • 从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。 分支 创建dev分支,然后切换到dev分支 git checkout -b dev git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:  git branch dev  然后,用git branch命令查看当前分支:  git branch  * dev(星号 表示当前分支) master 在当前分支修改文件后,切换到master分支 切换分支 git checkout master  切换回来后发现刚才修改没有,因为那个提交是在dev分支上,而master分支此刻的提交点并没有变: 合并分支,把dev分支修改合并到当前分支 git merge dev  删除分支 git branch -d dev  之后执行git branch 发现只有 master分支了 查看分支:git branch 创建分支:git branch name 切换分支:git checkout name 创建+切换分支:git checkout -b name 合并某分支到当前分支:git merge name 删除分支:git branch -d name  解决冲突 新建分支feature1 git checkout -b feature1  修改readme.txt后一行,改为: Creating a new branch is quick AND simple.  在feature1分支上提交: git add readme.txt  git commit -m "AND simple"  切换到master分支:  git checkout master 在master分支上把readme.txt文件的后一行改为: Creating a new branch is quick & simple.  在master上提交 git add readme.txt  git commit -m "& simple"  合并 git merge feature1  Auto-merging readme.txt CONFLICT (content):  Merge conflict in readme.txt Automatic merge failed; fix conflicts and then commit the result.  果然冲突了!Git告诉我们,readme.txt文件存在冲突,必须手动解决冲突后再提交。git status也可以告诉我们冲突的文件: 直接查看redeme.txt Git is a distributed version control system.  Git is free software distributed under the GPL.  Git has a mutable index called stage.  Git tracks changes.  <<<<<<< HEAD Creating a new branch is quick Creating a new branch is quick & simple.  ======= iCreating a new branch is quick Creating a new branch is quick AND simple. >>>>>>> feature1 Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容 用带参数的git log也可以看到分支的合并情况: 用git log --graph命令可以看到分支合并图 git log --graph --pretty=oneline --abbrev-commit  * 8403262 AND f1 * 1f7ccb7 AND simple * 309dbfb 123 *   3b50450 fix conflict |\ | * edc35f2 AND simple * | fef180b & simple |/ * bcd79d2 branch test * e993ecd add test.txt * b76900c remove test.txt * b4f4465 add test.txt 通常,合并分支时,如果可能,Git会用“Fast forward”模式,但这种模式下,删除分支后,会丢掉分支信息。  如果要强制禁用“Fast forward”模式,Git就会在merge时生成⼀一个新的commit,这 样从分支历史上就可以看出分支信息。  下面我们实战一下--no-ff方式的merge: 首先,仍然创建并切换dev分支: git checkout -b dev  修改readme.txt文件,并提交一个新的commit:  git add readme.txt git commit -m "add merge"  切回master分支    git checkout master  准备合并dev分支,请注意--no-ff参数,表⽰示禁用“Fast forward 模式 git merge --no-ff -m "merge with no-ff" dev  因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。  合并后查看历史 git log --graph --pretty=oneline --abbrev-commit  *   df7a383 merge with no-ff |\ | * b41f0d7 add merge |/ *   5a8c94e conflict fixed |\ | * 8403262 AND f1 * | 17200e6 add master 可以看到,不使用“Fast forward”模式,merge后就像这样: 分支策略  在实际开发中,我们应该按照几个基本原则进行分支管理: 首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活; 那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如 1.0版本发布时,再把dev分支合并到master上 在master分支发布1.0版本; 你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。  合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。 Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作:  git stash list 可以查看工作现场 工作现场还在,Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法: 一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除; 另一种方式是用git stash pop,恢复的同时把stash内容也删了 先用git stash list查看,然后恢复指定的stash⽤用命令: git stash apply stash@{0} 强行删除分支 git branch -D feature-vulcan 开发一个新feature,最好新建一个分支; 如果要丢弃一个没有被合并过的分支,可以通过git branch -D name强行删除。 要查看远程库的信息,用git remote  或者 git remote -v(会显示抓取和推送的origin的地址) 标签(默认为HEAD,最新提交) git tag v1.0 查看标签 git tag 给某一次提交打tag git tag v0.9 6224937(commit id)  查看标签信息:  git show v0.9 (tagname) 还可以创建带有说明的标签,用-a指定标签名,-m指定说明文字: git tag -a v0.1 -m "version 0.1 released" 3628164(commit id) 删除标签,创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。  git tag -d v0.1  如果要推送某个标签到远程,使用命令  git push origin tagname:  如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除: git tag -d v0.9  然后从远程删除。删除命令也是push,但是格式如下:  git push origin :refs/tags/v0.9  要看看是否真的从远程库删除了标签,可以登陆GitHub查看 • 命令git push origin tagname可以推送一个本地标签; • 命令git push origin --tags可以推送全部未推送过的本地标签;  • 命令git tag -d tagname可以删除一个本地标签;  • 命令git push origin :refs/tags/tagname可以删除一个远程标签。 在GitHub上,可以任意Fork开源仓库;  • 自己拥有Fork后的仓库的读写权限; • fork之后从自己的仓库clone到本地 ,修改之后可以push到远程仓库 • 可以推送pull request给官方仓库来贡献代码。 有些时候,你必须把某些文件放到Git工作目录中,但又不能提交它们,比如保存了数据库密码的配置文件啦等等, 每次git status都会显示“Untracked files ...”,有强迫症的童 鞋心里肯定不爽。 好在Git考虑到了大家的感受,这个问题解决起来也很简单, 在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。  不需要从头写.gitignore文件,GitHub已经为我们准备了各种配置文件,只需要组合一下就 可以使用了。 所有配置文件可以直接在线浏览:https://github.com/github/gitignore 忽略文件的原则是:  1. 忽略操作系统自动生成的文件,比如缩略图等;  2. 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库  比如Java编译产生的.class文 件;   3. 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。   最后一步就是把.gitignore也提交到Git,就完成了!当然检验.gitignore的标准是git status 命令是不是说“working directory clean”。   使用Windows的童鞋注意了,如果你在资源管理器里新建一个.gitignore文件,它会非常弱 智地提示你必须输入文件名,  但是在文本编辑器里“保存”或者“另存为”就可以把文件保 存为.gitignore了。 别名 我们只需要敲一行命令,告诉Git,以后st就表示status:  git config --global alias.st status  当然还有别的命令可以简写,很多人都用co表示checkout,ci表示commit,br表示 branch:  git config --global alias.co checkout  git config --global alias.ci commit  git config --global alias.br branch  命令git reset HEAD file可以把暂存区的修改撤销掉 (unstage),重新放回工作区。 既然是一个unstage操作,就可以配置一个unstage别名: git config --global alias.unstage 'reset HEAD'  当你敲入命令:  git unstage test.py 实际上Git执行的是:git reset HEAD test.py  配置一个git last,让其显示最后一次提交信息:  git config --global alias.last 'log -1' 这样,用git last就能显示最近一次的提交:  简化版的git log-》git lg git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit" * bcd79d2 - branch test (76 minutes ago) <lifucai> * e993ecd - (origin/master) add test.txt (2 hours ago) <lifucai> * b76900c - remove test.txt (3 hours ago) <lifucai> * b4f4465 - add test.txt (3 hours ago) <lifucai> * 495e313 - git tracks changes (3 hours ago) <lifucai> * 920e210 - understand how stage works (3 hours ago) <lifucai> * deb77a2 - add GPL (3 hours ago) <lifucai> * bade4a3 - add distributed (3 hours ago) <lifucai> * d82cb2b - addtxt (4 hours ago) <lifucai>

(adsbygoogle = window.adsbygoogle || []).push({});

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Git常用命令总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档