Git小结 git常用指令

Git小结 git常用指令

创建git仓库

# 选择一个合适的位置,创建一个空目录,windows系统中,目录路径不要包含中文
mkdir test
# 进入目录
cd test
# 执行 git init,把这个目录初始化为git仓库
git init

本地仓库常用操作

# 仓库配置
# 配置用户
git config user.name xxx
git config user.email xxx@xxx.com
# 让Git显示颜色
git config --global color.ui true
# 配置别名
# 使用 st 表示 status 示例:
git config --global alias.st status
# 使用 unstage 表示撤销暂存区文件到工作区
git config --global alias.unstage 'reset HEAD'

# 配置文件
# Git仓库的配置文件: .git/config
# 用户的Git配置文件: 用户主目录下 .gitconfig


# 忽略文件
# 在Git工作区的根目录下创建 .gitignore 文件
# 把需要忽略的文件名填写到 .gitignore 文件中,支持正则匹配
# 强制添加被忽略的文件到Git仓库
git add -f test.pyc
# 检查被忽略的无法添加的文件
git check-ignore -v test.pyc
# 输出如下
.gitignore:3:*.class	test.pyc

# 添加文件到暂存区
git add readme.txt
# 提交文件到git仓库,-m 提交说明信息
git commit -m "add readme file."
# 查看git仓库当前状态
git status
# 对比工作区文件与仓库区文件的不同
git diff readme.txt
# 查看提交日志,
# --pretty=oneline 参数可以简化输出,每一个提交只显示一行
# --graph 可以看到分支合并图
git log --pretty=oneline
# 查看操作历史日志,即使版本回退过,也能看到之前的commit
git reflog

# 版本回退,HEAD表示当前版本,HEAD^ 表示上一个版本,HEAD^^ 以此类推,往上第100个版本可以表示为HEAD~100。
## 回退到上一个版本
git reset --hard HEAD^
## 回退到指定commit_id 的版本,commit_id可以不用写完整,写前几位也可以
git reset --hard commit_id

# 撤销工作区的修改,注意命令中的 -- 参数,如果没有这个参数,就变成了切换到另一个分支的命令了
git checkout -- readme.txt
# 撤销git add到暂存区(unstage)的文件回工作区,文件内容不会改变,只是从暂存区转移到了工作区
git reset HEAD readme.txt

# 删除文件
rm test.txt
git rm test.txt
git commit -m "delete test.txt."
# 如果是误删了文件,还可以恢复
git checkout -- test.txt

# 打patch
git format-patch commit_id
# 在Git代码库中使用patch
git am xxx.patch

Git远程仓库

# 本地仓库关联远程仓库,
# 本地仓库名称最好与远程仓库名称保持一致;远程库的名字就叫origin
git remote add origin git@github.com:xxx/test.git

# 删除已关联的远程Github仓库
git remote rm origin

# 把本地仓库的所有内容推送到远程库
# 第一次推送master分支时,加上 -u 参数,Git不但会把本地master分支的内容推送到远程新的master分支,还会把本地的master分支和远程的master分支关联起来,以后再推送或者拉取的时候就可以简化命令。
git push -u origin master

# 克隆远程仓库
git clone git@github.com:xxx/test.git

# 查看远程库的信息,-v参数可以显示详细信息
git remote -v

# 推送分支,把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上
git push origin dev

# 抓取分支
# 当我们从远程仓库clone时,默认情况下,只能看到本地的master分支,
# 如果要在dev分支上开发,就必须创建远程origin的dev分支到本地,使用如下命令创建本地dev分支
git checkout -b dev origin/dev
# 指定本地dev分支与远程 origin/dev 分支的连接
git branch --set-upstream-to=origin/dev dev
# 创建完成之后,就可以在dev分支上修改,提交,push
git add test.txt
git commit -m "this is atest."
git push origin dev

# rebase
# rebase操作可以把本地未push的分叉提交历史整理成直线;
git rebase

分支管理

# 创建分支dev
git branch dev
# 切换分支到dev
git checkout dev
# 创建dev分支,并切换到dev分支
git checkout -b dev
# 查看分支,git branch 会列出所有分支,当前分支前面会标一个*号。
git branch

# 分支合并,合并dev分支
git checkout master
git merge dev

# 合并完成后可以删除分支dev
git branch -d dev
# 强制删除分支
git brach -D dev

# 另一种方式切换分支
git switch master
# 创建并切换分支dev
git switch -c dev

# 通常合并分支时,Git 会使用Fast forward模式,这种模式下,删除分支后,会丢掉分支信息。
# 如果禁用Fast forward模式,Git会再merge的时候生成一个新的commit,这样就可以在分支历史上看到分支的信息。
# --no-ff 表示禁用Fast forward模式,-m 可以添加描述信息
git merge --no-ff -m "merge with no-ff" dev

# 保存并隐藏工作现场
git stash
# 这时候,git status查看状态的话,工作区就时干净的。
# 保存并隐藏工作区之后,就可以新建分支来做其他事情,比如修复一个bug
git checkout master
git checkout -b issue-01
# 修复bug之后合并bug分支
git merge --no-ff -m "merged bug fix 01" issue-01
# 回到dev分支继续干活
git checkout dev
# 还原工作现场
## 方式1
git stash apply  # 恢复原来的工作区
git stash drop   # 删除stash
## 方式2
git stash pop  # 还原工作区并删除stash
# 查看stash内容
git stash list
# 复制特定的提交到指定分支,比如刚才修复的bug的commit
git cherry-pick 5605e2  # 假设当前时在dev分支,Git会自动在dev分支上做一次提交,跟cherry-pick的commit_id 是不同的。


解决冲突

# 合并分支时,产生冲突
git merge dev
Auto-merging readme.txt
CONFLICT (content): Merge conflict in readme.txt
Automatic merge failed; fix conflicts and then commit the result.

# 解决办法
git status # 查看冲突的文件
# 手动修改冲突的文件之后,再提交。注意,提交之后就不用再次merge了,因为之前已经merge过了。
git add readme.txt 
git commit -m "conflict fixed"

# push 到远程库时,产生的冲突
# 推送失败,是因为最新的提交和你试图推送的提交发生了冲突
# 解决办法:先用git pull 拉取最新的代码,然后在本地合并,解决冲突,提交,再推送。
git pull
# 手动解决冲突之后,提交
git commit -m "fix test conflict"
# 最后,再次push
git push origin dev

标签管理

# 切换到需要打标签的分支上
git checkout master
# 创建标签,默认情况下,标签是打在最新提交的commit上的
git tag tag_name
# 查看所有的标签
git tag
# 给指定的commit打标签
git tag tag_name commit_id
# 查看标签信息
git show tag_name
# 创建带有说明的标签,-a 指定标签名,-m 指定说明信息
git tag -a tag_name -m "This is a tag." commit_id

# 删除标签
git tag -d tag_name
# 创建的标签都只存储在本地,不会自动推送到远程仓库
# 推送标签到远程仓库
git push origin tag_name
# 推送所有尚未推送到远程仓库的本地标签
git push origin --tags

# 删除已推送至远程仓库的标签
# 如果标签已经推送到远程仓库,需要先从本地删除,再从远程仓库删除。
# 本地删除标签
git tag -d tag_name
# 从远程删除,删除命令也是push
git push origin :refs/tags/tag_name
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值