学习GIT

来源:互联网 发布:无尽的传说2 mac 破解 编辑:程序博客网 时间:2024/06/11 04:40

工作以来一直使用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 reflogea34578 HEAD@{0}: reset: moving to HEAD^3628164 HEAD@{1}: commit: append GPLea34578 HEAD@{2}: commit: add distributedcb926e7 HEAD@{3}: commit (initial): wrote a readme file版本修改$ git reset --hard 3628164HEAD is now at 3628164 append GPL

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

4.工作区与暂存区

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

比较工作区与暂存区的比较:git diff

5.不知所以

git reset HEAD readme.txtgit 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" devMerge 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
原创粉丝点击