yum install -y git
A) CentOS上
yum install -y epel-release ; yum install -y git
B)Ubuntu上
sudo apt-get install git
C)windows上安装msysgit
下载地址 https://git-for-windows.github.io
或者 http://pan.baidu.com/s/1skFLrMt#path=%252Fpub%252Fgit
安装好后,输入 git 会列出常用命令。表示完成。
安装完成后,还需要最后一步设置
git config --global user.name "Your Name" //比如 aming
git config --global user.email "[email protected]" //写你的邮箱
为区别用户标记用。查看用户家目录下的 cat .gitconfig文件。
----------------------------------------------------------------
git init //用这个命令初始化,让这个目录变成git可以管理的仓库
[root@YQ001 gitroot]# git init
Initialized empty Git repository in /home/gitroot/.git/
得到的目录/home/gitroot/.git/
[root@YQ001 gitroot]# ls /home/gitroot/.git/
branches config description HEAD hooks info objects refs
初始化完成。
可以就在这里面创建文件,并写入东西。
---------------------------------------------------------------------------
3. 提交文件到仓库(echo -e "123\naaa\n456\nbbb" > 1.txt)
vim 1.txt (例如写入些东西)
git commit -m "add new file 1.txt" //add完了必须要commit才算真正把文件提交到git仓库里
[root@YQ001 gitroot]# git add 1.txt
[root@YQ001 gitroot]# git commit -m "add new file 1.txt"
[master (root-commit) d83c1a1] add new file 1.txt
1 files changed, 25 insertions(+), 0 deletions(-)
create mode 100644 1.txt
git status //查看当前仓库中的状态,比如是否有改动的文件
# On branch master
# Changed but not updated:
# (use "git add
# (use "git checkout --
#
# modified: 1.txt
#
no changes added to commit (use "git add" and/or "git commit -a")
--------------------------
git diff 1.txt //可以对比1.txt本次修改了什么内容,相比较仓库里面的版本
[root@YQ001 gitroot]# git diff
diff --git a/1.txt b/1.txt
index 0e073b8..4e810e6 100644
--- a/1.txt
+++ b/1.txt
@@ -23,3 +23,4 @@ g
fd
g
+jsdfkljsljfklsdjflksjflksdjklfjsdklfjslkd
----------------
git checkout 1.txt //要去复原没有更改之前的文件动作。
git add 1.txt // 要去提交问见, 将要完成的动作
git commit -m "add new file 1.txt" //add完了必须要commit才算真正把文件提交到git仓库里
git status 查看文件的状态,提示文件没有改变!
------------------------------------------------------------
4. 版本回退
vim 1.txt
写入内容,fjskljf 并提交。
[root@YQ001 gitroot]# git add 1.txt
[root@YQ001 gitroot]# git commit -m "new wenjian"
在写入内容,并提交
[root@YQ001 gitroot]# git add 1.txt
[root@YQ001 gitroot]# git commit -m "new wenjian 2"
git reset --hard 3b58 //可以回退到第二行的这个版本,这里后面跟的字符串可以简写。最少四个字符
cat 1.txt 查看文件内容。
---------------------------
当回退到该版本后,再 git log 查看
则最上面的版本不再显示了,(之后修改的 。)
如果你发现恢复的不对,那如果想再倒回退到第一行那个版本怎么办?
git reflog //任可以显示所有的版本列表出来。
继续
git reset --hard7776
即可以完成。再回退,再恢复。以此循环。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
5. 撤销修改
修改1.txt,发现改的不对,想恢复到上一次提交时的状态。
或者1.txt不小心给删除掉了。可以使用,已经 git add file了
git status
git reset HEAD file
要么 git add
要么 git checkout -- 1.txt //恢复到上一次提交时的状态
首先
git status 查看
----------
如果1.txt修改完了,保存后,
git add 1.txt了,但没有commit,再想回退到上一次提交时的状态。可以使用
git reset HEAD 1.txt首先 git status 查看 ---> git reset HEAD 1.txt ---> git checkout -- 1.txt 完成恢复
-----------
那如果不仅add也commit了,那就用第4版本回退的方法。6. 删除
cp 1.txt 2.txt
这样就彻底删除了2.txt
在当前目录: rm -f 2.txt ---> git rm 2.tx ---> git commit "delete 2.txt" --->完成!
---------------------------------------------------------------------------------------------------
7. 做一个远程仓库(github)
sign up 注册
sign in 登陆
首先到 https://github.com 注册一个账号,创建自己的git,点repositories -->start a project 或者下面 new repositories名字自定义,比如叫studygit 选择public (公共 &私有) 点 Create repository
里面有说明文档,。。。。
右上角点自己头像哪里 +▼,选择settings,左侧选择SSH and GPG keys
右上角点New SSH key,
Title:填个日期吧。
key: 粘贴公钥
把linux机器上的 /root/.ssh/id_rsa.pub内容粘贴到这里
#ssh-keygen 回车,就生成了秘钥对。再回车几下,就好了。
#cat /root/.ssh/id_rsa.pub 复制过来,到上面
添加好了之后,会收到邮件。
-----------------------------------------------
把本地参考推送到远程仓库
# cd /home/
#mkdir studygit
# cd studygit/
#git init (初始化)本地的studygit库完成,需要与 远程的联系到一起
# git remote add origin [email protected]:aminglinux/studygit.git
//这一步是在远程创建一个新的仓库studygit,名字尽量和本地的一致
git push -u origin master //然后把本地的studygit仓库推送到远程的studygit
下一次再推送,就可以直接 git push 了
-------------------------
#ls
# vim aminglinux.txt 写入代码
#git add aminglinux.txt
#git commit -m "add aminglinux.txt"
#ls
# git push -u origin master
yes
完成了,下一次再推送,就可以直接 git push
刷新浏览器页面里的项目,就可以看到了。
#ls
# vim aminglinux.txt 再次写入代码
#git add aminglinux.txt
#git commit -m "new aminglinux.txt" (本地完成更新)
# git push (再次完成远程库,更新)刷新浏览器就可以看到
-------------------------------------------------------------
下面我们克隆一个远程仓库过来
其目的,就是把现成的,已有的创库位移复制。
#cd /home
#ls
# git clone [email protected]:aminglinux/lanmp.git
(git@网址地址 :用户/项目名字.git)就是lanmp创库的地址linux机器写法
它提示,会在当前目录下初始化一个仓库,并创建一个.git的目录#cd lanmp
# ls #ls -la #cat config 查看url地址
# cat README.md 就可以查看到目录里面的消息了
------------------------------------------
# vi lanmp.sh 编辑一下文件,写内容。然后提交# git commit -m "gen gai de nirong 跟改文集之后的描述" 本地提交。!
------------------------------------------
连网 就可以 。再推送到远程服务端 !! 需要放公钥 才可以推送过去。!!! 开发需要用到这工具。-----------------------------------------
查看分支,
开发分支,master
#cd /home/studygit/
--------------------------------------
创建分支
#git checkout aming
# git branch
* aming (有*号表示就切到aming分支了。)
master
git commit -m "laksjdflksjdklfj"
# git checkout master
# git branch 查看并无新建的刚才2.txt文件。
--------------------------------
合并分支
先切换到目标分支上,例如把master分支合并到aming上
#git checkout aming
# git branch
* aming (有*号表示当前分支了。)
master
# git merge master //把master分支合并到了aming
# git branch
-------------------------------------------------------
如果master分支和aming分支都对2.txt进行了编辑,当合并时会提示冲突,
需要先解决冲突才可以继续合并。
解决冲突的方法是在master分支下,编辑2.txt,改为aming分支里面2.txt的内容。
然后提交2.txt,再合并aming分支。
但是这样有一个问题,万一master分支更改的内容是我们想要的呢?
我们可以编辑2.txt内容,改为我们想要的,然后提交。
切换到aming分支,然后合并master分支到aming分支即可。
(倒着合并)合并分支有一个原则,那就是要把最新的分支合并到旧的分支。
也就是说merge后面跟的分支名字一定是最新的分支。
#cat 2.txt 直接查看
--------------------------------------------------------------# git branch -d aming # 删除分支
# git branch -D aming #如果分支没有合并,删除之前会提示,那我们就不想合并,强制删除
--------------------------------------------------------------------------------------------------
对于分支的应用,建议大家以这样的原则来:
防止:版本混乱,冲突。
master分支是非常重要的,线上发布代码用这个分支,平时我们开发代码不要在这个分支上。
创建一个dev分支,专门用作开发,只有当发布到线上之前,才会把dev分支合并到master
git merge bob
9. git stash 保留现场
当你正在进行项目中某一部分的工作,里面的东西处于一个比较杂乱的状态,而你想转到其他分支上进行一些工作。
问题是,你不想提交进行了一半的工作,否则以后你无法回到这个工作点。
解决这个问题的办法就是git stash命令。
git stash apply stash@{1}
---------------------------------------------------------------------
[root@YQ001 gitroot]# vim 3.txt #:wq保存退出,桌add
[root@YQ001 gitroot]#git add 3.txt #提交到本地
[root@YQ001 gitroot]# ls
2.txt 3.txt
[root@YQ001 gitroot]# git branch
* master
那么消息来了,要改2.txt
[root@YQ001 gitroot]# vim 2.txt
[root@YQ001 gitroot]# git add 2.txt #改好之后提交动作
[root@YQ001 gitroot]# git commit -m "fix a bug 2.txt"
[master ff3678d] fix a bug 2.txt
1 files changed, 4 insertions(+), 3 deletions(-)
[root@YQ001 gitroot]# git status #提交之后,查看。发现多出3.txt 多出一行。
# On branch master
# Untracked files:
# (use "git add
#
# 3.txt
nothing added to commit but untracked files present (use "git add" to track)
[root@YQ001 gitroot]# 就需要现在保留了,不让别人看到这个3.txt
[root@YQ001 gitroot]# git stash
No local changes to save 现场保留。,需要操作[root@YQ001 gitroot]#git add 3.txt #提交到本地
[root@YQ001 gitroot]# git add 3.txt
[root@YQ001 gitroot]# git stash
Saved working directory and index state WIP on master: ff3678d fix a bug 2.txt
HEAD is now at ff3678d fix a bug 2.txt
再
[root@YQ001 gitroot]# git status #就没有任何显示了,完成保留现场了。
# On branch master
nothing to commit (working directory clean)
[root@YQ001 gitroot]# git stash list
------------------------------------------------------------------------------
[root@YQ001 gitroot]# ls #并没有发现3.txt文件
2.txt
继续添加
[root@YQ001 gitroot]# vi 4.txt
[root@YQ001 gitroot]# git add 4.txt
[root@YQ001 gitroot]# git status #查看发现还有4.txt
# On branch master
# Changes to be committed:
# (use "git reset HEAD
#
# new file: 4.txt
#
[root@YQ001 gitroot]# git stash #保留现场
Saved working directory and index state WIP on master: ff3678d fix a bug 2.txt
HEAD is now at ff3678d fix a bug 2.txt
在查看
[root@YQ001 gitroot]# git stash list
stash@{0}: WIP on master: ff3678d fix a bug 2.txt
stash@{1}: WIP on master: ff3678d fix a bug 2.txt
# ls 查看发现 3.txt 4.txt都没有存在。
# git stash apply stash@{0} # 恢复4.txt文件 ,也是恢复现场!
第三个 3.txt 也类似
# git stash apply stash@{1}
# ls #都出来了
# git status
可以继续编辑你的 3.txt 和 4. txt 文件,好了之后,任然 add
#git add 3.txt
#git commit -m " new jdslfjsl 3.txt"
没什么用,不入直接保存。变 复杂了
-----------------------------------------------------------------------------------------------------------
10. 远程分支
直接在页面上添加dev2, Branch dev ▼- 填入分支名dev2称-鼠标往下移动点击。完成添加,也可以删除。
查看远程库信息,使用git remote -v
本地新建的分支如果不推送到远程,对其他人就是不可见的
查看远程分支 git ls-remote origin从本地推送分支,使用git push origin branch-name,
如果推送失败,先用git pull抓取远程的新提交
在本地创建和远程分支对应的分支,
使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致
从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。
下拉远程分支dev2到本地,并命令为dev2
git fetch origin dev2:dev2
#
标签类似于快照功能,我们可以给版本库打一个标签,
记录某个时刻库的状态。我们可以随时恢复到该状态。
git checkout master 先切换到master分支上
(git tag show v1.0(查看详细情况,git tag -d show 删掉)
git tag v1.0 给master上的文件打一个标签v1.0git log --pretty=oneline --abbrev-commit #行显示命令
git tag v0.9 46d3c1a #针对某个文件打标签----------------------------------------------------------
如果本地删除了一个标签,远程也想要删除需要这样操作:
[root@YQ001 ~]# cd /home/gitroot/
[root@YQ001 gitroot]# git config --global alias.lg "log --pretty=oneline"
[root@YQ001 gitroot]# git lg
[root@YQ001 gitroot]# git lg
会显示出颜色。
别名所在的目录: cat /root/.gitconfig
github毕竟是公开的,而私有仓库又得花钱买。
所以我们可以想办法搭建一个私有的,只自己公司使用的。
----------------------------------------------------------------
俩台机器,一客服端,一个服务端。
俩机都裝: yum install git //安装git
# useradd -s /usr/bin/git-shell git //添加git用户,并且设置shell为/usr/bin/git-shell,目的是为了不让git用户远程登陆
# cd /home/git# touch .ssh/authorized_keys
(客服端的ssh公钥 cat /root/.ssh/id_rsa.pub 复制到服务端。)
# chmod 700 .ssh
(# chmod 600 .ssh/authorized_keys)
尝试登陆:
# ssh git@ ip
但是并不能操作,什么命令。
chown -R git.git sample.git
此时就可以在当前目录下生成一个sample的目录,这个就是我们克隆的远程仓库了。进入到这里面,可以开发一些代码,然后push到远程