Loading

git命令

git基本原理

工作区:即自己当前分支所修改的代码,git add xx 之前的!不包括 git add xx 和 git commit xxx 之后的。

暂存区:已经 git add xxx 进去,且未 git commit xxx 的。

本地分支:已经git commit -m xxx 提交到本地分支的。

git基础命令

查看状态

[root@git git_data]# git status
# On branch master				# 暂存区数据
#
# Initial commit				# 未跟踪			
#
nothing to commit (create/copy files and use "git add" to track)

文件操作

新建文件

[root@git git_data]# touch {1,2,3}
[root@git git_data]# ll
total 0
-rw-r--r-- 1 root root 0 Sep 17 16:38 1
-rw-r--r-- 1 root root 0 Sep 17 16:38 2
-rw-r--r-- 1 root root 0 Sep 17 16:38 3

提交文件

#提交文件到暂存区
[root@git git_data]# git add 1
[root@git git_data]# git status

#提交所有工作区域的文件
[root@git git_data]# git add .
[root@git git_data]# git status

#提交暂存区文件到本地仓库
git commit -m "提交注释"

删除文件

1>将暂存区的文件移除
[root@git git_data]# git rm --cache 1
rm '1'
[root@git git_data]# git status
2>删除工作目录的文件
[root@git git_data]# rm -rf 1
[root@git git_data]# git status
3>同时删除
#同时删除暂存区和工作区的文件
[root@git git_data]# git rm -f 2
rm '2'
[root@git git_data]# git status	

提交到仓库

#将暂存区的文件提交到仓库
[root@git git_data]# git commit -m "add new file 3"
[master (root-commit) a4566ae] add new file 3
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 3
 
 -m		#注释

#查看状态,没有可提交的内容
[root@git git_data]# git status
# On branch master
nothing to commit, working directory clean

修改文件

1>重命名
#方式一:
1.本地重命名
[root@git git_data]# mv 3 3.txt
[root@git git_data]# git status

2.从暂存区删除文件
[root@git git_data]# git rm --cached 3
rm '3'

3.再次提交文件
[root@git git_data]# git add 3.txt
[root@git git_data]# git status

4.提交到本地仓库
[root@git git_data]# git commit -m "rename 3.txt"

2>同时修改

1.同时修改暂存区和工作目录的文件名字
[root@git git_data]# git mv 3.txt 3
[root@git git_data]# git status

2.提交本地仓库
[root@git git_data]# git commit -m "rename 3 too"

对比文件

git status 只能查看区域的状态的不同,不能查看内容是否相同

git diff #可以查看文件的不同

# 对比工作目录和暂存区的文件
[root@git git_data]# git diff 3
diff --git a/3 b/3
index 573541a..58c9bdf 100644
--- a/3
+++ b/3
@@ -1 +1 @@
-0
+111


# 对比本地仓库和暂存区的数据
[root@git git_data]# git diff --cached 3
diff --git a/3 b/3
index 573541a..58c9bdf 100644
--- a/3
+++ b/3
@@ -1 +1 @@
-0
+111

提交历史

当我们执行git commit后,发现代码错了,需要回滚
git任何操作都相当于做快照,我们可以恢复到任意时刻

查看历史

[root@git git_data]# git log 
commit 43f49f38976593194516ab68228faaa09b746270
Author: lhd <1240206455@qq.com>
Date:   Thu Sep 17 17:09:21 2020 +0800

    modified 3

commit 90f573fa6524704cc3457cd3e3a1ccb24e5230ef
Author: lhd <1240206455@qq.com>
Date:   Thu Sep 17 16:58:06 2020 +0800

    rename 3 too

查看简单的历史提交

[root@git git_data]# git log --oneline 
43f49f3 modified 3
90f573f rename 3 too
5d61056 rename 3.txt
a4566ae add new file 3

查看当前分支

[root@git git_data]# git log --oneline --decorate
43f49f3 (HEAD, master) modified 3
90f573f rename 3 too
5d61056 rename 3.txt
a4566ae add new file 3

查看提交的详细信息

[root@git git_data]# git log -p

显示最近提交的数据

[root@git git_data]# git log --oneline  -2			# 只显示两行
43f49f3 modified 3
90f573f rename 3 too

恢复了历史数据

1>暂存区数据取出至工作区

#从暂存区将数据取出
[root@git git_data]# git checkout -- 3

2>修改了工作区并且提交到了暂存区

# 回到上一次提交的节点(也就是本地仓库退回暂存区)
[root@git git_data]# git reset HEAD 3
Unstaged changes after reset:
M	3

#从暂存区将数据取出(将暂存区数据取出至工作区)
[root@git git_data]# git checkout -- 3
[root@git git_data]# git diff 3

3>修改了工作区并且提交到了暂存区在提交到了本地仓库

1.修改文件并一路提交到本地仓库
[root@git git_data]# echo 333 > 3
[root@git git_data]# git add 3
[root@git git_data]# git commit -m "错误的提交"
[master 3044a5a] 错误的提交
 1 file changed, 1 insertion(+), 1 deletion(-)
 
2.发现错误,想要回滚
#查看提交历史
[root@git git_data]# git log --oneline 
3044a5a 错误的提交
43f49f3 modified 3
90f573f rename 3 too
5d61056 rename 3.txt
a4566ae add new file 3

3.使用指针回到上一次提交的时间点
[root@git git_data]# git reset --hard 43f49f3
HEAD is now at 43f49f3 modified 3
[root@git git_data]# git log --oneline --decorate
43f49f3 (HEAD, master) modified 3
90f573f rename 3 too
5d61056 rename 3.txt
a4566ae add new file 3

4.发现回滚错了,又看不到新提交的时间点
#查看所有的经历时间节点
[root@git git_data]# git reflog 
43f49f3 HEAD@{0}: reset: moving to 43f49f3
3044a5a HEAD@{1}: commit: 错误的提交
43f49f3 HEAD@{2}: commit: modified 3
90f573f HEAD@{3}: commit: rename 3 too
5d61056 HEAD@{4}: commit: rename 3.txt
a4566ae HEAD@{5}: commit (initial): add new file 3

5.回到回滚之前的时间点
[root@git git_data]# git reset --hard 3044a5a
HEAD is now at 3044a5a 错误的提交
[root@git git_data]# cat 3 
333

开发常用命令

拉取

克隆代码

git clone 代码路径

拉取代码

git pull 

本地拉取线上的分支

git stash	隐藏本地更改代码
git fetch	跟新代码
git rebase origin/分支名	合并远程分支代码
git stash apply	 	打开刚刚隐藏的代码

操作

分支

# 新建并切换dev分支
git checkout -b dev

# 切换分支
git checkout matser

# 删除分支
git branch -d dev

合并代码

git merge dev  合并dev分支

处理冲突

冲突文件解决后
git add 冲突文件全路径加文件名
git rebase --continue   处理冲突

提交

标签

#打标签
git tag -a v1.0 4566cb6 -m "测试给指定提交打标签"
#删除标签
git tag -d v1.0

提交代码

先执行2步骤,拉取线上最新的代码
git add 需要提交的代码路径
git push origin 分支名

放弃本地更改,回滚远程分支

git reset --hard origin/分支名

git代码回滚

开发同事相互协作,共同开发,合并代码后出现冲突,解决冲突,但是解决了几个版本以后还是冲突,并且出现代码缺失问题。开发同事提出还原版本到合并之前。

git回滚方式有两种
git reset
git revert
revert是放弃指定提交的修改,但是会生成一次新的提交,需要填写提交注释,以前的历史记录都在;
reset是指将HEAD指针指到指定提交,历史记录中不会出现放弃的提交记录。

HEAD 是当前分支引用的指针,它总是指向该分支上的最后一次提交。这表示 HEAD 将是下一次提交的父结点。
通常,理解 HEAD 的最简方式,就是将它看做 你的上一次提交 的快照

git reset

git reset的作用:就是修改HEAD的位置,即将HEAD指向的位置改变为之前存在的某个版本。
适用场景:
如果我们想直接回到之前的某一版本,但是不想保留该目标版本后面的版本,就可以用这种方法。

git reset HEAD --file
回退暂存区里的某个文件,回退到当前版本工作区状态

git reset –-soft 目标版本号 
可以把版本库上的提交回退到暂存区,修改记录保留

git reset –-mixed 目标版本号 
可以把版本库上的提交回退到工作区,修改记录保留

git reset –-hard  
可以把版本库上的提交彻底回退,修改的记录全部revert

回滚具体操作:
分支操作者

git checkout <branch_name>
# 切换到目标分支上

git log
# 查找到需要回滚到的commit_id

git reset --hard <commit_id>
# 本地目标分支上重置代码到上面指定的commit_id, 
# 注意:该commit_id之后的所有提交都会丢失。
# 执行完后,HEAD的位置已经在该commit_id的位置

git push -f	 等同于  git push --force
# 在上一条命令中,已经在本地分支中reset好,接下来让远程分支也有相同的效果,可以直接运行这条命令。
# 执行后,可以去代码托管网站查看

git push -f origin <branch_name>
# 如果目标分支和远程分支没有关联上,可以用这条命令,指出远程分支

其他分支使用者

git checkout <branch_name>
# 切换到目标分支上

git reset --hard origin/branch_name
# 这步就是其他同事把自己本地branch_name重置到与origin/branch_name一致,
# 注意
# --hard参数会丢弃超过origin的所有commit
# 如果不想丢弃可以用 --mixed 或 --soft,具体用哪个根据自己情况来

git revert

Git revert作用: 给你一个生成一个新提交的选项,提交将会撤消一个已存在提交的所有修改。
适用场景:
如果我们想撤销之前的某一版本,但是又想保留该目标版本后面的版本,记录下这整个版本变动流程,就可以用这种方法。

git log
# 找到需要删除的版本的commit_id

git revert -n <commit_id>
# 本地目标分支撤销指定的commit_id
# 注意:做完上面的操作后,可能会出现冲突,需要先解决冲突,在git add,
# 然后使用 git commit 提交

git push
# 在上一条命令中,已经在本地分支中revert好,接下来让远程分支也有相同的效果,可以直接运行这条命令。
# 执行后,可以去代码托管网站查看

https://www.cnblogs.com/tcy1/p/13687634.html
https://blog.csdn.net/u014163312/article/details/105718418

posted @ 2022-09-28 13:51  萝卜青菜~  阅读(19)  评论(0编辑  收藏  举报