Git是一个开源的分布式版本控制系统,能够有效、高速的处理从很小到很是大的项目版本管理。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。html
我的理解:linux
在linux上安装gitgithub
github适合我的使用,这里我只讲述链接远程仓库的两种方式。vim
第一种:HTTPS方式windows
第二种:SSH方式,对于初学者,不知道ssh在哪里,个人在C:\Users\asus.ssh,找到id_rsa.pub,以记事本的方式打开复制,登陆到本身的github,点击右上角的头像,再点击Settings,找到SSH and GPK keys 点击 ,右上角有个New SSH key 的按钮点击,随便填一个Title,再把你刚才复制的东西粘贴到Key框里,而后点击Add SSH key,就能够用SSH克隆项目了。 (若是找不到.ssh,在计算机里搜索)缓存
git config --global user.name stefan
git config --global user.email 502681863@qq.com
复制代码
这样你提交的远程分支就显示你的信息了。bash
固然你也能够找到git的配置文件.gitconfig,进行修改。个人在C:\Users\asus下面,若是找不到能够搜索文件名.gitconfig。服务器
个人以记事本打开是这样的:app
[user]
name = Stefan
email = 502681863@qq.com
signingkey = stefan0712
[credential]
helper = manager
[filter "lfs"]
clean = git-lfs clean -- %f
smudge = git-lfs smudge -- %f
process = git-lfs filter-process
required = true
[color]
ui = true
[alias]
st = status
cm = commit -m
ck = checkout
plo = pull origin
ps = push
a =add .
复制代码
刚才以命令设置的name和email都在这个文件里。
步骤:
步骤:
git status
git add .
git commit -m "修改"
git push(这里是直接能够push的,由于把远程master也克隆下来了)
复制代码
多人协做和我的协做的最大区别是,多我的在一个分支下提交,这就避免不了有冲突。我的使用的时候应该是几乎不会出现冲突。
多人协做步骤:
git checkout dev(切换到dev分支)
git status
git add .
git commit -m "修改"
git pull origin dev
git push
git checkout –b dev_xfy(建立并切换到dev_xfy分支下)
git checkout dev
git merge dev_xfy(合并dev_xfy到dev)
git pull origin dev
git push
复制代码
当两个分支在同一个文件的同一个位置作了修改时,两者合并时会出现冲突,查看冲突,留下正确的修改,从新 git add b.txt git commit -m'冲突已解决'。
其实解决冲突也很简单,当冲突出现时,git status 会告诉你哪些文件有冲突(显示红色的文件),在项目中找到相应的文件 看到相似的
<<<<<<< HEAD
Creating a new branch is quick & simple.
=======
Creating a new branch is quick AND simple.
>>>>>>> dev_xfy
复制代码
Git用<<<<<<<,=======,>>>>>>>标记出不一样分支的内容,咱们把这些标记删掉,留下正确的代码就能够了。
为何要使用码云呢,由于码云是中文的,而且它更适合多人协做,一个组织的管理。
一样的使用方法和github很相似,首先得注册一个码云帐号。接下来就是配置SSH,和github过程基本同样。
mkdir: XX (建立一个空目录 XX指目录名)
  pwd: 显示当前目录的路径。
  git init 把当前的目录变成能够管理的git仓库,生成隐藏.git文件。
  git add XX 把xx文件添加到暂存区去。
  git commit –m “XX” 提交文件 –m 后面的是注释。
  git status 查看仓库状态
  git diff XX 查看XX文件修改了那些内容
  git log 查看历史记录
  git reset --hard HEAD^ 或者 git reset --hard HEAD~ 回退到上一个版本
  (若是想回退到100个版本,使用git reset –hard HEAD~100 )
  cat XX 查看XX文件内容
  git reflog 查看历史记录的版本号id
  git checkout -- XX 把XX文件在工做区的修改所有撤销。
  git rm XX 删除XX文件
  git remote add origin https://github.com/StefanPython/demo.git 关联一个远程库
  git push –u(第一次要用-u 之后不须要) origin master 把当前master分支推送到远程库
  git clone https://github.com/tugenhua0707/testgit 从远程库中克隆
  git checkout –b dev 建立dev分支 并切换到dev分支上
  git branch 查看当前全部的分支
  git checkout master 切换回master分支
git branch -m newname 修改当在分支
git branch -m oldname newname 修改其余分支名字
  git merge dev 在当前的分支上合并dev分支
  git branch –d dev 删除dev分支
  git branch name 建立分支
  git stash 把当前的工做隐藏起来 等之后恢复现场后继续工做
  git stash list 查看全部被隐藏的文件列表
  git stash apply 恢复被隐藏的文件,可是内容不删除
  git stash drop 删除文件
  git stash pop 恢复文件的同时 也删除文件
  git remote 查看远程库的信息
  git remote –v 查看远程库的详细信息
  git push origin master Git会把master分支推送到远程库对应的远程分支上
git branch --merged显示已经所有合并到当前分支的分支
git branch --no-merged显示没有合并到当前分支的分支
若是要丢弃一个没有被合并过的分支,能够经过git branch -D <name>强行删除。
复制代码
查看日志:
git log
有更好的格式 git log --pretty=oneline
查看全部操做日志git reflog
版本回退:
git reset --hard head^ 回到上一个版本
git reset --hard 版本号 想回到的版本号
得到版本号的命令 git reflog
撤销上一次的修改(未提交的而且是在缓存区的):
git checkout -- 文件名 在暂存区修改文件未提交,可用此命令撤销当前未提交的修改,若是有多个文件修改须要撤销 git checkout -- .
git reset --hard head 定位到当前提交状态指针,当一个暂存区文件修改后未提交时等同于git checkout -- 文件名
注意:命令git checkout -- readme.txt 中的 -- 很重要,若是没有 -- 的话,那么命令变成建立分支了。
只要没有commit均可以还原
链接远程仓库:
git remote add origin1 https://github.com/xfy007/gitsecond.git 添加测试用的远端仓库
git push -u origin1 master 每次咱们要提交代码到服务器上时,都会使用到git push。git push命令会有两个参数,远端仓库的名字,以及分支的名字
因为远程库是空的,咱们第一次推送master分支时,加上了 –u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在之后的推送或者拉取时就能够简化命令。经后可直接git push
从远程仓库克隆:
git clone https://github.com/xfy007/gitsecond.git
总结建立与合并分支命令以下:
   查看分支:git branch
   建立分支:git branch name
   切换分支:git checkout name
   建立+切换分支:git checkout –b name
   合并某分支到当前分支:git merge name
   删除分支:git branch –d name
保存工做现场:
当一个分支上的工做还没完成,不能提交时,可是有一个bug须要我再主分支上新建一个分支去解决,因此用到
git stash 来保存工做现场
git status 查看没有未提交的工做
要恢复工做现场 方法一:git stash pop (恢复并删除stash内容)法二:git stash apply(恢复) , git stash drop(一个个删除)
查看SSH公钥的相关命令:
ssh-keygen 从新生成SSH公钥
cd ~/.ssh 切换到.ssh目录下
ll -a 查看.ssh下有哪些文件
cat ~/.ssh/id_rsa.pub 查看ssh key
复制代码
注:命令无须强记,多使用,就会熟练。
每次输那么长的命令,感受效率很低,也很麻烦。能够把这些长命令设置别名。
如: git status 设置成 git st
git add . 设置成git a
git commit -m 设置成 git cm
有命令修改别名可是一个一个修改好麻烦,你能够再次找到.gitconfig文件,打开,找到[alias]标签,以下
[alias]
st = status
cm = commit -m
ck = checkout
plo = pull origin
ps = push
a =add .
复制代码
照这个样子修改就好了。
能够从git里打开.gitconfig文件 命令以下
cd
cat .gitconfig
vim .gitconfig (进入vim编辑器)
在英文输入法下按i,进入输入模式,修改完成后,在英文输入法下点ESC,在点shift+:底部就会出现一个:,输入wq,就保存退出了
再经过cat .gitconfig查看是否修改
复制代码
将一个文件夹经过git init 设置成一个git能够管理的文件夹时,这个文件夹里的内容就是工做区。
暂存区,叫stage 或者 index ,是用来暂时存放工做区中修改的内容; 能够理解为一个中转站
经过git init 会生成一个隐藏的文件.git,这个,git里的东西就是版本库
master是主分支,当咱们git init后,并不会马上产生master, 而是咱们添加了一个文件,并git add .,git commit后, 这时咱们查看分支状况, 即可以看到master分支了。(分支都存放在.git/head/refs目录下)
HEAD是一个引用,引用的是当前的分支, 若是当前处于master分支,那么HEAD就会指向master。
注:对三个区(工做区,暂存区、版本库)有影响的几个命令
git add 当咱们使用git add 指令时,就是将对应修改的文件添加到暂存区中
这时,暂存区中的目录树被更新。
git commit 咱们使用git commit指令,便会将暂存区中作出的修改提交到版本库中
这时master指向的分支被更新。
git reset HEAD 当使用git reset HEAD 指令时,版本库的内容会回退到暂存区。
git checkout --file 使用git checkout --file时,是将工做区指定修改的文件被暂存区的内容覆盖(消除全部工做区进行的改动),这个动做很危险。
git checkout . 也是如此,该指令是将全部修改的文件被暂存区的内容覆盖。
git rm --cached 使用git rm --cached file时,直接从暂存区进行文件的删除,不会影响工做区的内容。
git checkout HEAD --file git checkout HEAD --flie 时,会将版本库中的对应的文件内容直接替换工做区和暂存区中的该文件。
这个动做也是危险的,一样git checkout HEAD . 是将全部的内容替换工做区和暂存区的文件。
复制代码
查看三个分区的区别:
git diff 查看工做区和暂存区的区别
git diff --cached 查看暂存区和版本库之间的区别
git diff HEAD 查看工做区和版本库之间的区别
git status 查看当前的工做状态
复制代码
学到最后,其实仍是云里雾里的,先不急,一个git也就这么多,不必去深究,会用就行。只要用起来,在实践中学习,会理解更深入。时间会慢慢解开你的疑惑。
有任何疑问请留言评论。