学习Git命令记录

目录

前言

一、Git是什么?与其它类似版本控制的不同点?

二、使用步骤

1.安装

2.命令学习记录

总结


前言

学习git应用的命令,以便日后忘记进行快速回顾查找。

学习Git命令记录_第1张图片

一、Git是什么?与其它类似版本控制的不同点?

Git是目前世界上最先进的分布式版本控制系统。CVS和SVN,这些集中式的版本控制系统不但速度慢,而且必须联网才能使用。Git的优势不单是不必联网这么简单,还有Git极其强大的分支管理。

二、使用步骤

1.安装

可以在官网进行安装,具体安装教程参考Git 详细安装教程(详解 Git 安装过程的每一个步骤)_mukes的博客-CSDN博客_git安装

安装完成后可以使用以下命令设置Git仓库信息

$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"

以下命令可进行查看

$ git config user.name
$ git config user.email

2.命令学习记录

创建版本库并初始化添加文件

$ mkdir learngit 选择一个合适的地方,创建一个空目录
$ cd learngit
$ pwd 显示当前目录
$ git init 把这个目录变成Git可以管理的仓库
$ git add readme.txt 把文件添加到仓库(文件要放在创建的空目录下),可添加多个文件后直接跟文件名
$ git commit -m "write a readme file" 把文件提交到仓库

文件管理命令:

$ git log 查看提交记录
$ git reset --hard HEAD^ 回退到上个版本(HEAD~10代表回退到上10个)
$ cat readme.txt 查看文件内容
$ git reset --hard xxx(版本id)  可指定回到未来的版本
$ git reflog 记录命令历史

工作区和暂存区

创建的空目录就是一个工作区

暂存区如图添加和提交后的一个状态

$ git status 查看状态
$ git diff HEAD -- readme.txt 查看工作区和版本库里面最新版本的区别 
$ git checkout -- readme.txt 丢弃工作区的修改
$ git reset HEAD readme.txt 把暂存区的修改撤销掉(unstage),重新放回工作区(之后要执行丢弃工作区的修改命令)
ps:假如提交到版本库的话就要执行版本回退命令了(切记不要提交远程仓库,除非无任何问题)

原来的git checkout 可以使用 git restore 代替
原来的git reset HEAD 可以使用 git restore --staged 代替
原来的git checkout branchName 可以用 git switch branchName 代替
最新版的git提示都已经更换成了restore

从暂存区恢复工作区,
git resotre --worktree readme.txt
从master恢复暂存区 
git restore --staged readme.txt
从master同时恢复工作区和暂存区
git restore --source=HEAD --staged --worktree readme.txt

$ rm test.txt 删除工作区文件
$ git rm test.txt 从版本库中删除该文件
$ git checkout -- test.txt 恢复工作区文件(版本库中文件删了就无法恢复了)

新版本 git version 2.35.1.windows.2
对于文件删除操作使用git restore --staged 
来丢弃暂存区该次删除操作, 在git checkout -- 

学习Git命令记录_第2张图片

 学习Git命令记录_第3张图片

 远程仓库

首先,创建SSH Key。在用户主目录下(windows的.ssh目录c盘:/user(或者是用户)/你的用户名(你自己之前起过的)/.ssh),看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa(私钥,勿泄露)id_rsa.pub(公钥,可开放)这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:

$ ssh-keygen -t rsa -C "[email protected]"

把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。

然后,登陆GitHub,打开“Account settings”,“SSH Keys”页面:点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容:

学习Git命令记录_第4张图片

点“Add Key”,你就应该看到已经添加的Key了。

 添加远程仓库

在GitHub创建一个Git仓库,并且让这两个仓库进行远程同步,这样,GitHub上的仓库既可以作为备份,又可以让其他人通过该仓库来协作。

首先,登陆GitHub,然后,在右上角找到“Create a new repo”按钮,在Repository name填入仓库名,其他保持默认设置,点击“Create repository”按钮,就成功地创建了一个新的Git仓库:

学习Git命令记录_第5张图片

把一个已有的本地仓库与之关联,然后,把本地仓库的内容推送到GitHub仓库。在本地的learngit仓库下运行命令:

$ git remote add origin [email protected]:michaelliao/learngit.git 远程库的名字就是origin,这是Git默认的叫法
$ git push -u origin master 把本地库的所有内容推送到远程库上,第一次推送master分支时(遇到警告就输yes,建立ssh信任连接),加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令$ git push origin master

$ git remote -v 查看远程库信息
$ git remote rm origin 根据名字删除(也就是解除与远程库的链接)

假设我们从零开发,那么最好的方式是先创建远程库,然后,从远程库克隆。首先,登陆GitHub,创建一个新的仓库,名字叫gitskills

学习Git命令记录_第6张图片

我们勾选Initialize this repository with a README,这样GitHub会自动为我们创建一个README.md文件。之后进行克隆:Git支持多种协议,包括https,但ssh协议速度最快。

$ git clone [email protected]:michaelliao/gitskills.git
查看是否克隆到本地库:
$ cd gitskills
$ ls

分支管理

查看分支:git branch

创建分支:git branch 

切换分支:git checkout 或者git switch 

创建+切换分支:git checkout -b 或者git switch -c 

合并某分支到当前分支:git merge (若合并失败,手动修改文件进行提交后方可删除分支)

分支的合并情况 git log --graph --pretty=oneline --abbrev-commit

删除分支:git branch -d 
$ git branch -D  强行删除,需要使用大写的-D参数

分支管理策略

$ git merge --no-ff -m "merge with no-ff" dev 
准备合并dev分支,--no-ff参数,表示禁用Fast forward

git config branch.master.mergeoptions  "--no-ff" 仅针对当前分支有效
git config --add merge.ff false 仅针对当前版本库的所有分支有效
git config --global --add merge.ff false 仅针对所有版本库的所有分支有效

bug分支

当你接到一个修复一个代号101的bug的任务时,很自然地,你想创建一个分支issue-101来修复它,但是,当前正在dev上进行的工作还没有提交:

$ git stash 可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作

确定要在哪个分支上修复bug,假定需要在master分支上修复,就从master创建临时分支:
切换到master分支并创建bug分支,修改后进行commit提交并切换到master进行合并后删除bug分支

回到原来工作的分支
$ git stash list 查看工作清单

工作现场还在,Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法:
一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;
另一种方式是用git stash pop,恢复的同时把stash内容也删了:

$ git stash apply stash@{0} 
可以多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash,用命令

同样的bug,要在dev上修复,我们只需要把4c805e2 fix bug 101这个提交所做的修改“复制”到dev分支。注意:我们只想复制4c805e2 fix bug 101这个提交所做的修改,并不是把整个master分支merge过来。
为了方便操作,Git专门提供了一个cherry-pick命令,让我们能复制一个特定的提交到当前分支:
$ git branch
* dev
  master
$ git cherry-pick 4c805e2

修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场;
在master分支上修复的bug,想要合并到当前dev分支,可以用git cherry-pick 命令,把bug提交的修改“复制”到当前分支,避免重复劳动。

多人协作

  1. 首先,可以试图用git push origin 推送自己的修改;(要连接远程库)

  2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;

  3. 如果合并有冲突,则解决冲突,并在本地提交;

  4. 没有冲突或者解决掉冲突后,再用git push origin 推送就能成功!

如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to origin/

$ git clone [email protected]:michaelliao/learngit.git 克隆远程库
$ git pull origin master --allow-unrelated-histories 允许不相关历史提,强制合并

Rebase

如果git pull后提示有冲突后,先不管冲突的代码,因为修改后执行rebase还是变回有冲突的代码。先执行git add . 和 git commit -m 'xxx'。在执行git rebase 终端提示:Resolve all conflicts manually, mark them as resolved with "git add/rm ", then run "git rebase --continue”。这时再手动修改代码解决冲突,执行git add . 再执行 git rebase --continue 就有效果了。这时直接git push 到远程仓库即可

(详解可借鉴此博客git merge 与 git rebase的区别_Michaelliu_dev的博客-CSDN博客_merge和rebase区别)

创建并操作标签

$ git tag v1.0 创建标签
$ git tag 查看标签
$ git log --pretty=oneline --abbrev-commit 查看提交历史
$ git tag v0.9 f52c633 根据id打标签
$ git show v0.9 查看标签信息
$ git tag -a v0.1 -m "version 0.1 released" 1094adb 给某个id添加解释并创建标签 -a指定标签名,-m指定说明文字

$ git tag -d v0.1 删除本地标签
$ git push origin :refs/tags/v0.9 删除远程库标签(要先删本地)
$ git push origin v1.0 推送远程库标签
$ git push origin --tags 一次性全部推送到远程库

使用github

有三个仓库,local(本地的),origin(远程你自己的) 和 upstream(远程别人的)。

  1.  local 和 origin 要同步,就是采用之前讲的 git pull 和 git push;
  2.  local 和 upstream 要同步,就要设置上游(git remote add upstream ),之后 git pull upstream master  拉下来同步
  3. origin 和 upstream 要同步,可以选择去 github 操作,去 origin 仓库向 upstream 发起 pull request,但是 head 设置为 upstream,base 设置为 origin,这相当于反向 pull request,可以让你 fork 的仓库与原仓库保持同步

使用gitee

使用Gitee和使用GitHub类似,我们在Gitee上注册账号并登录后,需要先上传自己的SSH公钥。选择右上角用户头像 -> 菜单“修改资料”,然后选择“SSH公钥”,填写一个便于识别的标题,然后把用户主目录下的.ssh/id_rsa.pub文件的内容粘贴进去。

在Gitee上创建一个新的项目,名称最好与本地库保持一致:然后,在本地库上使用命令git remote add把它和Gitee的远程库关联。就可以正常地用git pushgit pull推送了。

注:远程库的名称最好与远程地的名称相同,防止名称冲突报错

学习Git命令记录_第7张图片

 自定义Git

参考​​​​​​自定义Git - 廖雪峰的官方网站


总结

通过学习廖雪峰老师的git教程,目前能基本操作如何去用git连接远程库进行实操,收货很大,特以此记录,方便日后翻阅回顾。附教程:Git教程 - 廖雪峰的官方网站

你可能感兴趣的:(开发工具,学习,git,github,职场和发展,经验分享)