git常用命令

(1)安装:

1,ubuntu安装

添加源并安装:

#add-apt-repository ppa:git-core/ppa //配源

# apt update; //更新源

# apt install git

 

(2)配置Git

git config 用户配置文件路径:~/.gitconfig

列出当前配置信息:git config --list

配置当前用户名:git config --global user.name "testuser"

配置当前用户邮箱:git config --global user.email "testuser@qq.com"

 

(3)创建git仓库

有两种取得 Git 项目仓库的方法,仓库后缀为:.git ,仓库的信息保存在.git文件夹中。

①在现有项目或目录下导入文件到 Git 中。

    新建仓库    git init

    导入仓库: git add (file)

示例:

1,创建文件夹

mkdir test_dir_repo

2,新建测试文件

touch 1 2 3

3,新建仓库

git init #执行本步,目录下创建.git文件。此时,该目录就是一个git仓库。

4,向仓库导入文件

git add 1 #添加文件1,其实是添加到暂存区;

git add 2 #此处也可以用[git add .] 提交当前目录。

5,git commit #提交到仓库。

 

②从一个服务器克隆一个现有的 Git 仓库。

git clone url(链接)

1,创建文件夹

mkdir test_dir_repo

2,此时在线克隆的同时创建git仓库。

 

(4)基本命令

1,git status #当前状态

2,git add  #添加到暂存区

3,git commit #提交

4,替换git commit编辑器:

git config core.editor vim #临时替换

git --global config core.editor vim #永久替换

 

5,git commit

git commit -m "commit message" #增加提交,生成commit-id

说明:使用此命令不用再跳转到输入commit信息的编辑器了。

 

6,git log

解释:查看提交历史,同时可以获得commit-id;但看不到被删除的commitid。

①git log --pretty=oneline #log显示为一行,看起来简洁明了。

②git log --pretty=oneline --graph #以图像的形式查看,当分支多时,效果很好。

③git reflog #查看所有分支的所有操作记录(包括已被删除的 commit 记录和 reset操作)

可以恢复到被删除的那个版本

 

7,git show commit-id  

展示版本内容/提交信息;

※使用commit-id最少提供4个字符。

 

8,git rm #移除

git rm 1 #删除文件1,提交到暂存区

git commit #提交后,彻底删除。

 

9,git mv #移动

git mv 1.txt 2.txt #重名名1.txt为2.txt;提交到暂存区。

git commit #提交后,文件重命名成功。

 

10,git diff

①git diff #工作区的差异,即:会显示所有的文件变更差分。

②git diff --cached #暂存区的差异,即暂存区与本地工作目录的差异。

③git diff (commit id) (commit id)  #比较两次commit的差异

④git diff file名 #显示某个文件的差异

 

11,git clean

解释:清除当前工作区未被git版本控制的文件;即未执行git add等操作的文件。

git clean -df #可以删除所有未git的文件;当然此时也可以用linux的rm删除。

 

12,.gitignore (隐藏文件)

解释:指定要忽略的故意未跟踪文件

应用场景:在项目开发过程中,可能会产生一些不需要加入git控制的文件,但是我们不能删除它。

说明:.gitignore放在当前git仓库根目录下(与.git同级)。

使用方法(例):

touch .gitignore

git add .gitignore

git commit -m "test .gitignore"

vim .gitignore文件 #在此文件中,输入忽略的文件名。(文件名后不能有空格,一行一个)

然后:git add .gitignore

git commit -m "test .gitignore ignore filename"

再查看:git status #不愿git的文件,不会显示为红色;和其它git管理的文件一致。

★可以隐藏某种类型的文件,如(*.xml),只需在.gitignore中输入*.xml即可。

 

13,HEAD 头部

解释:

HEAD 文件是一个指向你当前所在分支的引用标识符 ;

指向你正在其基础上进行工作的提交记录;

HEAD是一个文件,指向当前的提交记录;

位于.git目录下;

指向关系:.git/HEAD -> refs/heads/master -> a60562sh9

查看:.git/HEAD

 

13.1 HEAD 扩展

  • 符号 ^ (shift + 6) :根据^的个数,查看前面若干个提交;
  • 符号 ~ (shift + `):用于查看跨度较大的父提交时使用;例:不能打100个^号。

    ※缺点时不能查看Merge的父提交。

  • detach 分离:例如做了git checkout HEAD~2操作,此处将处于分离状态;如果

    此时做了一系列修改和切换操作,想再返回detach状态,可执行:git checkout detach;或者通过get reflog信息(commit-id)返回。

例:

查看前一个提交:git show HEAD^ #也是第一个父提交;

查看第1个父提交的父提交:git show HEAD^^

查看Merge前的第2个父提交: git show HEAD^2

查看第2个父提交的父提交:git show HEAD^2^

查看第2个父提交:git show HEAD~2

查看第3个父提交:git show HEAD~3

查看第100个父提交:git show HEAD~100

 

14,git checkout commit-id (检出)

切换分支:git checkout branchname #检出指定的提交记录到工作目录。

git checkout master:切换到master分支;

它与git reset的区别是:切换到某个提交记录后,历史记录还存在,还可以返回。

 

15, git reset

git reset commit-id (重置)

解释:撤销之前的提交记录。

假如有1,2,3这3条记录,如果git reset 2;那么3的记录将删除。

进一步解释,下面是提交的三个过程:

1、工作目录新建文件 a

2、使用git add把a加入到暂存区

3、使用git commit把a提交到本地仓库

不带参数,直接执行完git reset之后,相当于撤销了2,3两步,第一步创建的文件a还在当前工作目录中。

 

git reset参数

①git reset --soft "commit id"

    回退git commit

②git reset (--mixed) "commit id" #不带参数的默认行为

    回退git commit,回退git add

③git reset --hard "commit id"

    回退git commit,回退git add,回退工作区修改

 

git reset 恢复

git reset --soft "commit id"的恢复:再执行git commit(文件名);但此时的commit id已改变。

git reset --mixe "commit id"的恢复:git add (文件名);git commit(文件名)#commit id已变

git reset --hard "commit id" && git reflog #reflog就是HEAD的变化Log.

commit-id HEAD  动作

4220bf5 HEAD@{0}:  reset: #状态2

cc29b12 HEAD@{1}:  commit: 3 #状态3

git reset --hard cc29b12 #相当于回到了commit3, 撤销了撤销动作,其实就是恢复。

解释:执行git reset --hard "状态2的commit id" 回到了状态2,此时状态3已被删除。

通过git reflog查到状态3的commit id,再执行git reset --hard "状态3的commit id",相当于又恢复到了状态3,commit id不变。

 

git reset 与 git checkout的区别

※此处的安全指恢复的难易度。

※For 文件:对当前工程的单个文件进行操作,此时不能加参数。

 

16,git checkout -- <file>

丢弃工作区的修改

case 1 : 没有加入暂存区

git checkout -- file 相当于从本地仓库获取内容到工作目录,此时工作区的修改将因覆盖而被丢弃。

case 2:加入暂存区

git checkout -- file 相当于从暂存区获取内容到工作目录,即add到暂存区后的本地修改将因覆盖而被丢弃。

 

17,git revert (重新提交)

 

18,分支 (branch)

Git 的分支,其实本质上仅仅是指向提交对象的可变指针。 

master:为git默认分支

branch:为新建分支

 

18.1创建分支

git branch 查看分支

git branch branch1 //创建branch1分支,但HEAD还在master分支上;

git checkout -b branch1 //创建branch1分支,同时HEAD转移到branch1分支上;

 

19,git merge (合并)

①git checkout master //先切换到master分支

②git merge branch1 //再合并branch1到master,此时为重新生成一个新的提交。

 

20,git rebase(变基)

 

21,git cherry-pick

 

22,conflict (冲突)

解释:当两个分支对同一个文件同一行做出了修改,就会产生冲突。

 

解决冲突后,继续提交的方法:

①git merger 继续提交:git add;git commit

②git rebase 继续提交:git add;git rebase --continue

③git cherry-pick 继续提交:git add;git cherry-pick --continue

此时,还有小问题,无论如何都提交,再使用:git commit --allow-empty 可以完成提交。

 

23,git branch 参数

查看所有分支:git branch -a(all)

git branch -D branch_01 删除分支 #若当前HEADER在branch_01上,则不能删除;需先切换分支

git branch -vv 显示详细信息

git branch -u  跟踪分支

 

24,git 重写历史 

修改最后一次的提交message:git commit --amend

例:git commit --amend -m "新的commit Message" 

修改中间某次的提交message:git rebase -i HEAD~*    //*号用具体的数字。

此时,将显示提交信息,对内容做如下修改:

①edit:编辑某个提交内容,则会修改此提交内容

②删除一行:删除某个提交记录,则删除那个提交

③squash:压缩提交,即将多个提价合并成一个提交。

 

25,git stash (隐藏)

git stash:在切换分支前,隐藏暂未提交的改动

git stash list:显示隐藏

git stash pop:弹出隐藏

git stash apply:应用隐藏,此时并没有弹出;即在stash list还存在。

git stash --all:隐藏目录下所以改动

 

26,git bundle (打包)

说明:打包git仓库。

打包:git bundle create [*.bundle] HEAD [branch name]

[*.bundle]:为打包后生成的bundle名;例:test.bundle

[branch name]:被打包的分支名;例:master,branch01

例:git bundle create test.bundle HEAD master

解包:git clone *.bundle #把打包的仓库解压出来

例:git clone test.bundle

 

27,git patch(补丁)

•git diff:制作补丁  通用的patch  git apply:打补丁

git diff [commitid] [commitid] > [test.patch] 例:git apply test.patch

特点:不会自动提交;轻便;不够详细

 

•git format-patch:制作补丁 git专用补丁 git am:打补丁

git format-patch [commit-id] [-number] #对于该commit-id 向前数第number个提交。

打入某个提交的补丁;会自动提交这个补丁的内容

特点:很详细;文件比较多

 

28,git tag (标签)

新建标签:git tag [tag name] 例:git tag version01

显示全部标签:git tag

显示标签内容:git show [tag name]

轻量级标签:git tag [tag name]

附注标签:git tag -a [tag name] -m [message]

删除标签:git tag -d [tag name]

 

29,远程仓库

①git remote 命令:显示远程仓库  #origin为默认远程仓库

②添加远程仓库 #把远程仓库添加到本地;

git remote add <remote repo> <url> #<remote repo>为远程仓库名在本地的名称(可与远程仓库相同,也可以启个别名);<url>为远程仓库的url.

③添加远程仓库分支

git branch <new branch> #new branch为新建分支名称;

git push <remote repo> <new branch> #<remote repo>为远程仓库名。

④移除远程仓库

git remote rm <remote repo>

⑤移除远程仓库分支

git push <remote repo> --delete <branch>

 

30,git push (推)

基本命令: git push <remote name> <local branch>:<remote branch>

例:git push orange master:master #本地和远程都是master分支。

作用:把本地的修改推到远程仓库,并把相应的本地远程仓库分支更新到最新。

 

31,git fetch(取)

基命令:git fetch <remote name> <remote branch> #<remote name>为远程仓库名称;

 

作用:获取远程仓库的更新到本地远程仓库分支,本地分支不变

 

32,git pull (拉取)

 

基本命令:git pull <remote name> <remote branch>

作用:拉取远程仓库的更新,并和本地仓库当前分支合并

★git pull扩展

git pull = git fetch + git merge

例:

git pull origin master

git fetch origin master

git merge origin/master

 

git pull --rebase #以rebase的方式拉取。

 

33,分支跟踪

解释:某一个本地分支 跟踪 某一个远程分支。

git clone后,本地master分支会跟踪远程master分支。

Git 能自动地识别去哪个服务器上抓取、合并到哪个分支。

 

git checkout -b <new_branch> <remote/branch> 新建分支并设置远程跟踪分支

例:git checkout -b branch1 orange/branch1 #本地branch1跟踪远程branch1.

此时,git pull将直接从远程branch1拉取数据。

git branch -u <remote/branch> 在已有的分支上设置远程跟踪分支

git branch -vv 显示所有分支 并显示是否存在远程跟踪分支

 

34,ssh key秘钥

ssh的方式拉取远程代码,配置后操作不再需要输入用户名密码。

命令:ssh-keygen -t rsa -C "email"

    生成sshkey 在~/.ssh/id_rsa.pub

    把id_rsa.pub里面的内容拷贝到相应的代码管理工具的Add new sshkey

※加入ssh key后 push代码的时候不需要输入github账户名密码。

 

35,git clone扩展

git clone的实际动作如下:

①创建新目录

②git init

③git remote add origin "git clone后面的url"

④git fetch #拉取远程仓库的所有内容

⑤git checkout -b master origin/master #新建本地master跟踪origin/master

 

36,git远程操作

37,git blame <file> (责备)

使用场景:

当我们想看某一文件的某一行的出处时,就可以使用git blame

例:git blame file.cc

 

38,git bisect (二分查找)

git bisect start 开始查找

git bisect good <commit id> 开始时 标记好的commit

git bisect bad <commit id> 开始时 标记有问题的commit

git bisect good/bad       查找时 标记是否有问题

git bisect reset 恢复到查找前的状态

 

39,gitk

历史查看器

sudo apt-get install gitk

 

40,git gui

提交工具

sudo apt-get install git-gui

posted @ 2020-03-12 22:39  山的那一边  阅读(194)  评论(0编辑  收藏  举报