git的使用

  • 结构

工作区:位于本机,就是最底层的修改,直接的修改。一般的操作不需要git命令,只有与git有关的,如添加、删除文件跟踪(添加、删除文件到暂存区):

git add 文件名 、git rm 文件名(这只会删除追踪,不会删除本地工作区的文件)

需要git关键字。

每次有修改时,就要add,就像ctrl+s一样。

暂存区:保存了一些临时数据,等待提交到版本库中。具体哪些是临时数据,在工作区被git add的文件,但是还没有从git commit到版本库的文件就是临时数据。一般完成了某个功能后有一次commit。执行了commit后,其实暂存区还是有内容的,提交相当于复制。使用git ls-files 可以查看暂存区的内容。

版本库(本地仓库):就是.git文件,等待被push到远程仓库,一般多次commit后有一次push(大概一天一次吧)。使用git ls-tree --full-tree -r --name-only HEAD查看本地仓库的内容

远程仓库:这里有维持着很多分支,一个开发者只在其中一个分支上进行开发,也就是版本库只会push到其中一个分支,当该分支比较成熟,可以申请合并到master分支上。

  • redo与undo

1. 已 add 未 commit (从暂存区恢复一个文件到上一次commit。因为没有commit,那么当前head没有变化,原文件将永远找不回,最好对比区别后在操作):git checkout -- "文件名",你可以指定id来返回到指定commit

 

2. 1 已commit,还没有push(从本地仓库返回至某一版本),如果已经push,那么使用这种方法的话,只会改变本地的代码,远程仓库的是不会变的,当你修改后想提交就会发现提交不了(但是可以加-f强制提交,不推荐)。

  1. 返回上一个版本: git reset --hard HEAD^
  2. 返回到20个版本之前:git reset --hard HEAD~20 
  3. 返回到指定id的版本:使用 git log 查看提交日志与Id,再使用 git reset --hard <SHA>来退回到指定版本
  4.  git reset <SHA> : git reset 会保留工作目录。这样,本地提交记录是没有了,但是修改内容还在磁盘上。这是一种安全的选择,但通常我们会希望一步就“撤销”提交以及修改内容 — 这就是 --hard 选项的功能。
  5. redo之后,进行了一些修改,又觉得不如之前的,想undo,这时候使用git log的话并不能显示redo之前的原始分支,而是需要使用git reflog显示一个 HEAD 发生改变的时间列表,然后再使用 git reset --hard <SHA>来返回到任意一个时间节点。

2.2. 合并本次与上次commit(修正上一次commit):git commit --amend 或 git commit --amend -m "Fixes bug #42" 

3. push之后,回退到某一版本,这会利用一个新的commit来模拟反操作使远程仓库与本地工作区都回退到某一版本:git revert <SHA>

 

 

  • 冲突

一个项目在多人协作,你和同事没有事先沟通,同时修改了一个文件,修改完成都要push.

这时就会出现一个问题:先push的人提交正常,后push的人会被警告存在冲突。
如果强制push,远端仓库会自动合并,保留出现冲突的内容(上一个版本和刚提交的内容都会被保留下来)。
这时代码将不能正常运行,其他同事在执行 pull 拉取新代码后会发现无法运行,这就给别人造成了很大的麻烦。

所以,在开发项目时如果是多人协同开发,那么提交代码时一定要先 pull,拉取远端仓库的最新版本,如果存在冲突,仔细校对,在本地处理好冲突内容后再执行 push 提交代码。

在commit之后,我们想提交的到了本地仓库,然后pull之后,合并的内容在工作区,如果没有冲突,则直接push,git就会自动合并远程仓库(合并后与此时的工作区一样),如果有冲突,则先对比工作区与本地仓库的区别,解决冲突,再commit,pull,(解决冲突),push。

  • 其他

git diff:由于暂存区在commit之后,内容依然不变,所以git diff在任何时候都可以理解为比较工作区与暂存区的共同文件

git commit -m ‘注释’用于提交暂存区的文件;git commit -a或者git commit -a -m '注释'则相当于提交工作区中已被跟踪的文件,即对于已被跟踪的文件,如果之后它被修改了,不需要再次add也行。

 

参考:

转!!git如何撤销上一次commit(或已push) - 乌云de博客 - 博客园 (cnblogs.com)

如何在 Git 里撤销(几乎)任何操作和log、reflog、cherry-pick使用_钟长森的博客-CSDN博客

git回退到某个版本,以及从过去的版本返回到新的版本_DDD_QQQ的博客-CSDN博客_git 更新到某个版本

冲突:https://www.zhihu.com/question/60431222/answer/1695660194

git diff的最全最详细的4大主流用法_快乐李同学的博客-CSDN博客

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值