Git记录

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wh2691259/article/details/53959377

好久没写博客了,自己变得懒了>_<,以前虽然用过Git但是理解没那么深刻,所以自己抽了两天时间仔细学习并实践了下。结果发现还是实践给自己的回报很多,在这里记录下…

推荐下面两篇文章:

廖雪峰的官方网站:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

阿里云搭建自己的git服务器:http://www.tangshuang.net/1693.html

自己实践遇到的问题的解决方法(谷歌出来的,百度是真不好找答案,这里抱怨下)

1.远程推送(git push)的时候,有问题
权限导致的,解决方式在git对应的文件夹给权限http://www.cnblogs.com/abeen/archive/2010/06/17/1759496.html

2.git push成功,但是远程服务器啥都没变
在这里先先提一下 远程仓库创建的时候有个可选参数--bare 一般要加上,如 git init --bare testgit.git,一般是这种方式 ;还有一种git init testnobaregit.git

git远程仓库创建的两种方式

上图中的testgit.git 即是带--bare参数,testnobaregit.git就是不带--bare参数,可以明显看到两者的区别

3.对git clone [email protected]:/data/www/git/testgit.git的理解错误(这里瞎写的外网ip)

很明显这是克隆一份远程源码,后面的@之前的git代表的是远程服务器的git用户,如果远程是root就写成root@; 8.8.8.8:后面跟的是在服务器上的实际路径。在这里说下,在廖雪峰git教程中搭建Git服务器一节中,我耽误些时间,因为在第三步,创建证书登录:收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个自己(用root用户登录)傻呵呵的去root家目录下的.ssh/authorized_keys,接着去吧自己本地电脑上的.ssh/id_rsa.pub打开,发现好多行,然后百度一步一步更往误区走,这里不说了,全是泪。其实很简单,因为教程中少写一个步骤 自己在创建git用户后,还有几步操作cd /home/git; mkdir .ssh;touch authorized_keys,接着上面复制的东西,粘贴进来就行

扫描二维码关注公众号,回复: 3844729 查看本文章

自己的理解

git命令分三块管理,即是 文件管理,版本管理, 分支管理,远程仓库管理(不一定对).git本地分为工作区和暂存区

1.文件管理的命令

git add <file>
git status
git commit -m "self message" // 
/** 假设有一种情况,你本地取完代码,修改 了readme.txt文件,此时并没有git add readme.tx(即所说的还没提交到暂存区),突然你发现你不想修改这个文件,想回复原来的状态,怎么办呢? 没事,你可以运行下面的命令 */
git checkout -- readme.txt // 可以丢弃工作区readme.txt的修改
/** 假设有一种情况,你本地取完代码,修改 了readme.txt文件,此时你又有git add readme.tx(即所说的提交到了暂存区),突然你发现你不想提交这个文件,想回复版本中的状态,怎么办呢? 没事,你可以运行下面的命令 */
git reset HEAD readme.txt // 这里对应修改readme.txt文件名就行
/** 删除了一个git中的文件,即运行了rm readme.txt,如果git提交,如何办呢? 按下面的命令就行 */
git rm readme.txt
git commit -m "remove readme.txt"
// 如果是发现删除了的话 怎么办呢?如上面一样,没运行git rm之前的话,只要运行git checkout -- readme.txt 运行了git rm之后的话,只需git reset --hard HEAD

2.版本管理

git log
git log --pretty=oneline
git log --graph --pretty=oneline --abbrev-commit
git reset --hard HEAD^
git reset --hard 3628164 // 3628164指的是commit id
/** 这里假设代码现在已经是版本A->B->C->D->E,你通过上面方式回退到了D,但是第二天你想重新到E,但是这时你git log并不能看到E的commit id,这怎么办呢?没事,有下面的命令。找到对应的commit id就可以reset 回去 */
git reflog 
//上面会输出
//$ 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

3.分支管理

一般是master发线上版本, dev进行开发迭代

git checkout -b dev //创建dev分支,然后切换到dev分支,相当于git branch dev;git checkout dev
git branch  //查看所有分支和当前分支
git checkout master //切换到master
git merge dev //合并dev分支,这种是默认的FF(Fast-Forward)模式
git branch -d dev //删除dev分支,注意这个-d命令实在merge以后才好使,如果实在merge之前想删除的话yinga该用-D 
/** 用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息,master提交路线图上看不到。如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息 */
git merge --no-ff -m "merge with no-ff" dev

/** 假设有一种情况:当你接到一个修复一个代号101的bug的任务时,很自然地,你想创建一个分支issue-101来修复它,但是,等等,当前正在dev上进行的工作还没有提交。并不是你不想提交,而是工作只进行到一半,还没法提交,预计完成还需1天时间。但是,必须在两个小时内修复该bug,怎么办? 木有问题,有git stash命令,下面的一系列命令,模拟所说的业务 */
git stash //储存当时状态
git checkout master
git checkout -b issue-101
git add readme.txt 
git commit -m "fix bug 101"
git checkout master
git merge --no-ff -m "merged bug fix 101" issue-101 //merge bug分支
git checkout dev //切换回dev
git status //工作区是干净的
git stash list  //可以看到stash@{0}: WIP on dev: 6224937 add merge
git stash pop //这里说明下,可以用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;git stash pop不需要drop

/** 间隔线 */
git branch -D <name>  //要丢弃一个没有被合并过的分支

4.远程仓库管理

/** 当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin */

git remote //输出origin
git remote -v //显示更详细的信息origin  [email protected]:michaelliao/learngit.git (fetch);origin  [email protected]:michaelliao/learngit.git (push)

git push origin master //推送分支,就是把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支

/** 如果要推送其他分支如dev */
git push origin dev

git checkout -b dev origin/dev // dev对应远程dev分支

/** 如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建 */
git branch --set-upstream dev origin/dev //指定本地dev分支与远程origin/dev分支的链接

git pull


git init testnobaregit.git

git init --bare testgit.git // 远程服务器推荐这种

git忽略某些文件或者文件夹

在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。.gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理!

猜你喜欢

转载自blog.csdn.net/wh2691259/article/details/53959377
今日推荐