学习GIT

工作以来一直使用git,日常使用ok,确实总结,今天记录一下。

1.创建库,完成一次提交:
$ mkdir learngit  
$ cd learngit  
$ git init
$ git add file1.txt
$ git add file2.txt file3.txt   
$ git commit -m "wrote a readme file"
2.查看当前工作区修改
场景1:有修改,但未提交
$ git status
  On branch master
 Changes not staged for commit:
 (use "git add <file>..." to update what will be committed)
 (use "git checkout -- <file>..." to discard changes in working directory)

modified:   readme.txt

 no changes added to commit (use "git add" and/or "git commit -a")
场景2:有修改,未已提交
 $ git status
   On branch master
   Changes to be committed:
   (use "git reset HEAD <file>..." to unstage)

  modified:   readme.txt

此时可以查看修改内容
$ git diff readme.txt 
  diff --git a/readme.txt b/readme.txt
  index 46d49bf..9247db6 100644
  --- a/readme.txt
  +++ b/readme.txt
  @@ -1,2 +1,2 @@
  -Git is a version control system.
  +Git is a distributed version control system.
场景3:修改已提交
$ git status
  On branch master
  nothing to commit (working directory clean)
3.版本回退
查看版本提交历史 git log   
查看简化历史列表 git log --pretty=oneline
以图的方式查看   git log --graph --pretty=oneline

首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交3628164…882e1e0(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。

回退版本:
$ git reset --hard HEAD^
HEAD is now at ea34578 add distributed

reset只是head只是指向commmit,版本并没有删除。

查看head指向过的提交
$ git reflog
ea34578 HEAD@{0}: reset: moving to HEAD^
3628164 HEAD@{1}: commit: append GPL
ea34578 HEAD@{2}: commit: add distributed
cb926e7 HEAD@{3}: commit (initial): wrote a readme file
版本修改
$ git reset --hard 3628164
HEAD is now at 3628164 append GPL

git revert 是生成一个新的提交来撤销某次提交,此次提交之前的commit都会被保留
git reset 是回到某次提交,提交及之前的commit都会被保留,但是此次之后的修改都会被退回到暂存区

4.工作区与暂存区

工作区:系统目录
暂存区:.git下index保存修改

比较工作区与暂存区的比较:git diff
5.不知所以
git reset HEAD readme.txt
git checkout -- readme.txt
6.分支管理
    查看分支:git branch

    创建分支:git branch <name>

    切换分支:git checkout <name>

    创建+切换分支:git checkout -b <name>

    合并某分支到当前分支:git merge <name>

    删除分支:git branch -d <name>

    暂存当前修改: git stash
    恢复暂存:git stash list -> git stash pop

    查看远程库信息: git remote -v

通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。

如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。

$ git merge --no-ff -m "merge with no-ff" dev
Merge made by the 'recursive' strategy.
 readme.txt |    1 +
 1 file changed, 1 insertion(+)

 合并过程:
 $ git log --graph --pretty=oneline --abbrev-commit
    *   7825a50 merge with no-ff
    |\
    | * 6224937 add merge
    |/
    *   59bc1cb conflict fixed
    ...
7.多人协作
查看远程库信息,使用git remote -v;

本地新建的分支如果不推送到远程,对其他人就是不可见的;

从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;

在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;

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

从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。

使用git fetch只抓取内容
8.打出标签tag
命令git push origin <tagname>可以推送一个本地标签;

命令git push origin --tags可以推送全部未推送过的本地标签;

命令git tag -d <tagname>可以删除一个本地标签;

命令git push origin :refs/tags/<tagname>可以删除一个远程标签。
9.开发模式集成场景:
分支开发模式:

1.开发创建:开发拉取各自的feature分支
2.集成合并:从主干拉取一个release分支,将所有要发布的开发分支合并release分支
3.构建部署:
4.写入基线:从release分支git tag出一个版本,作为发布版本

主干开发模式

1.主干分支:设定一个主干分支dev,
2.开发提交:所有dev都在上面提交代码
3.集成合并:从主干拉取release分支
3.构建部署:
4.写入基线:从release分支git tag出一个版本,作为发布版本

git-develop模式

1.开发创建:开发拉取各自的feature分支(集成目标:develop),合并到默认devlop分支
2.集成合并:从主干拉取release分支,合并develop分支
3.构建部署
4.写入基线:从release分支git tag出一个版本,作为发布版本
紧急修复:拉取bug分支(集成目标为master),使用master和bug分支和发布,然后合并会develop分支。

10.奇淫技巧
    1.忽略git下的文件
    2.配置命令别名
    3.git cherry-pick 某次提交
    4.git blame file 文件每行最近一次修改的版本和时间
    详见大神网站

参考

廖雪峰的Git教程
gitHub上Git项目
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值