Git 一些常用的操作

高层命令

git init  	# 创建工作区:版本库、暂存区

# 将修改的文件放入暂存区
# 先将工作目录中的修改做成git对象	修改几个文件生成几个对象
# 再将git对象放入版本库,再放入暂存区
git add ./
	git hash-object -w 文件名
	git update-index -----

# 生成树对象  提交对象  放入版本库
git commit -m "注释"
	git write-tree
	git commit-true

# 查看文件状态
git status

工作目录下的文件状态:已跟踪 未跟踪

工作一段时间后的文件状态:已提交 已修改 已暂存

# 跟踪新文件
git add 文件名
# 查看已暂存和未暂存
git diff --cached
git diff --staged	查看哪些修改已经被暂存没被提交

# 添加大量注释, 使用vim
git commit  

# 跳过暂存直接提交
git commit -a -m ''

# 删除文件  手动法
rm 文件名
git add .
git commit 

# 删除文件  git法
git rm 文件名
git commit -m ''

# 重命名  手动法
mv name new_name
git add ./
git commit -m ''

# 重命名 git法
git mv 文件名 新文件名
git commit -m ''

# 查看历史记录	展示的皆为提交对象
git log    # q 退出
git log --pretty=oneline	# 写在一行
git log --oneline	# 写在一行 简写 

# 查看所有的分支历史记录
git log --oneline --decorate --graph --all
# 为该命令配置简单化  (失败)
git config --global alias.name "log --oneline --decorate --graph --all"

分支操作

团队每个成员都开一个分支, 将个人功能从开发主线上分离下来,以免影响开发主线。

分支:指向最新提交对象的指针

# 查看当前分支列表
git branch

# 在当前的提交对象上创建 一个新的指针
git branch 分支名 

# 切换分支 切换分支将会修改工作目录中的文件
# 切换分支之前应该先 git status 看看有没有未命名的文件
# 切换分支会改变:HEAD 暂存区 工作目录
git checkout 分支名

# 删除分支  需要先切换分支,自己不能删自己
git	branch -d name  # 合并后删除
git branch -D name  # 强制删除

# 查看每个分支的最后一次提交
git branch -v

# 新建一个分支并使用
git checkout -b name

# 新建一个分支 并且使该分支指向对应的提交对象  版本穿梭
git branch name commitHash

# 查看哪些分支合并到了主分支
git breach --merged

分支实战

# 切换分支将会修改工作目录中的文件
# 切换分支之前应该先 git status 看看有没有未命名的文件,当前分支必须为干净的(已提交) 不红不绿
# 切换分支会改变:HEAD 暂存区 工作目录
git checkout 分支名

# 在切换分支时若当前分支有未提交的暂存或为暂存的提交,分支可以切换成功,但可能会造成分支污染
# 一定要以主分支为起点创造分支

# 分支合并
git merge hotbug   # 快进合并

# 处理分支冲突	在冲突分支上修改
git add ./
git commit -m 'num for fix ct'

分支就是一个没有后缀名的文件,里边存着一个提交对象的哈希

Git存储

# 应用场景:不想提交  但是要切分支
# 可以将未完成的工作暂时存到一个栈上 可在任意时候使用
git stash

# 查看存储
git stash list

# 运用栈顶元素  不再栈中删除
git stash apply

# 从栈中删除
git stash apply name

# 充栈中弹出
git stash pop name

撤销&重置

​ 工作区

​ 撤回自己在工作目录中的修改

​ 暂存区

​ 撤回自己的暂存

​ 版本库

​ 撤回自己的提交

# 撤回自己对文件的修改
git checkout -- filename

# 撤回自己的暂存 
git restore --staged filename
# 撤销自己修改的内容
git restore <file>
# 查看暂存区 
git ls-files -s
# 查看暂存区文件内容
git cat-file -p hash


# 撤回自己的提交:
# 两种情况适用:1.提交注释写错 
git commit --amend	# 重新写注释 
# reset:

git reset --soft HEAD~  # 撤销上次提交,在此commit时会创建新的提交
	只改变HEAD 不会改变暂存区

# git reflog 查看记录
# git reset --soft hash 跳转至指定哈希

git reset --mixed HEAD~  撤销暂存区 带着分支一起动 默认

git reset --hard HEAD~  暂存区 工作目录 全部撤销 带着分支一起动 非常危险

git reset [--mixed] HEAD filename	# 只动暂存区

git checkout 分支名 & git reset --head commithash 的区别
1. checkout 只动HEAD  --hard 动HEAD而且带着分支一起走
2. checkout 对工作目录安全		--hard强制覆盖工作目录
# 数据恢复  使用  --hard后造成数据丢失
$ git branch recover branch 4e0e2f3 (失败)

tag 里程碑

列出标签
git tag
git tag -l "v1.8*"

标签:轻量标签 附注标签
git tag v1.0 hash

删除 
git tag -d  v1.0

查看标签指向的版本
git checkout v1.0   # 会造成头部分离,需要先新建分支
git checkput -b 'v1.0'

远程仓库 的使用

# 需要进入组织
# 创建一个新的远程仓库
# 为远程仓库配置别名			克隆后默认别名为origin
git remote add name address

# 查看别名信息
git remote -v
#查看配置
git config --list

# 推送  会生成远程跟踪分支(本地与远程的媒介)
git push name 分支

# 克隆  不需要git init
git clone url

# 删除user.name 和  user.email
git config --global --unset user.email

# 将git中的user 和 email改成自己的  (项目级别)
git config user.name sunqg
git config user.email sunqg@163.com


# 远程仓库同步到本地
# 拉取更新至跟踪分支
git fetch test
# 切到跟踪分支
git checkout test/master
get fetch test
# 合并分支
git merge test/master

# 流程:
1. 项目经理初始化远程仓库
2. 项目经理创建本地仓库
		git remote 别名 https
		gin init
		将源码复制进来
        修改用户名和邮箱
        git add
        git commit
3. 项目经理推送本地仓库到远程仓库
		清理windows凭据
		git push 别名 分支
		推完之后会覆盖生成远程跟踪分支
4. 项目经理邀请成员
5. 成员克隆远程仓库
		git clone 地址 默认主分支有默认的远程跟踪分支
		为远程仓库配置别名
6. 成员作出贡献
		git add
		git commit
		git push 别名 分支名
7. 项目经理更新修改
		git fatch 别名
		git checkout 别名/master
		git merge 别名/master
# 远程分支
# 远程跟踪分支
	本地不能移动
# 本地分支

只有在克隆的时候本地分支和远程跟踪分支是有同步关系的

从远程fatch后会生成远程跟踪分支
本地创建一个同名分支,并合并远程跟踪分支
之后 修改远程分支上的内容后push
当前分支跟踪远程分支
git branch -u 别名/name  之后可直接git push 提交,git pull拉取

# 创建一个本地分支去跟踪远程分支  以远程分支名创建一个本地分支去跟踪远程分支
git branch --track 别名/远程分支名

# 查看分支 详细信息
git branch -vv

# 删除远程分支
git push orgin --delete name

# 列出仍在远程跟踪但是远程已被删除的分支
git remote prune --dry-run

# 清除上面命令列出的远程跟踪
git remote prune origin

# 处理冲突
	git本地会有冲突:在典型合并的时候
	git远程协作的 时候:多个人同时push pull

# 两个人同时对一个文件进行修改后进行push, 会产生冲突
报错时 先git pull
沟通后再对文件进行修改后再提交  不然容易挨揍

# 拉取的与本地的不同 本地有可能被覆盖掉
先提交处理再拉取  即处理push冲突时的方法

pull request

# 参与某个项目但没有推送权限,这时可以对仓库进行fork 
# git clone url
# 修改
# git add
# git commit 
# git push
# pull request 添加留言  create pull request
# 合并pull request

# 更新fork的仓库
git remote add new_name url # 更新别名
git fatch new_name			# 重新跟踪
git branch -u new_name
git pull
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值