git入门操作总结

实习一个月,从git入门到使用多次后一点点理解,再总结一次发现收获良多,本文尽量从日常使用和简单的角度来描述git操作,仅作记录,也希望对大家有所帮助 

git 常用

文件状态

add,commit

status:查看文件状态

文件的状态总的来说只有traced和untraced,一个文件被创建以后,吐过没有add,那么使用git status 显示的状态是untraced,这时的文件不能git commit -m,需要用git add 来使文件状态变为traced 才是可以git commit -m的,但是未traced的文件可以使用git commit -am来提交,相当于结合了git add 和git commit -m git commit -m 和 git commit -am 的区别 在创建新文件后,文件是untraced的,这是使用git add使他变为tranced的,这时用git commit -m 可以把该文件提交到本地缓存区(stage)中,但是此后更改该文件中的内容,再使用git commit -m 是无法提交更改后的最新内容的,这时就需要使用git add再次把工作区的内容添加到stage,然后再git commit -m 或者使用git commit -am

 

分支

分支结构head不是指向远端的某个分支,而是指向分支的commit,head在本地存在的形式是文件的形式,在本地git文件夹 下有refs/heads下有各个分支对应的commit提交文件 head文件结构也就是说每次checkout都是从本地工作区(index)切换到heads下的对应分支的 文件中,每次fetch也是把远端的最新commit拉到heads下对应分支的文件中。

分支流转

分支checkout分支可以从matercheckout也可以从另一个分支checkout,当一个分支还需要多人开发的时候,就需要从分支checkout, 默认是从mater来checkout。 分支pull和merge当分支A是从另一个分支B checkout的时候,每次提交(push)前要先从分支B pull一下, 拉取最新的代码,然后再push,如果要上线前需要pull一次mater的代码,然后push到远端, 然后合并到mater分支,如果不再使用该分支,可以git branch -d feature/XX 删除该分支。

如果pull或者merge的时候有冲突,需要手动改冲突,并再次add+merge(或者commit),在改动前需要查看 两个分支的区别,可以git diff branch1 branch2 来查看不同。

如果工作区的改动不想要了,那么可以git checkout – 来用head中的文件覆盖工作区的文件

fetch是把远端的feature/YY的代码拉倒本地的feature/YY上的.git/FETCH_HEAD文件中, 与git pull相比git fetch相当于是从远程获取最新版本到本地,但不会自动merge。如果需要有选择的合 并git fetch是更好的选择。效果相同时git pull将更为快捷。

stash/stash pop(apply)

stash是用来暂存工作区的代码的,就像给工作区存一个快照,在需要的时候git stash, 需要取出这个快照的内容的时候用git stash pop。

  • 使用场景: 1、写了代码但是不想要,又不想提交脏代码,但是又怕以后有用,可以git stash save message, 在需要之前的代码的时候,使用git stash pop 或git stash apply就可以把之前写的代码合并 到当前分支 2、当在本分支A写代码的时候,需要马上切换到另一个分支B去开发或者fix bug,这时可以用stash暂存 工作区,然后切换到分支B,完成分支B后切回分支A,再stash apply即可,这样可以避免很多无用的 commit 3、当你发现修改错了分支,比如你本来想修改你的分支A,结果不小心在master修改了,那么这时可以stash 一下,然后git checkout一下丢弃当前的改动,切换到分支A,再git stash pop或者git stash apply 一下,就可以把改动恢复到分支A中

  • git stash pop 和 git stash apply的区别

    • git stash pop:删除并应用最新的stash
    • git stash apply : 应用但不删除stash,而且可以指定应用某个stash
  • 查看stash:git stash list

  • 删除stash:git stash drop

  • 查看指定stash和当前工作区的diff:git stash show

rebase://TODO

代码回滚:reset,checkout,revert

  • reset: git reset HEAD~2表示撤回本地head区的两个commit,在stage区还保留,如果git status 会发现这两个提交处于stage区,待提交,这时这两个提交处于悬挂状态,下次git垃圾回收的时候会清除掉这两个 commit,此外reset还可以选择回滚的范围: –soft:只撤销head中的commit,但是保留stage和工作区的代码 –mixed:撤销head和stage的代码,保留工作区的代码 –hard:回滚所有代码 

  • revert:git revert HEAD~2 ,revert不会改变现有的提交历史,他只会撤销选定的commit更改的代码,然后重新提交一个commit来 代替以前的commit,因此不会改变commit的历史(log) 

  • checkout:checkout是把工作区转到head的heads下对应分支的文件中,因此,如果没有做git stash 直接checkout,就相当于丢弃当前工作目录中的改动,checkout

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值