git单机, 远程仓库, 分支管理

单机上使用git - 安装

  • yum install -y git mkdir /data/gitroot
  • cd /data/gitroot
  • git 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.txt
  • git status //查看当前仓库中的状态,比如是否有改动的文件
以下两个命令,修改时会记录修改人的信息,这样才能跟踪变化,没有设置需要设置一下
  git config --global user.email "[email protected]"
  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,commit
  • git 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.txt
  • git reflog //查看所有历史版本
[root@draft git2]# git reflog
29c487e HEAD@{0}: commit: rm   #文件已删除;
500a08a HEAD@{1}: reset: moving to 500a08a
8e860db HEAD@{2}: commit: mo 5
fee3e53 HEAD@{3}: reset: moving to fee3e53
500a08a HEAD@{4}: reset: moving to 500a08
45d1c39 HEAD@{5}: reset: moving to 45d1c
500a08a HEAD@{6}: commit: mo 4
63c54a6 HEAD@{7}: commit: mo 3
fee3e53 HEAD@{8}: commit: mo 2
45d1c39 HEAD@{9}: commit: mo 1
9c38131 HEAD@{10}: commit (initial): add new
[root@draft git2]# git log --pretty=oneline  #commit记录;
29c487e3f9737409424ea4d0bfcd2e9f32d29673 rm
500a08a72af0328b1f907506ca0536cfba5050a8 mo 4
63c54a68b6c5d660be666c62bb994a5814eded1a mo 3
fee3e53c292138e4e17fa5f880c09acf581bdab4 mo 2
45d1c39ad12883460fb7a8a398e7a25986ef1a6b mo 1
9c3813143a09568e93ece5f8fd7a4a0985dd0a45 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 2
45d1c39ad12883460fb7a8a398e7a25986ef1a6b mo 1
9c3813143a09568e93ece5f8fd7a4a0985dd0a45 add new
[root@draft git2]# git reflog
fee3e53 HEAD@{0}: reset: moving to fee3e53   #增加了一行; 
29c487e HEAD@{1}: commit: rm
500a08a HEAD@{2}: reset: moving to 500a08a
8e860db HEAD@{3}: commit: mo 5
fee3e53 HEAD@{4}: reset: moving to fee3e53
500a08a HEAD@{5}: reset: moving to 500a08
45d1c39 HEAD@{6}: reset: moving to 45d1c
500a08a HEAD@{7}: commit: mo 4
63c54a6 HEAD@{8}: commit: mo 3
fee3e53 HEAD@{9}: commit: mo 2
45d1c39 HEAD@{10}: commit: mo 1
9c38131 HEAD@{11}: commit (initial): add new

单机上使用git - 删除文件

  • git rm 2.txt
  • git commit -m “rm 2.txt”

建立远程仓库

  • 首先到 https://github.com 注册一个账号,创建自己的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 [email protected]:tanyyinyu/git2.git
    git push -u origin master
  • 操作后下一次再推送,就可以直接 git push
    更新到本地库是add - commit
    更新到远程库是add - commit - push

克隆远程仓库

  • 克隆一个自己的仓库
[root@draft git]# rm -rf git1
[root@draft git]# ls
git2 
[root@draft git]# [email protected]:tanyyinyu/git1.git^C
[root@draft git]# git clone [email protected]: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]# ls
README.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 txt
 1 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, done.
Compressing 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 [email protected]:tanyyinyu/git1.git
   ce537ac..5271920  master -> master
  • 远程界面更新文件
    进入相应文件,点击右下方的笔图标
    在这里插入图片描述
    修改内容后 - commit changes (保存了内容)

本地下载更新

[root@draft git1]# git pull
remote: 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 0
Unpacking objects: 100% (3/3), done.
来自 github.com:tanyyinyu/git1
   5271920..5ea9c55  master     -> origin/master
更新 5271920..5ea9c55
Fast-forward
 1.txt | 1 +
 1 file changed, 1 insertion(+)
[root@draft git1]# cat 1.txt 
change from far end
  • 克隆一个别人的仓库
[root@draft git]# git clone  [email protected]: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]# ls
lanmp.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 
* master
  tany
[root@draft git2]# git checkout tany 
切换到分支 'tany'
[root@draft git2]# git branch 
  master
* tany
[root@draft git2]# ls
1.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] change
 1 file changed, 1 insertion(+)
[root@draft git2]# cat 1.txt 
lkkl
mo 1
mo 2
kjkj branch tany 
[root@draft git2]# git checkout master 
切换到分支 'master'
[root@draft git2]# cat 1.txt 
lkkl
mo 1
mo 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..bd83327
Fast-forward
 1.txt | 1 +
 1 file changed, 1 insertion(+)
[root@draft git2]# cat 1.txt 
lkkl
mo 1
mo 2
kjkj branch tany
[root@draft git2]# git branch -d tany
已删除分支 tany(曾为 bd83327)。
发布了125 篇原创文章 · 获赞 5 · 访问量 4611

猜你喜欢

转载自blog.csdn.net/tanyyinyu/article/details/103675491