git命令详解史上最全啦

git命令详解

本文md文档下载地址

https://download.csdn.net/download/a254939392/89503768

本文md文档下载点击跳转

git工作区、暂存区、本地仓库、远程仓库

工作区–>git add->暂存区(stage/index)–>git commit–>本地库–>git push–>远程仓库

从远程clone 项目

输入账号密码

git clone https://github.com/1715656022/spring-me.git
Cloning into 'spring-me'...
Username for 'https://github.com': 1715656022@qq.com
remote: Enumerating objects: 271, done.
remote: Counting objects: 100% (271/271), done.
remote: Compressing objects: 100% (191/191), done.
remote: Total 271 (delta 68), reused 253 (delta 56), pack-reused 0
Receiving objects: 100% (271/271), 97.80 KiB | 227.00 KiB/s, done.
Resolving deltas: 100% (68/68), done.


git checkout

​ git checkout命令用于切换分支或恢复工作树文件。git checkout`是git最常用的命令之一,同时也是一个很危险的命令,因为这条命令会重写工作区

 #取出master版本的head
 $ git checkout master
 #在当前分支上 取出 tag_name 的版本
 $ git checkout tag_name
 #放弃当前对文件file_name的修改
 $ git checkout  master file_name
 #取文件file_name的 在commit_id是的版本。commit_id为 git commit 时的sha值
 $ git checkout  commit_id file_name

Git 运行配置

git config --global user.name <your name>
git config --global user.email <your_email@example.com>
git config --global push.default simple
git config --global core.quotepath false
git config --global core.editor /usr/bin/vim
git config --global credential.helper store
git config --global credential.helper wincred
git config --global core.ignorecase false

user.name;设置你的称呼;
user.email;设置你的邮箱;

查看所有的(name.key)/(value)

$ git config -l
core.symlinks=false
core.autocrlf=true
core.fscache=true
color.diff=auto
color.status=auto
color.branch=auto
color.interactive=true
help.format=html
rebase.autosquash=true
http.sslbackend=openssl
http.sslcainfo=D:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt
user.name=java_1715656022
user.email=1715656022@qq.com
filter.lfs.required=true
filter.lfs.clean=git-lfs clean -- %f
filter.lfs.smudge=git-lfs smudge -- %f
filter.lfs.process=git-lfs filter-process
credential.helper=store
core.quotepath=false
core.repositoryformatversion=0
core.filemode=false
core.bare=false
core.logallrefupdates=true
core.symlinks=false
core.ignorecase=true
remote.origin.url=https://github.com/1715656022/spring-me.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master

其他配置

git config -unset;Remove the line matching the key from config file.
git config -unset-all:Remove all lines matching the key from config file.
git config --global core.quotepath false:解决 Windows Git Bash、Linux 下的中文转码问题;
git config --global core.editor /usr/bin/vim:OS X 下 merge 命令 vi error 问题;通常 core.editor=vim。
git config --global credential.helper wincred:Win Git Bash 启用 http/https 协议时设置。
git config --global core.ignorecase false
设置大小写敏感,保持 Mac/Win/Linux一致性;在目录名大小写修改时,git可正常提交;

解决 CRLF 问题的通常做法

错误示例:

$ git add README.md
warning: LF will be replaced by CRLF in README.md.
The file will have its original line endings in your working directory

window下:

git config --global core.autocrlf true

Linux & Mac

git config --global core.autocrlf input

解决 Windows Git Bash、Linux 下的中文转码问题

git config --global core.quotepath false
$ git status
On branch master
Your branch is up to date with 'origin/master'.

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:   README.md

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

        "git\345\221\275\344\273\244.md"

参考:https://www.jianshu.com/p/f29ca723db4f

git remote 命令的用法

#查看关联的远程仓库的名称
git remote
# 查看关联的远程仓库的详细信息
git remote -v
origin  https://github.com/1715656022/spring-me.git (fetch)
origin  https://github.com/1715656022/spring-me.git (push)

远程仓库的名称一般默认为 origin ,当然,你可以设置为其他的名称

通过 git clone 下载项目到本地时,项目文件夹中的 .git 目录就是版本库目录。

.git 目录中的 config 文件中有远程仓库的关联配置。

git status 命令 工作区 暂存区

查看本地工作区、暂存区中文件的修改状态

$ git status
On branch master
Your branch is up to date with 'origin/master'.

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   README.md #本地修改并且git add
        new file:   dddd	#本地新增并且git add
        deleted:    delete_test	#本地删除并且git add

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

        test

#绿色:本地磁盘数据,作者修改README.md  已经git add
#红色:test 为新建的文档,并未add
$ ll
total 2
-rw-r--r-- 1 Lenovo 197121 20 917 12:59 README.md
-rw-r--r-- 1 Lenovo 197121 13 917 12:59 test

git log 提交历史查询

$ git log
commit 5f3ce7c6eb63db202b05f89ada07e1efe6c0ca76 (HEAD -> master)
Author: java_1715656022 <1715656022@qq.com>
Date:   Tue Sep 17 14:12:59 2019 +0800

    test1sdsdsssssssssssssssssssssssss

commit 005cf5508ed2c3de995c59c7c7fa0d028a5962da (origin/master, origin/HEAD)
Author: java_1715656022 <1715656022@qq.com>
Date:   Tue Sep 17 13:49:36 2019 +0800

    dfd

commit 09a683a406126a57f113580ce74ab16a4ad3850e
Author: java_1715656022 <1715656022@qq.com>
Date:   Tue Sep 17 13:46:49 2019 +0800

    adfs

commit 78bd1b429b42e682b65ca4cc0bd748333c921efb
Author: 1715656022 <1715656022@qq.com>
Date:   Tue Sep 17 12:55:40 2019 +0800

    Initial commit

git log 会按提交时间列出所有的更新,最近的更新排在最上面。看到了吗,每次更新都有一个 SHA-1 校验和、作者的名字和电子邮件地址、提交时间,最后缩进一个段落显示提交说明。

-p 选项展开显示每次提交的内容差异,用 -2 则仅显示最近的两次更新
git log -p -2
commit 5f3ce7c6eb63db202b05f89ada07e1efe6c0ca76 (HEAD -> master, origin/master, origin/HEAD)
Author: java_1715656022 <1715656022@qq.com>
Date:   Tue Sep 17 14:12:59 2019 +0800

    test1sdsdsssssssssssssssssssssssss

diff --git a/README.md b/README.md
index a65b706..0fd31a2 100644
--- a/README.md
+++ b/README.md
@@ -1 +1 @@
-sfdsdfssdfsdfd# mytestgit
+sfdsdfssdfsdsfdsdfsdfd# mytestgit
diff --git a/dddd b/dddd
new file mode 100644
index 0000000..e10e63c
--- /dev/null
+++ b/dddd
@@ -0,0 +1 @@
+sdfsfsa

按条件筛取

#按人查询:
git log --author=username
#按关键词查询
git log --grep=keyword
#按文件查询:
$ git log -- ViewModel/TableViewCell.m
#按分支/Tag/远程分支查询:
$ git log branch_name/tag/remote_branch_name

git add 新增到暂存区

#. 增加当前目录所有文件
git add .
#增加具体单文件
git add README.md
#增加具体多文件
git add README.md README2.md README3.md
#增加文件夹
git add foldname

git reflog

​ 可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)

$ git reflog
fd34c9a (HEAD -> master) HEAD@{0}: commit (merge): gi d
b7f22a1 HEAD@{1}: reset: moving to b7f22a11657b62f246ec9bdc506f028a51e778a6
b7f22a1 HEAD@{2}: commit: 222222222
adbb400 HEAD@{3}: commit: dd
5f3ce7c HEAD@{4}: commit: test1sdsdsssssssssssssssssssssssss
005cf55 HEAD@{5}: commit: dfd
09a683a HEAD@{6}: commit: adfs
78bd1b4 HEAD@{7}: clone: from https://github.com/1715656022/mytestgit.git

git reset 撤销

放弃修改,同步运程仓库,回退以前某个版本

HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。

		  穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。

		要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。
#reset 三种类型
git reset [--soft | --mixed | --hard
--mixed :会保留源码,只是将git commit和index 信息回退到了某个版本.
   	 git reset 默认是 --mixed 模式
		 git reset --mixed  等价于  git reset
--soft : 保留源码,只回退到commit 信息到某个版本.不涉及index的回退,如果还需要提交,直接commit即可
--hard : 源码也会回退到某个版本,commit和index 都回回退到某个版本.(注意,这种方式是改变本地代码仓库源码)
 
#实例:放弃所有修改,完全同步运程仓库
git reset --hard origin/master

1 git add 后并未commit 。

#从暂存区撤销README.md文件
git reset HEAD README.md
#撤销到修改前
git checkout -- README.md

2 git commit后撤销

 git log
commit fd34c9a1b73ecb43d8b74ded5351d412c5675723 (HEAD -> master)
Merge: b7f22a1 a69551c
Author: java_1715656022 <1715656022@qq.com>
Date:   Wed Sep 18 10:23:21 2019 +0800

    注释

commit b7f22a11657b62f246ec9bdc506f028a51e778a6
Author: java_1715656022 <1715656022@qq.com>
Date:   Tue Sep 17 19:45:24 2019 +0800

# git reset --hard commitid进行回退
git reset --hard fd34c9a1b73ecb43d8b74ded5351d412c5675723

对于已经把代码push到线上仓库,你回退本地代码其实也想同时回退线上代码,回滚到某个指定的版本,线上,线下代码保持一致.你要用到下面的命令

revert
git revert用于反转提交,执行evert命令时要求工作树必须是干净的.
git revert用一个新提交来消除一个历史提交所做的任何修改.
revert 之后你的本地代码会回滚到指定的历史版本,这时你再 git push 既可以把线上的代码更新.(这里不会像reset造成冲突的问题)
revert 使用,需要先找到你想回滚版本唯一的commit标识代码,可以用 git log 或者在adgit搭建的web环境历史提交记录里查看.
git revert c011eb3c20ba6fb38cc94fe5a8dda366a3990c61
通常,前几位即可
git revert c011eb3
git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit
看似达到的效果是一样的,其实完全不同.

第一:
上面我们说的如果你已经push到线上代码库, reset 删除指定commit以后,你git push可能导致一大堆冲突.但是revert 并不会.

第二:
如果在日后现有分支和历史分支需要合并的时候,reset 恢复部分的代码依然会出现在历史分支里.但是revert 方向提交的commit 并不会出现在历史分支里.

第三:

reset 是在正常的commit历史中,删除了指定的commit,这时 HEAD 是向后移动了,而 revert 是在正常的commit历史中再commit一次,只不过是反向提交,他的 HEAD 是一直向前的.

git rebase 合并多次commit

​ 使用 git rebase 合并多次commit。 当你提交的代码后,管理员发现,您的代码不能提交到服务器上,主要原因在于,你的commit 中和服务器中的有些commit不再同一时间轴上,即:你的有些commit要插入到服务器中的某些commit之间,这样就会造成代码的冲突。所以这个时候就要使用git rebase。

1.1 使用 git log 查看历史提交记录

1.2 合并最后四次的提交

git rebase -i HEAD~4

1.3 修改第2-4行的第一个单词pick为squash

1.4 然后保存退出,git会压缩提交历史,如果有冲突,需要修改,修改的时候要注意,保留最新的历史,不然我们的修改就丢弃了

1.5 修改以后要记得敲下面的命令
git add .

  git rebase --continue 

1.6 如果你想放弃这次压缩的话,执行以下命令:
git rebase --abort

git show 命令 查看 hashid log详情

git show命令同git log -p输出类似,只不过它只显示一个commit的内容,如果不指定commit hash, 它默认输出HEAD指向commit的内容.

使用示例:

$ git show 78bd1b429b42e682b65ca4cc0bd748333c921efb #来源git log hash
commit 78bd1b429b42e682b65ca4cc0bd748333c921efb
Author: 1715656022 <1715656022@qq.com>
Date:   Tue Sep 17 12:55:40 2019 +0800

    Initial commit

diff --git a/README.md b/README.md
new file mode 100644
index 0000000..5071953
--- /dev/null
+++ b/README.md
@@ -0,0 +1 @@
+# mytestgit

$ git log
commit 5f3ce7c6eb63db202b05f89ada07e1efe6c0ca76 (HEAD -> master, origin/master, origin/HEAD)
Author: java_1715656022 <1715656022@qq.com>
Date:   Tue Sep 17 14:12:59 2019 +0800

    test1sdsdsssssssssssssssssssssssss

commit 005cf5508ed2c3de995c59c7c7fa0d028a5962da
Author: java_1715656022 <1715656022@qq.com>
Date:   Tue Sep 17 13:49:36 2019 +0800

    dfd

commit 09a683a406126a57f113580ce74ab16a4ad3850e
Author: java_1715656022 <1715656022@qq.com>
Date:   Tue Sep 17 13:46:49 2019 +0800

    adfs

commit 78bd1b429b42e682b65ca4cc0bd748333c921efb
Author: 1715656022 <1715656022@qq.com>
Date:   Tue Sep 17 12:55:40 2019 +0800

    Initial commit

git diff 比较文件差异

#git diff [文件名] , 将工作区中的文件和暂存区进行比较
$ git diff README.md
diff --git a/README.md b/README.md
index e1089ab..168e976 100644
--- a/README.md
+++ b/README.md
#可以查看工作区和版本库的差别
$ git diff head
diff --git a/README.md b/README.md
index e1089ab..168e976 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,2 @@
-qqw1111111esdfsadfsa
+qqw1111111esdfsadfs
+22222222222a
#可以查看工作区和版本库的差别
$ git diff head
diff --git a/README.md b/README.md
index e1089ab..168e976 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,2 @@
-qqw1111111esdfsadfsa
+qqw1111111esdfsadfs
+22222222222a
#比较的是暂存区和版本库的差别
$ git diff --cached

分支操作

列出本地所有分支

$ git branch
* master
#注意:当前所在的分支会被星号标示出来

查看项目分支(包括本地和远程)

$ git branch -a
  master
  my-branch-nv
* my-chanch-1
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
  remotes/origin/my-chanch-1

创建本地库新分支

$ git branch my-branch-nv
#查看
$ git branch
* master
  my-branch-nv

删除本地库指定分支

$ git branch -d my-branch-nv
Deleted branch my-branch-nv (was c1e6429).

删除远程库分支

# git push origin --delete 分支名称
$ git push origin --delete my-branch-nv
To https://github.com/1715656022/mytestgit.git
 - [deleted]         my-branch-nv

切换分支

# git checkout 分支名称
$ git checkout my-branch-nv
Switched to branch 'my-branch-nv'
M       README.md

$ git branch
  master
* my-branch-nv
#删除异常情况
$ git branch -D my-branch-nv
error: Cannot delete branch 'my-branch-nv' checked out at 'D:/test/mytestgit'

必须要切换到其他分支或者master分支去删除此分支

提交本地分支到远程库

# git push   origin 分支名称
$ git push   origin my-branch-nv
Enumerating objects: 28, done.
Counting objects: 100% (28/28), done.
Delta compression using up to 8 threads
Compressing objects: 100% (14/14), done.
Writing objects: 100% (24/24), 1.65 KiB | 338.00 KiB/s, done.
Total 24 (delta 4), reused 0 (delta 0)
remote: Resolving deltas: 100% (4/4), done.
remote:
remote: Create a pull request for 'my-branch-nv' on GitHub by visiting:
remote:      https://github.com/1715656022/mytestgit/pull/new/my-branch-nv
remote:
To https://github.com/1715656022/mytestgit.git
 * [new branch]      my-branch-nv -> my-branch-nv

分支实战:合并分支到master

1 分支代码提交到远程分支仓库

假如我们现在在dev分支上,刚开发完项目,执行了下列命令

git add .
git commit -m 'dev_commit'
git push -u origin dev

2 切换到master分支上

我们要把dev分支的代码合并到master分支上 该如何?
首先切换到master分支上

$ git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.

3 pull 代码master为最新

如果是多人开发的话 需要把远程master上的代码pull下来,保证master为最新的

$ git pull origin master
From https://github.com/1715656022/mytestgit
 * branch            master     -> FETCH_HEAD
Already up to date.

4 我们把dev分支的代码合并到master上

$ git merge dev
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Automatic merge failed; fix conflicts and then commit the result.

冲突实战:冲突合并

未完待续

git同时推送到码云和github

git ssh密钥配置

#1 进入~目录
$ cd ~/.ssh
#生成rsa文件
$ ssh-keygen -t rsa -C "254939392@qq.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/Lenovo/.ssh/id_rsa):【输入报文文件名称,此处直接回车取默认】
Enter passphrase (empty for no passphrase):【输入密码】
Enter same passphrase again:【输入确认密码】
Your identification has been saved in /c/Users/Lenovo/.ssh/id_rsa.
Your public key has been saved in /c/Users/Lenovo/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:vCUk9ryBpnzVckr0zmNxmc5NQl2uR9TOFcjhIHb6FB4 254939392@qq.com
The key's randomart image is:
+---[RSA 2048]----+
|         o E..o.=|
|        . = =+ +o|
|      o o. o...o+|
|     . O oo. o oo|
|      o S *.= o .|
|   . o o % = + . |
|    o . + = o .  |
|     .   . .     |
|                 |
+----[SHA256]-----+

#查看ssh key
$ cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCffc6MTS8VztL/+7Y2uQVRTfPniRH5Ufk7A+MI7/htBZKvf2YpUIc/RV5KtaVHSjiXZSHwPgQZpeOkjxAP8W+mMc0F7mc8mTlZFhT9PdWCGS2abvn2HaaG0bu9cybNFNSpimm6FZ1QdpqfM9NHeu0M2nSxCzK9MNZSRpresOJVxrxeDffPOneh63biS4Hjl1mTjx/i19tSURWWhPcFU84ZzB1cnEM07sAEkU9dPXzIWORbzHKmMCZlnyK5GHryTRiyZH26EP8uX7qsVUBp1fc6m+f/BD8DGYn0ZScdH6Ge+pJLbkvL7h4k+u4oSUgdjwVsNauhOZbGuVgR1nkucSjz 254939392@qq.com
#复制上面的key到github 或者gitee ssh处

#测试是否成功
$  ssh -T git@github.com
The authenticity of host 'github.com (13.250.177.223)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,13.250.177.223' (RSA) to the list of known hosts.
Enter passphrase for key '/c/Users/Lenovo/.ssh/id_rsa':
Hi kfd-bigdata/kfd! You've successfully authenticated, but GitHub does not provide shell access.


#
[root@bigdata kfd]# git push gitee


git 码云 配置同上

修改git配置文件

[root@bigdata kfd]# cd ./.git/

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
[remote "origin"]
        url = git@github.com:kfd-bigdata/kfd.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master
[remote "gitee"]
        url = git@gitee.com:kfd-bigdata/kfd.git
        fetch = +refs/heads/*:refs/remotes/origin/*

推送github

#
[root@bigdata kfd]# git push origin
#
[root@bigdata kfd]# git push

推送码云

#
[root@bigdata kfd]# git push gitee

  • 14
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逆天-逍遥哥哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值