git实践指南

一直在用git,但是有时候有些细节上还是会忘记需要百度。
这里对日常的一些用法做个记录,方便日后查找、

一、初始化git库

1、直接克隆

git clone git@[你的git地址]
cd gittest
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master

2、已有仓库

cd existing_folder
git init
git remote add origin git@[你的git地址]
git add .
git commit -m ""
git push -u origin master

3、导入已有仓库

git clone --bare https://git.example.com/your/project.git your_path
cd your_path
git remote set-url origin git@codeup.aliyun.com:fire/shiyanshi/gittest.git
git push --mirror
二、版本回退,时光穿梭

1、提交前还原当前修改和最后一次提交,恢复到上一次commit状态
注意:此操作会不断删除最后一次提交并且回复到上一次提交,会连同当前修改和最后一次commit一起回滚,并且无限层级回滚。这个操作比较恶心。

git reset --hard HEAD^

但是如果不小心回滚错了,还是可以用git log找到id后恢复的,前提是操作窗口还没有关闭,亲测idea的提交记录使用git log看不见

git reset --hard 1094a

但是如果你第二天才想起来要回滚怎么办,这时候你也不知道commit id了
使用
git reflog解决你的问题
在这里插入图片描述
再次使用
git reset --hard 9076c29
是的,刚才回滚的东西又回来了。但是回滚之前没有commit的东西却无法恢复。请谨慎此操作。

总结:git reset其实是对HEAD指针的移动,当你回退的时候其实只是指针移动到了上一次提交。
如果只是需要还原未提交的修改,只需要还原到最后一次提交的版本
git reset --hard [最后一次commitId]
或者
git reset HEAD,如果执行了git add再执行这个命令,则无法将所有修改内容还原,只能把git add进缓存区的内容取出到工作区。

三、工作区和暂存区

git分为工作区、暂存区、master

所有需要提交到master的内容都需要先提交到暂存区
git add xxx.java
之后可以使用git status查看xxx.java的文件状态
需要注意的是,如果使用了 git add后再对xxx.java进行修改
之后commit
那么之后修改的内容不会被commit,只有之前被add进缓存区的内容才会commit。

撤销修改

git checkout -- readme.txt可以丢弃工作区的修改

这里比较简单不过多描述

四、分支管理

首先我们使用命令git remote查看到的远程分支是origin

分支推送
git push origin branch-name
如果推送失败则先使用git pull拉取

建立本地分支和远程分支的关联
git branch --set-upstream branch-name origin/branch-name

五、缓存区

git stash 可以将当前代码暂时写入缓存区,之后做其他事情
git list 可以看到被缓存的代码
git apply 可以恢复最后一次缓存区
git apply stash@{1} 恢复指定缓存记录
恢复后stash并没有被删除
可以选择手动删除,也可以使用
git stash pop 恢复并删除

六、Rebase

git提交是按时间点递增的,如果push之前其他人先push了,那我们就需要先pull再push,这会使git的分支结构看起来很混乱。实际上我们这时候可以使用rebase命令将我们当前分支拖动到最新的时间节点。
及将远程仓库master上的最新push当成我们当前仓库Three基线,再提交我们的代码。
结合idea的使用方式为
在这里插入图片描述
当前分支是Three
这个命令是将master作为Three的基线使用。
执行这条命令之后我们可以看到Three分支已经包含了master最新的代码
我们只需要再push就好。

当然rebase的时候也会发生冲突,如果冲突内容比较复杂,建议先将rebase还原,之后再换种方式解决冲突之后再rebase提交。
使用abort进行rebase还原。
之后对将要合并的分支创建一个新的分支,及master=>master-merge
之后用当前的分支去比较master-merge,然后把差异部分手动复制到master-merge
如图:
在这里插入图片描述
之后再执行rebase pullpush

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值