Git教程

本文参考以下资料

廖雪峰Git教程

1.Git常用命令

1.配置git用户名称和邮箱

git config --global user.name "xxx"
git config --global user.email "myemail@example.com"

2.创建仓库:git init

3.提交新增和更改到暂存区:git add

git add new-file(new-file为文件名)
可以一次提交多个文件到暂存区
git add file1.txt file2.txt file3.txt
添加当前目录和子目录下的文件修改
git add .
添加所有文件的修改
git add -A

git add .

此命令会把当前目录及其子目录下所有已修改和新创建的文件添加到暂存区,不过它会忽略已被删除的文件。也就是说,它只关注当前工作目录下文件状态的变化,包含新增和修改操作,但不会处理已删除的文件。

git add -A

git add -A (等同于 
git add --all)会将整个工作区里所有文件的修改、新增和删除操作都添加到暂存区。它会考虑工作区中所有文件状态的变化,无论文件处于哪个目录,都会被添加到暂存区

4.提交到工作区:git commit -m "备注"

5.查看工作区和暂存区的状态: git status

6.查询提交记录:git log

显示简要的提交记录:git log --pretty=oneline
显示指针的更改记录,包含所有仓库:git reflog

7.比较文件不同:git diff

工作区&暂存区  git diff
工作区&版本库  git diff HEAD
暂存区&版本库  git diff --cached
git diff -- readme.txt 比较指定的文件

8.回滚:git reset

git reset --hard HEAD^,这里注意windows中cmd中执行该命令显示”more?“这是由于cmd中会将"^"视为换行,使用如下命令
git reset --hard "HEAD^" //加引号 
git reset --hard HEAD^^
//加一个^
git reset --hard HEAD~ 或者 git reset --hard HEAD~1
//把^换成~,~ 后面的数字表示回退几次提交,默认是一次
git reset --hard 1094a //1094a为提交记录的hash码
同时--hard还支持其他参数,各参数的区别为: --soft:仅移动 HEAD 指针,不改变暂存区和工作区。这意味着被撤销的提交内容仍会保留在暂存区中。 --mixed:移动 HEAD 指针,重置暂存区,但不改变工作区。被撤销的提交内容回到工作区,未被暂存。这是git reset的默认模式。 --hard:移动 HEAD 指针,同时重置暂存区和工作区。被撤销的提交内容会被彻底清除。

9.回滚文件 git checkout

回滚指定文件:git checkout -- readme.txt;
暂存区回滚到工作区,将会撤销工作区没有add或者commit的数据
注意:
git checkout -- file命令中的
--很重要,没有
--,就变成了“切换到另一个分支”的命令

关于各种场景下回滚的总结:

  1. 只是工作区修改了,但是没有add,即没有添加到暂存区
使用:git checkout -- readme.txt
  1. 文件已经提交到了暂存区,因为没有提交到版本库,回滚到版本库的最新一个版本
使用:git reset HEAD readme.txt
即是 git reset --mixed HEAD
  1. 文件add后执行了commit提交到了版本库,回滚到上一个版本
使用:git reset --mixed HEAD~

这里有一个重要的概念,即git中关于”暂存区和工作区“的理解

--hard --mixed --soft
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
工作区:
在电脑里能看到的目录,比如windows里面的文件夹就是一个工作区
暂存区:
git add就是添加进暂存区,commit提交前的一个保存区域
--hard回滚暂存区和工作区;
--soft仅仅改变head指向,不改变站暂存区和工作区,即暂存区需要重新commit数据;
--mixed回滚了暂存区,但是不回滚工作区,需要重新add然后commit;
总而言之,--soft不回滚工作区和暂存区,--mixed仅仅回滚暂存区;--hard回滚工作区和暂存区;
--soft和--mixed都不会影响当前工作区的文件

关于git status命令理解

1.

 

这个命令返回;”nothing to commit“指的是暂存区没有要提交的,而"working tree clean"指的是工作区是干净的,即该提交的文件都提交了

2.

 如上图”not staged fot commit“说明暂存区是干净的,”untracked files“说明没有添加git管理

2.远程仓库

添加远程仓库地址命令:git remote add origin url 
修改远程仓库地址命令:git remote set-url origin url 
推送并关联本地分支:git push -u origin master 
关联本地分支和远程:git branch --set-upstream-to=origin/feature-branch feature-branch 
查询远程仓库:git remote 
查询远程仓库详情:git remote -v 
拉取远程仓库:git pull 
在本地创建和远程分支对应的分支:git checkout -b branch-name origin/branch-name 
删除远程库:git remote rm origin

注意:

  • 那些分支需要推送到远程仓库
  • master分支是主分支,因此要时刻与远程同步;
  • dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
  • bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
  • feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。
创建 git 仓库:
1 mkdir test1
2 cd test1
3 git init 
4 touch README.md
5 git add README.md
6 git commit -m "first commit"
7 git remote add origin git@gitee.com:xxxx/test1.git
8 git push -u origin "master"
已有仓库
1 cd existing_git_repo
2 git remote add origin git@gitee.com:xxxx/test1.git
3 git push -u origin "master"

3.分支管理

3.1创建并切换分支

git checkout -b dev
或者:
git branch dev
git checkout dev

3.2查询当前分支

git branch
git branch -a //查询远程和本地分支
git branch -r //查询远程分支
使用git switch命令:
创建并切换到新的dev分支:git switch -c dev
直接切换分支:git switch master

3.3合并分支

出现冲突的情况,需要修改文件修复冲突,然后git add后commit
git checkout master
git merge dev //可能会使用Fast forward,从而分支历史看不到合并分支,不推荐
git merge --no-ff -m "merge with no-ff" dev //禁用fast模式,生成新的提交,推荐
合并分支时,加上
--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。

3.4删除分支

git branch -d <name> //适用于已经合并的分支
如果要丢弃一个没有被合并过的分支,可以通过
git branch -D <name>强行删除

3.5查看分支和合并情况

git log --graph --pretty=oneline --abbrev-commit

3.6临时存储,不提交的状态下存储到本地,然后需要切换分支

git stash //存储
git stash drop //删除存储
git stash apply //提取,然后不删除
git stash pop //提取,然后删除
git stash apply stash@{0} //多次stash的情况下,提起指定stash

3.7将提交从一个分支复制到另一个分支

git cherry-pick 4c805e2 //4c805e2为提交的hash码

4.标签管理

 1 创建标签:git tag v1.0 //默认标签是打在最新提交的commit上
 2 给历史提交创建标签:git tag v0.9 f52c633//f52c633为提交的hash码
 3 查询所有的标签:git tag
 4 查询标签详情:git show v1.0
 5 创建带有说明的标签:git tag -a v1.0 -m "mark" f52c633//f52c633为提交的hash码
 6 删除标签:git tag -d v1.0
 7 推送某个标签到远程:git push origin v1.0
 8 推送所有标签到远程:git push origin --tags
 9 //如果标签已经推送到远程
10 1.先从本地删除:git tag -d v1.0
11 2.再远程删除:git push origin :refs/tags/v1.0

5.忽略特殊文件

有些时候,你必须把某些文件放到Git工作目录中,但又不能提交它们,比如保存了数据库密码的配置文件啦,等等,每次git status都会显示Untracked files ...,有强迫症的童鞋心里肯定不爽。
好在Git考虑到了大家的感受,这个问题解决起来也很简单,在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。
如果你确实想添加该文件,可以用-f强制添加到Git:
$ git add -f App.class //.gitignore配置后,会被忽略,不能add,需要强制add
git check-ignore -v a.ini//检查配置文件,是哪一个配置拦截了文件
使用!可以反向排除
.gitignore文件示例
$ git add -f App.class //.gitignore配置后,会被忽略,不能add,需要强制add
git check-ignore -v a.ini//检查配置文件,是哪一个配置拦截了文件
使用!可以反向排除
posted @ 2025-04-11 16:24  鱼儿游上天  阅读(38)  评论(0)    收藏  举报