单机上使用git - 安装
yum install -y git mkdir /data/gitrootcd /data/gitrootgit init //初始化仓库echo -e “123\naaa\n456\nbbb” > 1.txt //创建一个新文件git add 1.txt//把1.txt添加到仓库git commit -m “add new file 1.txt” //add完了必须要commit才算真正把文件提交到git仓库里再次更改1.txtgit status //查看当前仓库中的状态,比如是否有改动的文件以下两个命令,修改时会记录修改人的信息,这样才能跟踪变化,没有设置需要设置一下git config --global user.email "you@"git config --global user.name "Your Name"[root@draft git1]# git status #全部文件都同步的状态;# 位于分支 master无文件要提交,干净的工作区
[root@draft git1]# git status #有修改时的状态,需要add - commit更新;或恢复到上一个状态都可以;# 位于分支 master# 尚未暂存以备提交的变更:# (使用 "git add <file>..." 更新要提交的内容)# (使用 "git checkout -- <file>..." 丢弃工作区的改动)##修改:README.md#修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
git diff 1.txt //可以对比1.txt本次修改了什么内容,相比较仓库里面的版本
单机上使用git - 版本回退
多更改几次1.txt,然后add,commitgit log//查看所有提交记录git log --pretty=oneline//一行显示git reset --hard f7c8e9//回退版本,其中后面跟的字符串是简写撤销修改rm -f 1.txt//不小心删除了1.txt (情况1)
git checkout – 1.txt//恢复1.txt
如果1.txt文件修改,add后但没有commit,再想回退到上一次提交的状态(情况2),可以使用git reset HEAD 1.txt,再执行git checkout – 1.txtgit reflog //查看所有历史版本
[root@draft git2]# git reflog29c487e HEAD@{0}: commit: rm #文件已删除;500a08a HEAD@{1}: reset: moving to 500a08a8e860db HEAD@{2}: commit: mo 5fee3e53 HEAD@{3}: reset: moving to fee3e53500a08a HEAD@{4}: reset: moving to 500a0845d1c39 HEAD@{5}: reset: moving to 45d1c500a08a HEAD@{6}: commit: mo 463c54a6 HEAD@{7}: commit: mo 3fee3e53 HEAD@{8}: commit: mo 245d1c39 HEAD@{9}: commit: mo 19c38131 HEAD@{10}: commit (initial): add new[root@draft git2]# git log --pretty=oneline #commit记录;29c487e3f9737409424ea4d0bfcd2e9f32d29673 rm500a08a72af0328b1f907506ca0536cfba5050a8 mo 463c54a68b6c5d660be666c62bb994a5814eded1a mo 3fee3e53c292138e4e17fa5f880c09acf581bdab4 mo 245d1c39ad12883460fb7a8a398e7a25986ef1a6b mo 19c3813143a09568e93ece5f8fd7a4a0985dd0a45 add new[root@draft git2]# ls #没有文件;[root@draft git2]# git reset --hard fee3e53 #回退到mo 2;HEAD 现在位于 fee3e53 mo 2[root@draft git2]# git log --pretty=oneline fee3e53c292138e4e17fa5f880c09acf581bdab4 mo 245d1c39ad12883460fb7a8a398e7a25986ef1a6b mo 19c3813143a09568e93ece5f8fd7a4a0985dd0a45 add new[root@draft git2]# git reflogfee3e53 HEAD@{0}: reset: moving to fee3e53 #增加了一行; 29c487e HEAD@{1}: commit: rm500a08a HEAD@{2}: reset: moving to 500a08a8e860db HEAD@{3}: commit: mo 5fee3e53 HEAD@{4}: reset: moving to fee3e53500a08a HEAD@{5}: reset: moving to 500a0845d1c39 HEAD@{6}: reset: moving to 45d1c500a08a HEAD@{7}: commit: mo 463c54a6 HEAD@{8}: commit: mo 3fee3e53 HEAD@{9}: commit: mo 245d1c39 HEAD@{10}: commit: mo 19c38131 HEAD@{11}: commit (initial): add new
单机上使用git - 删除文件
git rm 2.txtgit commit -m “rm 2.txt”建立远程仓库
首先到 注册一个账号,创建自己的git,点repositories 再点new需要最新的浏览器支持,如safari,不然显示不出验证码名字自定义,比如叫git2 - 选择public - 点create repository
出现页面和命令,指引在本地推送一个文件到远程仓库上;
可以以多种方式连接,都有具体的指引;
也有指引将本地库同步到远程,从其他代码管理平台导入;
连接过后,之后就可以更方便的更新信息;这里使用SSH连接,把公钥上传到github系统中;
添加key:右上角点自己头像,选择settings,左侧选择SSH and GPG keys
左侧点New SSH key,把linux机器上的~/.ssh/id_rsa.pub内容粘贴到这里把本地仓库与远程仓库连接的重要命令
git remote add origin git@:tanyyinyu/git2.git
git push -u origin master操作后下一次再推送,就可以直接 git push
更新到本地库是add - commit
更新到远程库是add - commit - push
克隆远程仓库
克隆一个自己的仓库[root@draft git]# rm -rf git1[root@draft git]# lsgit2 [root@draft git]# git@:tanyyinyu/git1.git^C[root@draft git]# git clone git@:tanyyinyu/git1.git正克隆到 'git1'...Warning: Permanently added the RSA host key for IP address '13.250.177.223' to the list of known hosts.remote: Enumerating objects: 9, done.remote: Counting objects: 100% (9/9), done.remote: Compressing objects: 100% (3/3), done.remote: Total 9 (delta 0), reused 3 (delta 0), pack-reused 0接收对象中: 100% (9/9), done.[root@draft git]# cd git1[root@draft git1]# lsREADME.md[root@draft git1]# touch 1.txt[root@draft git1]# git add 1.txt[root@draft git1]# git commit -m "add txt"[master 5271920] add txt1 file changed, 0 insertions(+), 0 deletions(-)create mode 100644 1.txt[root@draft git1]# git push #远程git界面会更新新的文件;warning: push.default 未设置,它的默认值将会在 Git 2.0 由 'matching'修改为 'simple'。若要不再显示本信息并在其默认值改变后维持当前使用习惯,进行如下设置:git config --global push.default matching若要不再显示本信息并从现在开始采用新的使用习惯,设置:git config --global push.default simple参见 'git help config' 并查找 'push.default' 以获取更多信息。('simple' 模式由 Git 1.7.11 版本引入。如果您有时要使用老版本的 Git,为保持兼容,请用 'current' 代替 'simple' 模式)Counting objects: 4, pressing objects: 100% (2/2), done.Writing objects: 100% (3/3), 268 bytes | 0 bytes/s, done.Total 3 (delta 0), reused 0 (delta 0)To git@:tanyyinyu/git1.gitce537ac..5271920 master -> master
远程界面更新文件
进入相应文件,点击右下方的笔图标
修改内容后 - commit changes (保存了内容)
本地下载更新
[root@draft git1]# git pullremote: Enumerating objects: 5, done.remote: Counting objects: 100% (5/5), done.remote: Compressing objects: 100% (2/2), done.remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0Unpacking objects: 100% (3/3), done.来自 :tanyyinyu/git15271920..5ea9c55 master-> origin/master更新 5271920..5ea9c55Fast-forward1.txt | 1 +1 file changed, 1 insertion(+)[root@draft git1]# cat 1.txt change from far end
克隆一个别人的仓库
[root@draft git]# git clone git@:aminglinux/lanmp.git #由于没有这个仓库的私钥或没有上传自己的公钥,不能对此仓库写入;正克隆到 'lanmp'...remote: Enumerating objects: 32, done.remote: Total 32 (delta 0), reused 0 (delta 0), pack-reused 32接收对象中: 100% (32/32), 5.99 KiB | 0 bytes/s, done.处理 delta 中: 100% (6/6), done.[root@draft git]# cd lanmp/[root@draft lanmp]# lslanmp.sh README.md
分支管理
分支基础git branch //查看分支
git branch aming //创建分支
git checkout aming //切换到了aming分支下
再用git branch查看,会看到有两个分支master和aming,当前使用的分支前面会有一个*在aming分支下 ,编辑2.txt,并提交到新分支
echo “askdfjlksadjflk” > 2.txt
git add 2.txt
git commit -m “laksjdflksjdklfj”
切换回master分支
git checkout master //此时cat 2.txt发现并没有更改内容
[root@draft git2]# git branch* master[root@draft git2]# git branch tany[root@draft git2]# git branch * mastertany[root@draft git2]# git checkout tany 切换到分支 'tany'[root@draft git2]# git branch master* tany[root@draft git2]# ls1.txt[root@draft git2]# echo "kjkj branch tany " >> 1.txt[root@draft git2]# git add 1.txt[root@draft git2]# git commit -m "change"[tany bd83327] change1 file changed, 1 insertion(+)[root@draft git2]# cat 1.txt lkklmo 1mo 2kjkj branch tany [root@draft git2]# git checkout master 切换到分支 'master'[root@draft git2]# cat 1.txt lkklmo 1mo 2
分支的合并
git checkout master //合并分支之前,先切换到目标分支
git merge aming //把aming分支合并到了master
如果master分支和aming分支都对2.txt进行了编辑,当合并时会提示冲突,需要先解决冲突才可以继续合并。
解决冲突的方法是在master分支下,编辑2.txt,改为aming分支里面2.txt的内容。 然后提交2.txt,再合并aming分支。
但是这样有一个问题,万一master分支更改的内容是我们想要的呢? 可以编辑2.txt内容,改为想要的,然后提交。切换到aming分支,然后合并master分支到aming分支即可(倒着合并)。合并分支有一个原则,那就是要把最新的分支合并到旧的分支。也就是说merge后面跟的分支名字一定是最新的分支。
git branch -d aming //删除分支 如果分支没有合并,删除之前会提示,那就不合并,强制删除
git branch -D aming //强制删除分支
[root@draft git2]# git merge tany 更新 fee3e53..bd83327Fast-forward1.txt | 1 +1 file changed, 1 insertion(+)[root@draft git2]# cat 1.txt lkklmo 1mo 2kjkj branch tany[root@draft git2]# git branch -d tany已删除分支 tany(曾为 bd83327)。