码迷,mamicode.com
首页 > 其他好文 > 详细

git学习笔记

时间:2018-05-06 10:36:24      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:gpo   16px   远程   输出   adduser   ups   编辑   tty   serve   

 

 

http://git-scm.com/

初步配置

git config --global user.name "Your Name"
git config --global user.email "email@example.com" 

创建版本

mkdir git
cd /e/program
pwd
git init

将文件添加到仓库

git add file1.txt
git add file2.txt
git commit -m "wrote two files" 

 -m后面是本次提交的说明,commit只会提交已经add的文件,所以add的文件又再次修改的时候,commit并不会提交最新修改的。

技术分享图片

 


获取仓库最新状态

git status

当有文件被修改的时候,会有一个提示。 

技术分享图片

查看修改的具体情况

git diff test.txt 

 

版本回退

查看已经提交过的commit版本

git log

技术分享图片

如果信息太多,可以加上参数简化输出

git log --pretty=oneline

版本回退,其中HEAD^表示上一个版本,HEAD^^表示上上一个版本,HEAD~100表示前100个版本

git reset --hard HEAD^

回退后又需要回到一开始的地方(回退前的时候),在未关闭的窗口找到前面的commit id

git reset --hard id

如果窗口关闭了,找不到id,执行下面的命令,会列出你的每一次命令,前面的数字就是Id

git reflog

暂存区的理解:
暂存区是.git版本库里面,会将git add添加的文件或者文件夹放在这里面,当commit的时候,会将里面的文件分别的更新到分支里面去。

技术分享图片


撤销修改

修改了工作区的文件内容,想要丢弃修改的内容   

git checkout -- file

 

修改了工作区的文件内容,并且添加到缓存区,想要丢弃

git reset HEAD file
git checkout -- file 

  


删除文件

本地操作的文件是工作区,git仓库里面的代码是版本库
删除文件

 

git del test.txt
git commit -m "del test.txt"

 

当在工作区误删的时候,可以将版本库里面的文件恢复到工作区

git checkout -- test.txt 

远程仓库

生成密钥和公钥

ssh-keygen -t rsa -C "iamstudy@126.com"

生成的时候那个密码可不用设置
然后进github的设置--ssh keys---add ssh key
标题任意,公钥在刚刚生成的文件id_rsa.pub里面,然后添加就ok

git remote add origin git@github.com:l3m0n/test.git

其中远程库是origin
第一次将本地库的所有内容推送到远程库:

git push -u origin master 

以后的每次更新:

git push origin master 

从远程库克隆到本地

git clone git@github.com:l3m0n/test.git

分支管理

创建属于自己的开发路线,直到最后全部提交

查看分支:git branch
创建分支:git branch name
切换分支:git checkout name
创建+切换分支:git checkout -b name
合并某分支到master:git merge name
删除分支:git branch -d name


解决冲突

分支和master都有修改且修改内容不一致,这时候合并起来就会产生冲突

技术分享图片

 

 

 可以看到合并情况,找到问题点
git log --graph --pretty=oneline --abbrev-commit
修复问题后再次提交,然后删除分支
git branch -d feature1


不使用Fast forward模式合并

git merge --no-ff -m "merge with no-ff" dev
这样的合并会有历史纪录,如果不佳--no-ff就没有记录


bug分支

dev目前工作分支,master主枝,issue-101修复bug分支
快照当前工作现场
git stash
切换到master
git checkout master
创建并切换分支
git checkout -b issue-101
修改提交
git add readme.txt
git commit -m "fix bug 101"
切换到master,合并分支
git checkout master
git merge --no-ff -m "test" name
删除分支
git branch -d issue-101
切换到工作分支
git checkout dev
查看快照
git stash list
恢复原来工作现场

git stash apply
但是stash不会删除,下面删除stash
git stash drop

git stash pop
恢复并删除

如果有多个stash,查看list后选择恢复
git stash apply stash@{0}


开发新功能

创建并切换
git checkout -b feature-vulcan
添加提交后
git add vulcan.py
git commit -m "add feature vulcan"
切换到dev分支
git checkout dev
丢失一个没有被合并过的分支
git branch -D feature-vulcan


多人协作

origin是远程库,dev是本地分支
查看远程库信息
git remote
更加详细的信息
git remote -v

推送分支
git push origin dev

小伙伴clone后想要在dev上工作
git checkout -b dev origin/dev

当你和小伙伴同时推送同一文件。内容却不相同
先获取最新origin/dev提交
git pull
如果git pull失败,可能是没dev和远程链接上
git branch --set-upstream dev origin/dev
然后就是本地合并,解决冲突,再push

大致流程:

  1. 首先,可以试图用git push origin branch-name推送自己的修改;
  2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
  3. 如果合并有冲突,则解决冲突,并在本地提交;
  4. 没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!
  5. 如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name。

标签操作

命令git tag name用于新建一个标签,默认为HEAD,也可以指定一个commit id;
-a tagname -m "blablabla..."可以指定标签信息;
-s tagname -m "blablabla..."可以用PGP签名标签;
命令git tag可以查看所有标签;

命令git push origin tagname可以推送一个本地标签;
命令git push origin --tags可以推送全部未推送过的本地标签;
命令git tag -d tagname可以删除一个本地标签;
命令git push origin :refs/tags/tagname可以删除一个远程标签。


配置别名

将status别名成st
git config --global alias.st status


搭建git服务器

sudo apt-get install git
sudo adduser git
sudo git init --bare sample.git
sudo chown -R git:git sample.git

编辑/etc/passwd文件 完成。找到类似下面的一行: git:x:1001:1001:,,,:/home/git:/bin/bash
改为:
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

克隆远程仓库
git clone git@server:/srv/sample.git

git学习笔记

标签:gpo   16px   远程   输出   adduser   ups   编辑   tty   serve   

原文地址:https://www.cnblogs.com/Tu9oh0st/p/8997002.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!