GIT仓库

1、安装GIT工具

yum install git -y

2、创建版本库

  在任意目录下执行git init即可将该目录变为Git可管理的仓库

cd /
mkdir git
cd /git/
git init

  /git目录就变为Git可管理的仓库,执行git init命令后目录内会生成一个.git隐藏目录,该目录用于追踪管理版本仓库

3、创建好一个版本库之后,我们需要做一些简单的配置;我们可以使用git config命令来设置,使用git config命令可以是我们不用去编辑配置文件,他会将我们想要配置的信息写入配置文件中  

  这些变量可以被存储在三个不同的位置:
  1./etc/gitconfig 文件:包含了适用于系统所有用户和所有库的值。如果你传递参数选项’--system’ 给 git config,它将明确的读和写这个文件。
  2.~/.gitconfig 文件 :具体到你的用户。你可以通过传递--global 选项使Git 读或写这个特定的文件。
  3.位于git目录的config文件 (也就是 .git/config) :无论你当前在用的库是什么,特定指向该单一的库。每个级别重写前一个级别的值。因此,在.git/config中的值覆盖了在/etc/gitconfig中的同一个值。

  现在我们设置一下我们的用户名和mail,因为我们每次提交新内容的时候都会记录这些信息

[root@localhost Git]#git config --global user.name "root"
[root@localhost Git]#git config --global user.email "root@root.com"
[root@localhost Git]# git config -l
user.name=root
user.email=root@root.com
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true

 

4、将一个文件提交到仓库

  在我们建立的版本库目录下或子目录下新建一个文件,写入内容

  这个时候该文件还没有被放入git仓库,我们需要经过两步,才能将一个文件提交到git仓库

  ①使用git add <filename>告诉git仓库我们要把这个文件提交的git仓库。

  ②使用git commit -m将文件提交到git仓库

  -m参数用于为本次提交添加描述信息,以便于日后或他人了解本次改动信息

[root@localhost Git]# echo "one two three" >> learn.txt
[root@localhost Git]# git add learn.txt 
[root@localhost Git]# git commit -m "first file"
[master (root-commit) 2c2161f] first file
 Committer: root <root@localhost.localdomain>
After doing this, you may fix the identity used for this commit with:

    git commit --amend --reset-author

 1 file changed, 1 insertion(+)
 create mode 100644 learn.txt

  git commit 一次可以提交多个文件,我们可是使用git add添加多个文件使用git commit一次性提交

git add file1.txt
git add file2.txt file3.txt
git commit -m "add 3 files"

5、查看仓库状态

  git status命令可以让我们时刻掌握仓库当前的状态。现在我们先修改learngit.txt文件的内容,再使用git status命令

git status

   当我们对某文件进行了修改

  git status输出会告诉我们,该被修改了,但还没有准备提交修改

  使用git add命令准备提交后我们在使用git status命令输出会告诉我们将要提交被修改的文件

  在最终提交文件后,git status会告诉我们没有需要提交的修改,而且工作目录是干净的

  git status虽然会告诉我们文件被修改,但无法知道具体修改的内容,如果想知道具体修改了那些内容我们可以使用

  git diff命令,git diff命令可以让我们清楚的看到有哪些内容被修改

6、版本回退

  经过多次修改后,我们已经记不得每个版本是些什么内容了,但git记得

git log
git log --pretty=oneline

 

  git log命令会显示从最近到最远的提交日志,如果嫌输出信息太多可加上--pretty=oneline选项,让每次提交信息显示为一行

  包括commit id和每次提交的描述信息。commit id是每个版本的版本号。

  要回退到上一个版本,首先我们要知道当前版本,在git中HEAD表示当前版本,HEAD^表示上一个版本,HEAD^^则表示上上个版本,如果想回到10甚至更多版本以前,也可是加^,但是不易读,所以可以写成HEAD~10,当我们知道commit id后,也可以回退到指定的版本。

git reset --hard HEAD^
git reset --hard HEAD^^
git reset --hard HEAD~10
git reset --hard <commit id>

  我们还可以使用git reflog查看命令历史。

7、工作区与暂存区

  工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

        Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD

  我们把文件往Git版本库里添加的时候,是分两步执行的:

  第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;

  第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

8、管理修改

  在git中追踪管理的是修改,而不是文件,当我们对某个文件新增了一行,删减了几行,修改了某个标点符号,亦或者新建或是删除了某个文件,都被视作一次修改。

进行一下实验来了解为什么git管理的是修改而不是文件

怎么第二次的修改没有被提交?

我们回顾一下操作过程:

第一次修改 -> git add -> 第二次修改 -> git commit

我们前面讲了,Git管理的是修改,当你用git add命令后,在工作区的第一次修改被放入暂存区,准备提交,但是,在工作区的第二次修改并没有放入暂存区,所以,git commit只负责把暂存区的修改提交了,也就是第一次的修改被提交了,第二次的修改不会被提交。

我们在learengit.txt中新添加一行内容,然后通过git add命令将其添加到暂存区,在使用git status查看一下状态,我们先不着急提交,紧接着对learngit.txt再添加一行后使用git commit提交。此时查看状态会提示我们有未被添加提交的修改。

可以通过git diff HEAD --<filename>比较工作区的文件和版本库最新版本的区别。 

9、撤销修改

  情况一:工作区做修改,未添加到暂存区,或添加到暂存区后又做了修改:git checkout -- <file>,该操作实际是让这个文件回到最近一次git commitgit add时的状态

  情况二:修改后添加至暂存区还没提交:git reset HEAD <file>,用命令git reset HEAD <file>可以把暂存区的修改撤销掉,重新放回工作区

  情况三:修改并提交,但未推送至远程仓库:git reset --hard HEAD^,将仓库回退一个版本

10、删除文件git rm并git commit提交,此处不需要git add添加

11、储存当前工作环境:git stash

  查看储存的公作环境:git stash list

  恢复工作环境:    ①:恢复不删除储存:git stash apply
          ②:恢复同时删除储存:git stash pop
  删除储存工作环境:git stash drop

12、将其他分支上的某一次提交复制到当前分支:用于多分枝同一bug修复:git cherry-pick commit-id

13、远程仓库
  在本地仓库添加一个远程仓库:git remote add origin ssh://用户名@ip/仓库路径/.git
  pull取远程仓库某一分支:git pull ssh://用户名@ip/仓库路径/.git <branch>
  推分支到远程仓库:git push origin <branch>
  克隆远程仓库:git clone ssh://用户名@ip/仓库路径/.git
  创建远程origin的dev分支到本地:git checkout -b dev origin/dev
  推送分支,就是把该分支上的所有本地提交推送到远程库:git push origin <branch>
  获取最新远程仓库内容并和到本地仓库(可能回产生冲突,需要手动修改冲突):git pull
  如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>


  多人协作的工作模式通常是这样:
  首先,可以试图用git push origin <branch-name>推送自己的修改;
  如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
  如果合并有冲突,则解决冲突,并在本地提交;
  没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功!
  如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>。
  这就是多人协作的工作模式,一旦熟悉了,就非常简单。

posted @ 2021-03-11 15:27  雑音未来  阅读(142)  评论(0编辑  收藏  举报