Git使用学习

学习git常用命令

git init

使用 Git 来对现有的项目进行管理

git add

来实现对指定文件的跟踪,并处于暂存状态

git commit

将文件提交到本地仓库

git commit -m this is my first commit

-m后面跟上提交的日志

git status

查看当前分支以及当前文件状态

比如,在当前文件夹git init后,新建一个a.txt的文件,在里面写入hello,之后git status,会输出:

On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        a.txt

nothing added to commit but untracked files present (use "git add" to track)

这表明当前在master这个分支上,还显示a.txtUntracked files,即未跟踪文件;此时,再在a.txt中写入world,再次git status,发现输出仍与上面相同

现在,输入git add a.txt,执行git status,发现输出:

On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   a.txt

表明a.txt是已被跟踪的文件,已在暂存区,并没有被commit提交到本地仓库;此时修改a.txt中的内容,在下面增加一行awsl,保存后执行git status

On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   a.txt

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   a.txt

表明a.txt已经被暂存了,但Changes not staged for commit表明修改后并没有暂存;现在将修改后的a.txt进行暂存,依旧输入git add a.txt,再查看状态,输出:

On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   a.txt

现在,将a.txt存放到本地仓库,使用git commit -m

git commit -m 添加了a.txt到仓库

之后git status显示:

On branch master
nothing to commit, working tree clean

表明当前工作目录很干净,所有已跟踪文件在上次提交后都未被更改过;还表明当前文件夹下没有出现未被跟踪的新文件

另:如果感觉git status输出内容复杂,可以使用-s使输出更简短

git clone

比如,要克隆 Git 的可链接库 libgit2,可以用下面的命令:

$ git clone https://github.com/libgit2/libgit2

克隆的同时改变仓库的名字:

$ git clone https://github.com/libgit2/libgit2 mylibgit

初次克隆某个仓库的时候,工作目录中的所有文件都属于已跟踪文件,并处于未修改状态。

git rm

如要从仓库中移除某个文件,则需从暂存区移除,再commit

从Git仓库(暂存区)中移除,且不保留文件:

git rm b.txt

只是从Git仓库(暂存区)中移除,而将文件保留在本地工作目录:

git rm --cached b.txt

git log

查看完整的提交历史

输出每一个commit之间的差异信息:

git log -p

git show

查看某次历史提交的信息:

git show [commit_id]

git diff

显示工作区与暂存区的差异:

git diff

git reset

还原以前的版本:

git reset --hard 9d9fab3bd7e53c454dee1c9a7abc01e499882815

git ls-files

查看本地仓库文件

git remote

操作远程仓库

查看绑定的远程仓库:

git remote -v

绑定远程仓库:

git remote add origin  https://github.com/gtfly/hello.git

其中,orgin为设置的远程仓库名称(别名),gtfly为用户名,hello为远程仓库

删除绑定的远程仓库:

git remote rm origin

或者进入.git文件夹下修改config文件也是可以滴!

git push

将本地仓库推送到远端仓库

假设当前工作分支为master(origin为绑定时设置的远程仓库名称):

git push -u origin master

git pull

获取远端数据并合并到当前分支

现在,我将我的a.txt文件git push到远端,然后在远端将a.txt中添加了good,此时,我再git push到远端,会输出报错信息:

To https://github.com/gtfly/hello.git
 ! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'https://github.com/gtfly/hello.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

这样就是产生冲突了,解决的方法就是先获取更新,再git push

git pull origin

此时,打开工作目录下的a.txt,发现里面多了good,这就是从远端获取到的更新;之后再修改a.txtaddcommit后,再push就不会报错啦!

git fetch

获取远端的更新,不会自动合并到当前分支

获取远端(origin)数据:

git fetch orgin 

查看获取到的数据与本地仓库差别:

git log -p master..origin/master

将远端数据合并到本地:

git merge origin/master

常见git文件作用

1..git/index中会缓存git add的文件,这里在没有commit的情况下,也是存在的
https://github.com/lijiejie/GitHack lijiejie的这个就是获取的这个

2..git/refs/heads/master记录了master的commit的hash,由此可以解析出这个commit的所有文件

3..git/logs/HEAD其中存储了git的log信息,可以找到历史的commit项

4..git/refs/stash工作进度的临时保存