Git命令学习笔记

参考廖雪峰的Git教程网站进行学习(https://www.liaoxuefeng.com/wiki/896043488029600)

安装

$ sudo apt-get install git

创建库

建立空仓库

$ git init
ls -ah查看隐藏目录.git

添加文件

$ git add <file>

把文件提交到仓库

$ git commit -m "wrote a xxx file"
-m后面添加的是提交的说明,可以用$ git log来查看每次提交给仓库时附带的说明
commit可以一次提交多个文件

管理修改及版本

查看修改以及提交修改

$ git status可以查看仓库当前状态,如果有文件被修改会告知是哪个文件
$ git diff可以查看所有的修改信息,也可以用git diff <file>来查看特定文件的修改
提交修改和提交新文件都是用$ git add <file>$ git commit -m "add xxxxxx"
每次输入命令后都可以用$ git status查看仓库当前状态.

版本回退

$ git log可以查看历史记录,包括每次修改的版本号\作者\日期\修改说明文字都有
Git用HEAD表示当前版本,上一个版本是HEAD^,再上一个是HEAD^^,如果过多可以用HEAD~100来表示往上100个版本.
$ git reset --hard HEAD^就可以返回上一个版本了.把HEAD^换成用$ git log查看的版本号也可以指定回退的版本,而且版本号不需要打全(但是要保证能识别出是哪个版本,不能和其他版本号冲突),回退之后想回到新版本也可以用这个命令
如果清空了历史消息记录,看不到新版本的版本号,可以用$ git reflog来查看版本号更迭.

工作区和暂存区

工作区就是电脑里能看到的目录.
工作区有一个隐藏目录.git,这是Git的版本库.
Git的版本库里存的内容包括名为stage(或index)的暂存区,以及Git自动创建的第一个分支master和指向master的一个指针叫head.
之前的提交修改和提交新文件都是通过暂存区来完成的:

  • $ git add <file>实际上是把文件修改添加到暂存区.
  • $ git commit实际上是把暂存区的所有内容提交到当前分支.

管理修改

Git管理的是修改而不是文件,每次修改如果不用$ git add将其加入暂存区,就不会在$ git commit时提交到当前分支.

撤销修改

$ git checkout -- <file>可以把文件在工作区的修改全部撤销,

  • 如果文件修改后未被提交到暂存区,现在就撤销到和版本库一样的状态.
  • 如果已经被提交到暂存区,然后又被修改过,撤销修改就会回到添加到暂存区后的状态.

总之就是回到最近一次git commitgit add后的状态.
$ git reset HEAD <file>可以把暂存区的修改撤销掉(unstage),重新放回工作区.但是这时工作区的修改还存在,如果要放弃修改的话就需要用到之前的$ git checkout -- <file>.
如果暂存区的修改已经被提交,那就要用到之前的回退版本(前提是没有提交到远程库).

删除文件

如果删除了工作区的文件,工作区和版本库出现不同,$ git status可以提醒哪些文件被删除

  • 如果要删除版本库里的文件,就用$ git rm <file>$ git add <file>也行)删掉,再用$ git commit提交
  • 如果是误删,就用$ git checkout -- <file>恢复,但是注意这时恢复的是版本库里的最新版本,也就是说最近一次提交后修改的内容是无法恢复的.

远程仓库

.ssh目录下id_rsa.pub文件内的内容复制到GitHub上.

添加远程库

在GitHub上创建新仓库后,在本地的仓库下运行命令
git remote add origin git@github.com:UseName/learnGit.git
添加后,远程库的名字是origin,这是默认叫法,也可以改成别的.
下一步把本地库的所有内容第一次推送到远程库上:
$ git push -u origin master
$ git push是把本地库内容推送到远程库的命令,就是把当前分支master推送到远程.
-u参数会指定默认主机为后面的origin,这样之后就可以不加任何参数使用git push.
现在开始本地提交后可以用$ git push (origin master)来把本地master分支的最新修改推送到GitHub.

删除远程库

如果要删除远程库,可以用git remote -v先查看远程库信息确认后,用git remote rm <name>命令.(只是解除本地和远程的绑定)

从远程库克隆

$ git clone <ssh key>来把远程库克隆到本地库.
也可以用别的协议如https.

分支管理

创建与合并分支

Git创建分支和删除分支其实是对指针进行操作.
创建dev分支并切换到dev分支:
$ git checkout -b dev
上面的命令相当于执行了两条命令:
$ git branch dev$ git checkout dev
然后用$ git branch查看当前分支.
dev分支下进行修改并提交后,用$ git checkout master切换回master分支,然后这时会发现在dev分支下的修改没有生效,需要把dev分支的结果合并到master分支:
$ git merge dev
完成合并后可以删除dev分支:
$ git branch -d dev
由于git checkout命令和前面的撤销修改命令一致,可能会引起歧义,现在可以用git switch来切换分支.(注意旧版本可能不支持switch
创建并切换到新的dev分支命令:
$ git switch -c dev
直接切换到现有的master分支:
$ git switch master

解决冲突

如果master分支和dev分支分别有新提交,Git就不能进行快速合并(把master的指针指向dev),这时强行合并就可能会有冲突.此时用git merge合并会提醒合并失败.需要手动解决冲突.手动修改完冲突文件并提交修改后再用git merge合并.最后可以用$ git log --graph可视化地查看合并情况.

分支管理策略

合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。

Bug分支

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

Feature分支

开发一个新feature,最好新建一个分支;
如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。

多人协作

  • 查看远程库信息,使用git remotegit remote -v
  • 本地新建的分支如果不推送到远程,对其他人就是不可见的
  • 从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交
  • 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致
  • 建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name
  • 从远程抓取分支,使用git pull,如果有冲突,要先处理冲突

Rebase

  • rebase操作可以把本地未push的分叉提交历史整理成直线
  • rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比

标签管理

tag可以理解成是commit号的别名

创建标签

  • 命令git tag <tagname>用于新建一个标签,默认为HEAD,也可以指定一个commit id
  • 命令git tag -a <tagname> -m "blablabla..."可以指定标签信息
  • 命令git tag可以查看所有标签

操作标签

  • 命令git tag -d <tagname>可以删除一个本地标签
  • 命令git push origin <tagname>可以推送一个本地标签
  • 命令git push origin --tags可以推送全部未推送过的本地标签
  • 命令git push origin :refs/tags/<tagname>可以删除一个远程标签
posted @   浮生的刹那  阅读(34)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
点击右上角即可分享
微信分享提示