版本工具-常用 Git 命令

Git之所以是革命性的,就是因为它能同时给你这两方面的好处。你可以在原型开发过程中经常备份变动,而搞定后只需要交付一个干净的版本历史。

大原則
  1. 记住,在 Git 中任何已提交的东西几乎总是可以恢复的。 甚至那些被删除的分支中的提交或使用–amend选项覆盖的提交也可以恢复(阅读数据恢复了解数据恢复)。然而,任何你未提交的东西丢失后很可能再也找不到了。
  1. Git 保存的不是文件的变化或者差异,而是一系列不同时刻的文件快照。

工作逻辑图如下

git工作邏輯圖

几个专用名词的译名如下

  1. Workspace:工作区
  2. Index / Stage:暂存区
  3. Repository:本地仓库
  4. Remote:远程仓库

常用命令


1.添加与提交到本地仓库

git add  <文件名列表,以空格分割> or  git add *
git commit -m "提交说明信息"

//或者合并成:
git commit -am "提交说明信息"

2.将这些改动提交到远端仓库

git push origin master

3.将这些改动拉到本地

原则:先拉后推

git pull

git pull origin master ---在分支上将主分支的代码迁出到本地

4.分支

git checkout  分支名【分支名可以带文件夹名】  ---切换分支

git checkout -b  分支名 【分支名可以带文件夹名】 ---创建并切换到新分支

git branch -d   分支名 【分支名可以带文件夹名】 ---删除本地分支

git push --delete origin 分支名 【分支名可以带文件夹名】  ---删除远程分支

git branch -r   --查看远程分支

git branch    --列出本地所有的分支

git branch -av  --列出本地及远程所有分支,并显示最新状态

git merge ***

5.撤销

// 对暂存区的取消:
git reset --hard  【HEAD/版本号】 回退到版本号所指定的版本,之前的改动不保留
git reset --soft  【HEAD/版本号】 回退到版本号所指定的版本,之前的改动保留,后续如果需要这些改动,可再次commit

// 撤销对本地文件的修改(用已经提交到暂存区的文件覆盖本地同名文件,相当于discard changes):
git checkout -- CONTRIBUTING.md  (文件名)

根据–soft --mixed --hard,会对working tree和index和HEAD进行重置:

  1. git reset --mixed:此为默认方式,不带任何参数的git
    reset,即时这种方式,它回退到某个版本,只保留源码,回退commit和index信息
  2. git reset --soft:回退到某个版本,只回退了commit的信息,不会恢复到index
    file一级。如果还要提交,直接commit即可
  3. git reset --hard:彻底回退到某个版本,本地的源码也会变为上一个版本的内容
//然後
git push origin HEAD --force

6.解决文件中冲突的的部分

打开冲突的文件,会看到类似如下的内容:
这里写图片描述

git冲突内容

其中Updated upstream 和=====之间的内容就是pull下来的内容,====和stashed
changes之间的内容就是本地修改的内容。碰到这种情况,git也不知道哪行内容是需要的,所以要自行确定需要的内容。解决完成之后,就可以正常的提交了。

7.合并几次提交的修改

  1. 在push到主分支之前,先将几次commit合并(首先确保所有改动已commit)
//这里的HEAD~3代表合并前3次commit
git rebase -i HEAD~3
//或者这样写,其中commit哈希值是最远的一次提交,这次提交之后的提交都会被合并
git rebase -i "commit哈希值"^
  1. 第一个pick之后的其他行改成s,按esc退出vim的编辑模式,输入:wq提交
  2. 进入一个界面,保留第一条注释,按i可编辑第一条注释,后续的注释删除,按esc退出vim的编辑模式,输入:wq提交
  3. rebase完成
  4. 如果出错
git rebase --abort

6.如果提交已经push到远程,想合并远程的修改

//-f是force的意思,意思是强制刷新
git push -f

參考:

  1. 使用git rebase合并多次commit
  1. 聊下 git rebase -i

8.删除远程分支上的某次commit

与上面的类似通过以下命令打开记录

git rebase -i "0fb383e7772813594347436c395eeac6717a0b7b"^

不要的分支就删掉,然后也是git push -f

9.cherry-pick——将A分支中的某个提交放到B分支

//先在A分支获取commit哈希值
git log 
commit 38361a68138140827b31b72f8bbfd88b3705d77a
Author: Siwei Shen <siwei.shen@focusbeijing.com>
Date:   Sat Dec 10 00:09:44 2011 +0800

//切换到B分支
git checkout old_cc
//将A分支获取的commit哈希值贴给cherry-pick
$ git cherry-pick 38361a68

10.打版本标签

//列出所有版本
git tag
//从某一版本中恢复
git checkout v0.12
//新建标签
git tag -a v0.12 -m 'minfang version v0.12'
//tag提交到远程
git push origin --tags

11.回退版本

git reset –hard commitId 
git push -f

12.关于修改文件夹权限

加入-R 参数,就可以将读写权限传递给子文件夹。例如:

chmod -R  777  /home/mypackage

那么mypackage 文件夹和它下面的所有子文件夹的属性都变成了777。777是读、写、执行权限…

13.主从分支开发操作流程

一般分支的作用是为了不影响主线而进行的独立开发,所以在分支上开发好之后将其合并到主分支之后,可将该分支删除或保留。

1.切换到分支

git checkout【branchname】

2.将修改提交到分支上

git commit & git push

3.切换到master分支

git checkout master

4.更新master代码

git pull

5.执行合并操作

git merge 【branchname】

如果有冲突,会提示你,调用git status查看冲突文件。解决冲突,然后调用git add或git rm将解决后的文件暂存。

6.所有冲突解决后,git commit & git push 提交代码到主分支上。

查看各个分支当前所指的对象:$git log --oneline --decorate

将会显示:

f30ab (HEAD, master, testing) add feature #32 - ability to add new

34ac2 fixed bug #1328 - stack overflow under certain conditions

98ca9 initial commit of my project


参考文章:
Git查看、删除、重命名远程分支和tag

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值