git 实战

先来个分区介绍

设置 git config--global 
设置贡献者 git config --global  user.name 和 git config --global user.email
查看所有配置项 git config --list
设置公钥 ssh-keygen -t rsa -C “您的邮箱地址” 在c相对应的路劲找到用记事本打开,粘贴到github上才能git clone

1、放弃本地的所有修改,强制更新为版本上的代码

git fetch --all  
git reset --hard origin/master 
git pull

2、各种撤销操作

2-1、撤销本地修改、未add (会恢复到修改之前)

git checkout -- <filename> #撤销单个文件
git checkout .   #撤销本地所有修改   √
git reset --hard <filename> #撤销指定文件本地代码到上个提交的版本
git reset --hard #撤销本地代码到上个提交的版本  √
附:reset会回退、checkout是放弃修改

2-2、撤销git add操作 

①先执行git reset  ②再执行git checkout -- <filename> #撤销单个文件 (会恢复到本地文件修改之前)
①先执行git reset  ②再git checkout .   #撤销本地所有修改(会恢复到本地文件修改之前)
git reset --hard <file> #撤销本地代码到上个提交的版本(会恢复到本地文件修改之前)
git reset --hard #撤销本地代码到上个提交的版本(会恢复到本地文件修改之前)

2-3、撤销git commit操作

git reset --hard origin/masterName (直接回退到远程最新版本)
git reset --hard HEAD~1 (会恢复上一个版本)
git reset --hard HEAD^  上个版本回退
git reset --hard HEAD~N 多个版本回退,n是数字 代表要回退的次数
git reset --hard <commit_id> 指定版本回退


git commit --amend <files>   覆盖上一次的提交

2-4、撤销git push操作

git reset --hard HEAD  (git reset --hard <tag/branch/commit id>)

  • git reset --hard HEAD^  或
  • git reset --hard "HEAD^"  或
  • git reset --hard HEAD^^   或
  • git reset --hard HEAD~ 或 
  • git reset --hard HEAD~1

(^可能git会出现需要填写more信息,因为工具识别^为空格)另外:git reset 后,可能因为权限的问题无法强行git push --force。但是难道如果程序员误操作提交了一次错误的东西到master就没法回滚了(指不需要gitlab管理员来回滚)

git revert <commit_id>    会生成一个新的commit

或者 

git reset --hard HEAD^
git push -f

附:

git reset 参数 (<commit_id>从git log中取,取前7位即可,git reflog - 10 查看更简洁)
git reset --soft <commit_id>  #程度最轻,仅仅是把版本库的重置,暂存区和工作区没做任何修改。  【返回到某个节点。保留修改】
git reset --mixed <commit-id>  (默认情况)程度中,也是默认操作,它把版本区和暂存区都重置了,但是工作区没有重置。
git reset --hard <commit_id>   程度最强,三个区全部重置了 【返回到某个节点,不保留修改】

git revert 与 git reset 的区别
git reset是指HEAD指针,重新指向某个commit-id的位置。并且它后续的commit-id会被删除。git revert会产生一条新的commit,原有的commit-log并不会发生任何变化。
 

总结:四个阶段都可以使用git reset 

更多撤销参考有关文档:

checkout
commit
rebase
reflog
reset
revert
rm

3、设置大小写敏感

git config core.ignorecase false

4、分支操作

创建分支 git branch branchname 

查看
查看所有分支 git branch -a  
查看远程分支 git branch -r  
查看本地分支 git branch


切换分支     git checkout branchname 


重命名分支   git branch -m | -M oldbranch newbranch  

删除本地分支
删除branchname分支           git branch -d | -D branchname 

删除远程分支(其中一条)
git branch -d -r origin/branchname   这个删除以后还要推送
git push origin :branchname  【推荐】  推送空分支到远程(删除远程分支另一种实现)
git push origin --delete branchname 【推荐】


获取远端分支信息,可以查看本地和远端不同  git remote show origin
同步远程分支(远程以上删除,但是本地还可以看到用这个命令)git remote prune origin


推送分支  git push origin branchname 


查看当前分支的远程地址  git remote -v

关联分支 git remote add origin url..   关联后可能还是不能推送和拉取需要手动建立追踪关系 (git branch --set-upstream branchaName origin/branchName),如果还是不能提交提示“error merging: refusing to merge unrelated histories” 尝试(写git pull origin master --allow-unrelated-histories需要知道,我们的源可以是本地的路径)

远程仓库地址变了,本地仓库地址也相应的修改 git remote set-url origin <新的git url>

基于指定分支创建子分支 git checkout <remote>/<branch> -b <branch>

5、git stash

查看
git stash list  

新建
git stash save "备注的内容"   保存当前未commit的代码并添加备注
在原分支 git stash save -a "messeag",(-a 会把忽略的文件都添加进去)  git stash -u

恢复
git stash apply  应用最近一次的stash
git stash pop 恢复最近一次,随后删除该记录  
git stash pop stash@{id} 或者 git stash apply stash@{id}即可
原来git stash pop stash@{id}命令会在执行后将对应的stash id 从stash list里删除,
而 git stash apply stash@{id} 命令则会继续保存stash id。

删除
git stash drop 删除最近的一次stash
git stash drop <stash@{id}>
git  stash clear 是清除所有stash

6、换行符的修改

git config --global core.autocrlf false  参考:http://blog.csdn.net/ccfxue/article/details/52625806

7、用a分支的test.js文件或者文件夹 覆盖 b分支的test.js或文件夹

首先切换到b分支上 ,然后git checkout  branchB  xxx/xxx/test.js              更多参考:https://git-scm.com/docs/git-checkout

运行 git checkout -m [path],可以知道哪边代表 ours ,哪边代表 theirs
然后使用命令 git checkout --theris 1.txt 选择 test 分支 

Git合并特定commits 到另一个分支 http://blog.csdn.net/ybdesire/article/details/42145597
提取/合并某分支的部分文件     http://www.cnblogs.com/xulingfeng/p/5864041.html

8、忽略提交文件

已经到版本库的文件 

在.gitignore 添加需要忽略的文件或者文件夹
git rm -r --cached ‘文件夹或者文件路劲’ #删除追踪状态
git add .
git commit -m "fixed untracked files"

仅在自己本地忽略
git update-index --assume-unchanged xxx/xx.txt

恢复提交已忽略的文件git update-index --no-assume-unchanged xxx/xx.txt

9、git merge高级合并

①(master)git merge --squash dev ##合并压缩,将dev分支上的commit压缩为一条 (这样不会把dev上所有修改的commit都提交上去)
②(master)git merge --ff dev #  ff 就是 fast forward的意思 将不会创造一个新的commit节点。【默认】情况下,git-merge采用fast-forward模式。
③(master)git merge --no-ff dev #  即使可以使用fast-forward模式,【也要创建一个新的合并commit节点】【并强制保留develop分支的开发记录】(而fast-forward的话则是直接合并,看不出之前Branch的任何记录)。这对于以后代码进行分析特别有用
所以 --no-ff  和 --squash 是对立的不能同时执行

参考:

Git - Reference
Git - Book
git-merge完全解析 - 简书

10、Git删除本地分支以及重新拉取远程分支到本地

a、删除本地分支

  • git checkout master (首先切换到本地一个其他的分支,这里我切换到本地master)
  • git branch -D dev (删除本地分支dev    )

b、重新拉取远程分支dev到本地

  • git fetch origin dev (还是在master分支下进行操作,拉取远程分支dev到本地)
  • git checkout -b dev origin/dev(还是在master分支下进行操作,在本地新建dev分支)
  • git pull origin dev(切换到本地dev分支,把dev所有内容拉取到本地)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值