欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

git命令总结

程序员文章站 2022-03-28 18:11:33
git命令总结 基本命令 git init 创建版本库 git add filename 将文件添加到版本库的暂存区 git commit -m "版本描述" 将文件从暂存区提交到版本库的当前分支 git status 查看当前仓库状态 git diff filename 查看文件不同版本的区别 g ......

git命令总结

基本命令

  • git init 创建版本库
  • git add filename 将文件添加到版本库的暂存区
  • git commit -m "版本描述" 将文件从暂存区提交到版本库的当前分支
  • git status 查看当前仓库状态
  • git diff filename 查看文件不同版本的区别
  • git log 查看历史记录,显示从最近到最远的提交日志
  • git log --pretty=oneline
  • git reset --hard head^ 回退到上一个版本
  • git reset --hard head^^ 回退到上上个版本
  • git reset --hard head~100
  • git reset --hard commit_id 指定回退到某个版本
  • git reflog 记录每一次命令,可用来查找未来版本的commit_id
  • git diff head -- filename 查看工作区和版本库里最新版本的区别
  • git checkout -- filename 丢弃工作区的修改,即使用版本区的版本替换工作区的版本
  • git reset head filename 将暂存区的修改撤销掉,重新放回工作区
  • git rm filename 从版本库中删除文件

远程仓库


1 创建ssh key

  • ssh-keygen -t rsa -c "**********@163.com"

2 进入 https://github.com/settings/keys
3 在key文本框中粘贴id_rsa.pub中的内容

添加远程仓库

在github中创建一个新的仓库
repository name填入learngit,点击添加
按照提示在本地的learngit仓库运行命令:

  • git remote add origin https://github.com/username/learngit.git

把本地库所有内容推送到远程库

  • git push -u origin master

由于远程库是空的,我们第一次推送master分支时,加上了-u参数,git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令
自此,可以通过命令:git push origin master将本地提交的最新修改推送到github中了。

从远程库克隆

1 登录github,创建一个新的仓库:gitskills
我们勾选initialize this repository with a readme,这样github会自动为我们创建一个readme.md文件。
2 git clone https://github.com/username/gitskills.git
git clone git@github.com:username/gitskills.git(推荐使用)

分支管理

每次提交,git都把它们串成一条时间线,这条时间线就是一个分支。
截止到目前,只有一条时间线,在git里,这个分支叫主分支,即master分支。
head严格来说不是指向提交,而是指向master,master才是指向提交的,
head指向的就是当前分支。
一开始的时候,master分支是一条线,git用master指向最新的提交,再用head指向master,就能确定当前分支,以及当前分支的提交点。
当我们创建新的分支,例如dev时,git新建了一个指针叫dev,指向master相同的提交,再把head指向dev,就表示当前分支在dev上
1 创建分支、合并分支

  • git checkout -b 新分支 创建并切换到新分支

相当于以下两个命令:

  • git branch dev
  • git checkout dev
  • git branch 查看当前分支
  • git checkout master 切换回naster分支
  • git merge dev 将dev合并到当前分支
  • fast-forward信息:快进模式,直接把master指向了dev的当前提交
  • git branch -d dev 删除dev分支

更科学的切换命令:

  • git switch -c dev 创建并切换到新的dev分支
  • git switch master 切换到已有的master分支

合并冲突

创建新的分支feature1,是master分支和feature1分支各自有新的提交,这种情况下,git无法执行快速合并,只能试图把各自的修改合并起来,该合并有可能会有冲突
git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容

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

分支管理策略
通常,合并分支时,如果可能,git会用fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
强制禁用fast forward模式,git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
--no-ff:表示禁用fast forward

  • git merge --no-ff -m "merge with no-ff" dev 合并分支,禁用fast forward

在实际开发中,我们应该按照几个基本原则进行分支管理:
首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;

  • git stash 将当前工作现场储藏起来,等回复现场后继续工作
  • git stash list 查看工作现场去了哪
  • git stash pop 恢复现场并将stash内容删除(相当于git stash apply+git stash drop)
  • git stash apply stash@{0} 恢复指定的stash
  • git cherry-pick 4c805e2 复制一个特定的提交到当前分支
  • git branch -d feature-vulcan 强制删除分支
  • git remote -v 查看远程库的信息
  • git checkout -b branch-name origin/branch-name 在本地创建和远程分支对应的分支

当other的最新提交和自己的有冲突时:

  • git pull 将最新提交从远程抓下来
  • git branch --set-upstream-to=origin/dev dev 指定dev和origin/dev的连接
  • git rebase

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

标签管理

切换到指定分支

  • git tag v1.0 创建一个新的标签
  • git tag 查看所有标签
  • 默认标签是打在最新提交的commit上的

git tag v0.9 f52c633
标签不是按时间顺序列出,而是按字母排序的

  • git shwo tagname 查看标签信息
  • git tag -a v0.1 -m "version 0.1 released" 1094adb 创建带有说明的标签

注意:标签总是和某个commit挂钩。如果这个commit既出现在master分支,又出现在dev分支,那么在这两个分支上都可以看到这个标签。

  • git tag -d tagname 删除标签
  • git push origin tagname 推送某个标签到远程
  • git push origin --tags 一次性推送全部尚未推送到远程的本地标签
  • git push origin :refs/tags/v0.9 删除远程标签(要将标签先在本地删除)

git关联码云

1 注册登录码云,上传ssh公钥
2 创建仓库用于与本地关联

  • git remote -v 查看远程库信息
  • git remote rm origin 删除原有的远程库
  • git remote add gitee git@gitee.comusername/learngit.git 关联码云远程库
  • git remote add github git@github.com:username/learngit.git 关联github远程库
  • git push 远程库 本地库 推送到远程库

gui:sourcetree

  • $ git config --global alias.st status 配置别名 git st=git status
  • $ git config --global alias.co checkout
  • $ git config --global alias.ci commit
  • $ git config --global alias.br branch
  • $ git ci -m "bala bala bala..."
  • git config --global alias.lg "log --color --graph --pretty=format:'%cred%h%creset -%c(yellow)%d%creset %s %cgreen(%cr) %c(bold blue)<%an>%creset' --abbrev-commit"

 

每个仓库的git配置文件都放在.git/config文件中
当前用户的git配置文件放在用户主目录下的一个隐藏文件.gitconfig中

搭建git服务器

1 安装git: sudo apt-get install git
2 创建一个git用户,用来运行git服务:sudo adduser git
3 创建证书登录
收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。
4 初始化git仓库
先选定一个目录作为git仓库,假定是/srv/sample.git,在/srv目录下输入命令:

  • sudo git init --bare sample.git

把owner改为git:

  • $ sudo chown -r git:git sample.git

5 禁止shell登录
编辑/etc/passwd文件
找到类似下面的一行:
git:x:1001:1001:,,,:/home/git:/bin/bash
改为:
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
6 克隆远程仓库

  • git clone git@server:/srv/sample.git