Git和GitHub

git简单命令

git config --global user.email "自己邮箱"
git config --global user.name "自己名字"

git init 初始化,创建版本仓库

不要使用windows的记事本来记录信息,最好用notepad++,设置默认编码为UTF-8

git add 文件名  单个文件管理
git add . 全部管理起来
git commit -m ‘创建第一个版本说明’

git diff 查看修改内容

git status 查看当前文件夹状态

git log 查看提交历史,方便回退到之前版本

git log --pretty=oneline 一行显示日志

git reflog 查看命令历史,方便回滚到未来版本

git reset --hard 版本号 回滚到上一个版本

git checkout -- file  把文件在工作区的修改全部撤销 (就是让这个文件回到最近一次git commit或git add时的状态。)

1.一种是file自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

2.一种是file已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

当我们在本地工作区删除了一个文件时候,工作区和版本库就不一致了,git status会显示文件被删除,如果的确并确定及肯定是无用要删除的文件,就执行git rm file 删除和git commit 提交

如果是误删 git checkout --file

本地Git推到GitHub

本地Git库和GitHub是通过ssh加密进行传输

第一步:确定本地是否有ssh目录,以自己windows笔记本为例,在C:Usersorion.ssh可以找到,然后确认里边是否有id_rsa(私钥:不可泄露给别人)和id_rsa.pub(公钥:可以告诉别人)这两个文件

如果没有.ssh或者那两个文件  打开Git Bash创建ssh,命令如下:ssh-keygen -t rsa -C "youremail@example.com",直接一路回车用默认即可

第二步:登陆GitHub,点击 Settings===》SSH and GPG keys===》New SSH key  填写标题并将id_rsa.pub内容填入下面===》Add SSH key 就完成秘钥添加

将本地Git和GitHub做远程同步

登陆GitHub右上角New repository填写Respository name 然后Create respository,完成创建一个Git库

现在将本地的Git库推送到GitHub

git remote add origin git@github.com:DemoRun/BBS.git

DemoRun为GitHub的账户名   BBS为本地库

添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。

下一步,将本地库的所有内容推送到远程库上:

git push -u origin master

推送成功后,可以在GitHub页面中看到远程库的内容已经和本地一模一样了

从现在起,只要本地做了提交,就可以通过命令:git push origin master 把本地的master分支的最新修改推送到GitHub。

克隆一个远程库到本地

首先创建一个远程库

将远程服务器克隆到本地

git clone git@github.com:DemoRun/Test.git       DemoRun为GitHub账户名/Test.git为远程项目名

分支

创建一个dev分支,然后切换到dev分支

$ git checkout -b dev
Switched to a new branch 'dev'

-b 相当于创建并切换到分支,相当于以下两条命令

$ git branch dev
$ git checkout dev
Switched to branch 'dev'  

查看分支(当前分支会有*号)

git branch
* dev
  master

在分支里边添加一个文件并提交,然后再切换到master分支(这时候在master下会看不到添加的文件),我们需要合并分支

$ git merge dev
Updating d8bf1a4..de568bc
Fast-forward
 new5.txt | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 new5.txt  

这时候就能够在master分支上看到在dev新添加的文件了,合并完成后,就可以放心删除dev分支了(强制删除用-D)

$ git branch -d dev
Deleted branch dev (was de568bc).  

工作原理如图:

解决合并分支冲突

首先可以创建个新分支,并且在里边做文本并提交。然后切换到master上在文本上再次做修改,再次提交,这时候就会出现冲突问题。

$ git add new.txt 
$ git commit -m "& simple"
[master 5dc6824] & simple
 1 file changed, 1 insertion(+), 1 deletion(-)

这是此时的状态,两次修改无法合并统一,git status可以看到文件存在冲突

查看修改的文件new.txt  在里边Git通过<<<<<,======,>>>>>>会标记不同分支内容,将修改的部分手动修改给他进行统一,再次提交解决冲突问题。

这是修复后的分支状态,查看日志也可以看到合并情况,最后删除分支。

普通模式进行合并 

以上都是用Fast forward进行的合并,看不出曾经做过合并,这时候使用普通合并能够看到合并后的历史。使用--no-ff参数实现普通合并

git merge --no-ff -m "merge with no-ff" dev

BUG分支处理  

当出现bug需要处理,但是当前dev工作还没有提交时候,使用stash功能,将当前工作现场“存储”,以后恢复后再继续工作

$ git stash
Saved working directory and index state WIP on dev: eb083b3 1

假定要从master分支上修改,就从master上创建分支:

$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 12 commits.
  (use "git push" to publish your local commits)

orion@DESKTOP-UCUQ02V MINGW64 /d/GitHub/Test (master)
$ git checkout -b issue-01
Switched to a new branch 'issue-01'  

 修复完bug进行提交操作

orion@DESKTOP-UCUQ02V MINGW64 /d/GitHub/Test (issue-01)
$ git add .

orion@DESKTOP-UCUQ02V MINGW64 /d/GitHub/Test (issue-01)
$ git commit -m 'fix bug01'
[issue-01 d151370] fix bug01
 1 file changed, 1 insertion(+), 1 deletion(-)  

修复完成后切换到master目录下,进行合并,最后删除issue-01

orion@DESKTOP-UCUQ02V MINGW64 /d/GitHub/Test (master)
$ git merge --no-ff -m 'merge fix bug 01' issue-01
Merge made by the 'recursive' strategy.
 new5.txt | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
$ git branch -d issue-01

这时候会到dev继续未完成工作

使用git stash list查看

$ git stash list
stash@{0}: WIP on dev: f52c633 add merge  

恢复工作区:

1.使用git stash apply stash@{0}恢复,然后使用git stash pop来删除list列表内容

2.使用git stash pop,恢复的同时把stash内容一并删除

多人协作

查看远程库信息:git remote,默认是origin

$ git remote
origin  

使用git remote -v显示详细信息:一般可以看到抓取和推送的origin地址,除非没有权限,看不到push地址

$ git remote -v
origin  git@github.com:DemoRun/Test.git (fetch)
origin  git@github.com:DemoRun/Test.git (push)  

 推送分支,将本地分支推送到远程库,要指定本地分支

$ git push origin master  

当多人一起开发时候会推送不同版本的分支,这时候如果你也推送分支,会提示错误,有冲突,这时候需要先git pull把最新提交的从origin/dev抓取下来,在进行本地合并,解决冲突在推送:

$ git pull
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.

    git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

    git branch --set-upstream-to=origin/<branch> dev  

如果提示以上  no tracking information 则证明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>

如果合并有冲突,解决冲突,并在本地提交

解决掉冲突或者没有冲突后再git push origin <branch-name>推送就能成功

$ git push origin dev
Counting objects: 6, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (6/6), 621 bytes | 621.00 KiB/s, done.
Total 6 (delta 0), reused 0 (delta 0)
To github.com:michaelliao/learngit.git
   7a5e5dd..57c53ab  dev -> dev

  

使用rebase将提交历史分支线整理为一条直线

git rebase

git log

git log --pretty=oneline --abbrev-commit

  

标签管理

可以给分支打上标签,方便查看(标签与commit是挂钩的)

在Git中找到需要打标签的分支,使用git tag <name>打上标签,还可以创建带描述的标签用 -a 指定标签名,-m 指定描述信息,同时也可以对之前历史版本做标签,在后边加上版本号

$ git tag v1.0

$ git tag -a v0.1 -m "version 0.1 released" 1094adb  

查看标签和查看标签描述

$ git tag

$ git show <tagname>  tagname为自己之前定的版本号 如v1.0  

推送标签到远程

$ git push origin <tagname>   tagname为版本号

$ git push origin --tags   一次性推送所有标签到远程  

删除标签

$ git tag -d v0.1        删除本地标签

$ git push origin :refs/tags/v0.9        删除远程标签(先删除本地标签)

 

 

原文地址:https://www.cnblogs.com/CrazyDemo/p/10613574.html