git学习笔记

Git学习笔记

1、Git基本配置:

配置用户名和邮箱信息:

git config --global user.name 'Yore'
git config --global user.email 'dy_yore@126.com'

参数说明:

--local  : 只对某个仓库有效
--global : 对当前用户所有仓库有效(常用)
--system : 对系统所有登录用户有效(不推荐)

生成SSH密钥:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

2、Git基本命令:

git --version:

​ 查看版本号

git config:

​ 查看配置参数

git config --list
# 查看不同权限的配置,比如global
git config --list --global
# 也可以查看具体某一项配置参数
git config user.name

git help:

​ git help --web log(查看log命令参数)

git init:

​ 初始化项目,使用git管理

git add:

​ 将内容从工作区添加到暂存区

# 提交指定内容
git add file1 file2 ...
# 一次提交全部
git add -u

git commit:

# 将暂存区代码提交到版本库中,需要先执行git add
git commit -m'message'

# 合并add和commit命令
git commit -am'message'

git status:

​ 查看当前状态

git log:

# 1、查看版本历史信息(当前分支)
git log
# 2、查看简洁信息
git log --oneline
# 3、查看最近的几次提交信息,使用参数-n
#    比如查看最近的两次提交,查看简洁信息
git log -n2 --oneline

# 查看所有分支的提交历史
git log --all

# 查看版本演进的历史,图形化
git log --all --graph
# 配合oneline参数使用 -n参数
git log --oneline --all -n2 --graph

git branch:

​ branch命令主要完成与分支相关的操作,比如:创建分支、查看分支、删除分支等等

# 创建本地分支
git branch branch_name
# 要实现创建并切换到新的分支,可以用另一条命令
git checkout -b branch_name
# 创建远程分支
git push <远程主机名> <本地分支名>:<远程分支名>

# 查看本地分支
git branch 
# 查看本地分支 + 最近一次提交信息
git branch -v
# 查看本地分支 + 最近一次提交信息 + 本地和远程分支间的关系
git branch -vv
# 查看本地分支 + 最近一次提交信息 + 本地和远程分支间的关系 + 远程分支
git branch -vv -a
# 查看远程分支
git branch -r

# 删除本地分支
git branch -d branch_name

git checkout:

​ 切换分支

# 切换分支
git checkout branh_name
# 创建新分支并切换
git checkout -b temp(分支名) xxxx(提交记录的id)

git diff:

​ 对比两次提交的不同

git diff xx xx

# 对比head和head的父级两次的提交的差异
git diff HEAD HEAD^/HEAD~

git remote:

​ 用于在远程仓库的操作:

# 显示所有远程仓库
git remote -v

# 添加远程版本库
git remote add <rep_name> <url>

git push:

# 将本地仓库中所有分支的内容推送到远端对应的仓库
git push <remote_name> --all

git fetch:

#将远端的分支拉到本地,不会和本地产生关联,就是没有merge的操作
git fetch <remote_name> <branch_name>

git pull:

gitk:

​ git图形化界面

# 项目仓库中执行gitk命令打开版本演进历史的图形化界面
gitk
# 如果没有这个命令,可以重新安装一下试试
brew install git-gui

git cat-file:

​ 查看具体信息

#   看类型
git cat-file -t id
# 看内容
git cat-file -p id

3、Git常见使用场景:

文件重命名的方式:

方式一:

mv filea fileb
git add fileb
git rm filea
git commit -m'rename'

方式二:

git mv filea fileb
git commit -m'rename'

分离头指针注意事项:

git checkout <commit-id>
# 注意分离后的分支是否需要保存

删除不需要的分支:

# 删除不需要的分支
git branch -d <branch_name>

# 遇到-d无法删除的时候,确定分支能够直接删除,可以根据命令提示使用-D
git branch -D <branch_name>

修改commit的message:

# 修改最近一次commit的message
git commit --amend

# 修改之前commit的message,使用rebase命令,参数选择reword
git rebase -i <要修改的commit的父commit的id>
# 进入界面之后,根据参数命令选择,比如reword表示修改,保存退出后,进入另一个界面修改message

整理并合并多个commit:

# 使用rebase命令,参数选择squash
git rebase -i <要修改的commit的父commit的id>
# 执行上述命令后,在第一个打开的文件中,将要合并的commit前面的pick改为需要的参数比如squash或者简写s,保存退出后,自动弹出第二个文件
# 在第二个文件中输入合并之后设置的message,保存退出。

合并多个间隔的commit:

# 使用rebase命令,参数选择squash,但是需要手动调整commit的顺序
git rebase -i <要修改的commit的父commit的id>

比较暂存区和HEAD所含文件的差异:

git diff --cached

比较工作区和暂存区所含文件的差异:

git diff
# 如果想比较某一个文件
git diff -- <file_name>

将暂存区恢复为和HEAD一样:

git reset HEAD

将工作区恢复为和暂存区一样:

git checkout -- <file_name>

撤销暂存区部分文件的变更:

git reset HEAD -- <file_name>

撤销最近几次的提交:

​ 注:暂存区和工作区的所有内容都恢复为指定的commit id对应的内容

git reset --hard <指定commit id>

查看不同提交的指定文件的差异:

# 查看两个分支提交的所有文件的差异,这里也可以直接指定commit id
git diff <branch_1> <branch_2>
# 查看两个分支提交的指定文件的差异
git diff <branch_1> <branch_2> -- <file_name>

删除文件:

# 删除指定文件,状态处于待提交
git rm <file_name>

开发中临时处理紧急需求:

# 1、先将当前开发的内容保存
git stash

# 3、恢复stash中的内容到工作区
git stash apply/pop

# 查看stash里的内容
git stash list

Git仓库备份到本地:

​ push、fetch命令

# 哑协议,无进度条,bare参数代表裸仓库
git clone  --bare  <local_path>  <custom_name>
# 智能协议,有进度条
git clone --bare file://<local_path> <custom_name>

​ 如何要和远程仓库交互:

# 通过remote命令添加远端仓库地址
git remote add <name> <url>

# 将分支推送到远端
git push branch_name

4、Git多人合作场景:

​ 在实际的开发过程中,一个项目通常是由团队内多人合作完成,在用git管理项目代码的过程中场景的如下:

不同人修改不同文件如何处理:

​ 对于不同人修改了同一个项目中的不同的文件这种情况,先提交的没有问题,后提交的需要更新远端仓库最新的代码到本地,与本地代码合并后再推送到远端仓库。

# 配置远端仓库地址
git remote add <upstream/自定义远端主机名> <原仓库github地址>
# 将远端的项目分支拉取到本地,不指定分支,会拉取所有分支
git fetch <远程主机名> <远程分支名>
# 将远端拉取到本地分支的代码与本地分支合并
git merge <远程主机名>/<远程分支名>

# 推送到远端
git push <远程主机名> <本地分支名>:<远程分支名>

不同人修改相同文件的不同区域:

​ 对于这种情况,后提交的人同样需要先更新代码,然后通过merge操作将最新的代码和自己的合并,对同一文件的不同区域修改的合并过程git可以自动完成。

不同人修改了同一文件的相同区域:

​ 对于这种情况,冲突信息和上面的类似,但是git merge是无法自动帮你合并两次修改的内容,需要自己手动处理:

通过命令行处理,打开冲突的文件,确认需要保留的内容,合并后 重新提交和推送

不同人同时修改了文件名和文件内容:

​ 场景:一个人修改了文件名,另一个还在原文件名的基础上修改了文件内容。

先修改文件名并更新远端代码仓库后,后一个人的修改无法直接推送到远端,需要先执行pull命令,git可以自动识别并完成合并操作,然后再提交即可。

不同人同时修改了同一个文件的文件名:

​ 类似上述的操作,需要手动选择保留哪个文件,涉及到的命令有:git rm

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!

请我喝杯咖啡吧~

支付宝
微信