git的使用


title: git的使用
tags: [git,使用]
categories:

  • 使用
  • git
    date: 2021-03-23 21:04:12

git的使用

菜鸟教程

创建git库

初始化git
mkdir gittest
cd gittest
git init
将要添加的文件加入git管理

add 从工作区到暂存区

git add [filename]

或者将目录下所有文件都加入

git add .
自定义所要添加的文件

总是手动add每一个太麻烦了,但总有些不希望添加进去的,可以这样。

  • 创建一个文件名为的文件

.gitignore

  • 文件内容为
file
.*
!.gitignore
!file1
  • 这表示名为file的文件要加进去
  • 所有文件都要加进去
  • 忽略 .gitignore
  • 忽略 file1
提交到仓库

commit 将暂存区提交到仓库

git commit -m [提交描述]

每次commit之前都要add所要进行管理的文件

查看仓库状态
git status
简略版
git status -s
查看文件更改情况
git diff [filename]

版本管理

版本回退

在commit之后后悔了

git log 
git log --oneline //简略版
  • 使用git log 查看之前提交的记录,记下回退的版本号commit id 输入
git reset --hard [commit id]
  • 注意只有在head指向的版本之前的, 切换版本到当前版本之后的 输入
git reflog
撤销修改
  • 丢弃对工作区的修改 add之前
git checkout -- [filename]

checkout就是用版本库里的版本替换工作区的版本

  • 丢弃对暂存区的修改 add之后 commit之前
git reset HEAD [filename]

远程仓库

创建ssh key
ssh-keygen -t rsa -C "myemail@163.com"

在用户目录里找到id_rsa.pub,将里面的数据复制到GitHub中,这样就可以从本地电脑推送到GitHub中了.

添加远程库
git remote add repo1 git@github.com:yishuilingbo/gittest.git

查看本地所有仓库
git remote -v
推送到远程库
git push -u [库名] [分支名]
  • 加上了-u参数,Git不但会把本地的分支内容推送的远程新的分支,还会把本地的分支和远程的分支关联起来,在以后的推送或者拉取时就可以简化命令。
删除远程库
git remote rm [库名]
克隆库
git clone git@github.com:yishuilingbo/gittest.git
cd [库名]

分支管理

建立新的分支
git branch [branchname]

查看所有分支
git branch
切换分支
git switch branch [branchname]
创建并切换分支
git switch -c [branchname]
合并分支到当前分支
git merge [来源分支名]
删除分支
git branch -d [branchname]
  • 若该分支没有被合并过,以下强制删除
git branch -D [branchname]
合并冲突
  • 当两个不同的分支对同一对象进行修改并提交之后会发生 merge conflict
    此时需要查看冲突文件手动解决冲突。
查看分支合并图
git log --graph

简洁版

git log --graph --pretty=oneline --abbrev-commit
分支管理策略

通常合并分支的时候,git会采用fast forward模式。这种模式下,git只是把分支指针向前移动,此时,删除掉分支之后将会丢失分支信息。若要强制禁止fast forward,git就会在merge的时候生成一个新的commit,这样即使删除该分支,也可以从log上查看历史信息。

  • 强制禁止fast forward
git merge --no-ff -m [commit 描述] [来源分支名]
修复main分支上的bug流程
  1. 当前在dev分支,先保存工作现场
git stash
  1. 切换到main分支,并建立新的分支bugfix
  2. 在新的分支上修改bug,然后提交后合并到main 产生一个commit id fixbug
  3. 回到dev分支,回复现场
git stash pop  //这将删除这条stash
或者
git stash list //查看stash list
git stash apply stash@{0}
  1. 将修复的信息复制到当前dev分支
git cherry-pick [commit id]
多人合作冲突
  1. pull 下来之后手动解决冲突在再合并push

标签

创建标签
  1. 切换到要创建标签的分支上
git tag [标签名]

默认标签打在最新的commit上面
2. 对历史commit打标签

git log --pretty=oneline --abbrev-commit  //列出历史commit
git tag [tag] [commit id]
  1. 指定标签信息
git tag -a [tag] -m [info] [commit id]

标签总是和对应的commit挂钩

删除标签
git tag -d [tag]

标签只存储到本地,不会自动推送到远程,可以这样推送到远程

git push [库名] [tag]
git push [库名] --tags  //一次性推送所有标签
删除远程标签
git push [库名] :ref/tags/[tag]

git报错

refusing to merge unrelated histories
描述
  • 首先再github上创建一个仓库
  • 在本地初始化一个仓库。
  • 添加远程仓库
  • git push -u ge main
  • 报错为

$ git push -u ge main
To github.com:yishuilingbo/XYY-Game-Engine.git
! [rejected] main -> main (non-fast-forward)
error: failed to push some refs to ‘github.com:yishuilingbo/XYY-Game-Engine.git’
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: ‘git pull …’) before pushing again.

原因
  • 本地仓库和远程仓库实际上是独立的两个仓库。假如之前是直接clone的方式在本地建立起远程github仓库的克隆本地仓库就不会有这问题了。
解决
$git pull [库名] [分支名] --allow-unrelated-histories

接着解决冲突然后 push即可

多仓库 multiple ssh keys on one computer

步骤
  1. 生成ssh key ,并给生成的文件使用绝对路径特定地命名。
  2. 在 .ssh 目录下新建config文件,内容为
#gittest
Host gittest.github.com
	HostName github.com
	User git
	IdentityFile ~/.ssh/id_rsa_gittest
	IdentitiesOnly yes


#coebase
Host codebase.github.com
	HostName github.com
	User git
	IdentityFile ~/.ssh/id_rsa_codebase
	IdentitiesOnly yes

#coebases
Host blog.github.com
	HostName github.com
	User git
	IdentityFile ~/.ssh/id_rsa_codebase
	IdentitiesOnly yes


  1. 修改本地仓库地config中的url
    eg:
    gittest地config本来为
[remote "origin"]
	url = git@github.com:yishuilingbo/gittest.git
	fetch = +refs/heads/*:refs/remotes/origin/*

修改为:

[remote "origin"]
	url = git@gittest.github.com:yishuilingbo/gittest.git
	fetch = +refs/heads/*:refs/remotes/origin/*

即添加上gittest.
4. 在GitHub上的仓库中添加刚刚生成的deploy key

原理
  • 即对于不同的仓库使用不同的key,并且使用别名来区分不同的仓库。
参考
  • https://gist.github.com/jexchan/2351996

agent

exec ssh-agent bash
ssh-add ~/.ssh/id_rsa_cuiwenyao
git push
多账户

自己只需要本地保存自己账户的ssh key即可,按照这里的进行多账户配置。

注意,在windows下,这个认证配置好像是暂时的,关闭git之后就失效了,所以需要每次重新配置,即重新使用:

exec ssh-agent bash
ssh-add ~/.ssh/id_rsa_cuiwenyao
git push

github 使用

初始化git信息

git config --global user.name cuiwenyao
$ git config --global user.email yao1970099540@163.com

连接到自己的账户

ssh key

使用以下命令生成ssh key 并命名为 id_rsa_cuiwenyao_github

ssh-keygen -t rsa -C "yao1970099540@163.com" -f ~/.ssh/id_rsa_cuiwenyao_github

不想为这个ssh key生成密码的话就一直回车

这会在 ~/.ssh/目录下生成ssh key

id_rsa_cuiwenyao
id_rsa_cuiwenyao.pub

将id_rsa_cuiwenyao.pub添加到github中的用户setting 中的ssh key 中。

exec ssh-agent bash
ssh-add ~/.ssh/id_rsa_cuiwenyao

将使用id_rsa_cuiwenyao进行验证,只有这样才可以进行 push 等操作

自己只需要本地保存自己账户的ssh key即可,按照这里的进行多账户配置。

windows中这个权限确认状态好像只是临时的,需要每一次打开git时重新使用以上命令进行配置。

验证配置是否成功:

ssh -T git@github.com

multy account and multy ssh keys

除了上述的额命令外,还需要在 ./ssh 下写一个 config 文件

内容如下:

#cuwenyao
Host github
    HostName github.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_cuiwenyao
    user git
Host gitee
    HostName gitee.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_cuiwenyao_gitee
    user git

协同开发

fork 别人的项目

别人的仓库: Repo_A
fork之后到自己的仓库中 Repo_fork
修改后push到自己的仓库 Repo_fork 中
发起一个 pull request
仓库拥有者接受 pull request

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值