一、Git配置

当安装完 Git 应该做的第一件事就是设置你的用户名称与邮件地址。 这样做很重要,因为每一个 Git 的提交都会使用这些信息,并且它会写入到你的每一次提交中,不可更改
– global全局配置
通过 --global 选项可以设置全局配置信息

git config --global user.email “dahuadj@qq.com”;
git config --global user.name “dahua”

在这里插入图片描述

检测 打开c盘,查看 .gitconfig文件用记事本打开

C:\Users\wiat\.gitconfig

进入希望纳入 git 版本控制的项目目录,使用 git init 初始化,然后初始化后的文件夹能看到的区域就叫工作区

$ git init

Initialized empty Git repository in D:/workspace/project/program/.git/

该命令将创建一个名为 .git 的子目录,这个子目录含有你初始化的 Git 仓库中所有的必须文件,这个目录也是上面我们说的三个区域之一,这个目录也是 Git 保存数据记录的地方,非常重要,如非必要,不要改动

当一个项目被 Git 初始化以后,只是表示我们希望通过 Git 来管理当前的这个项目文件的不同时期版本记录,但是这个时候项目中已存在的文件,或者以后新增的文件都是没有进入版本控制管理的,它们是 未追踪(Untracked) 的状态

二、Git管理常用操作

1、Git文件夹创建文件
既然 Git 是一种对文件进行操作的软件,那么Git肯定也是可以创建文件的,创建出来的文件会被存放在工作区

wiat@DESKTOP-L159V8T MINGW64 /d/workspace/project/git_test (master)$ git > 2.txt
wiat@DESKTOP-L159V8T MINGW64 /d/workspace/project/git_test (master)$ ls
2.txt  test.txt

2、添加工作区文件到暂存区
暂存区就是通过 git add 文件存放的地方在要提交之前

wiat@DESKTOP-L159V8T MINGW64 /d/workspace/project/git_test (master)$ echo "hello" >> 2.txt
wiat@DESKTOP-L159V8T MINGW64 /d/workspace/project/git_test (master)$ cat 2.txt
hello

git add 文件

# 添加单个文件
git add 1.txt
# 添加多个文件
git add 2.txt 3.txt
# 添加整个目录
git add ./a
# 添加多个目录
git add ./b ./c
# 添加所有文件
git add .

3、查看当前工作区文件状态
git status 查看当前工作区的文件的状态

 git status

git status

On branch master
No commits yet
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        2.txt
        test.txt

当前文件已经被添加至暂存区,等待提交到仓库

wiat@DESKTOP-L159V8T MINGW64 /d/workspace/project/git_test (master)
$ ls -a
./  ../  .git/  2.txt  test.txt

4、暂存区的文件提交至本地仓库

$ git commit -m "V1.0"
[master (root-commit) 0118026] V1.0
 2 files changed, 2 insertions(+)
 create mode 100644 2.txt
 create mode 100644 test.txt

用命令git commit把文件提交到Git仓库(-m后面输入的是本次提交的说明)
为什么Git添加文件需要add,commit一共两步呢?因为commit可以一次提交很多文件,所以你可以多次add不同的文件,比如:

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

四、版本管理
现在已经成功添加并提交了一个 2.txt 文件,接着继续修改 2.txt,修改内容如下:

$ echo "add 123" >> 2.txt

接着运行git status命令可以查看仓库当前的状态,通过输出得知 readme.txt 被修改过了,但还没有准备提交

$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   2.txt

假如你休假之后继续上班,但已经记不清上次怎么修改的 2.txt,这时可以用git diff这个命令看看

现在对文件进行提交

$ git add 2.txt
warning: in the working copy of '2.txt', LF will be replaced by CRLF the next time Git tou
ches it
$ git commit -m "add 1"
[master 061ca5e] add 1
 1 file changed, 1 insertion(+)

提交后,再用git status命令查看仓库的当前状态:

$ git status
On branch master
nothing to commit, working tree clean

五、版本回退
在实际工作中,我们怎么知道 readme.txt 文件一共有几个版本被提交到Git仓库里了呢?这时就用到git log命令了。
git log命令显示从最近到最远的提交日志

$ git log
commit 061ca5e383b77ab72e5ad57633bf3adfffba2ee0 (HEAD -> master)
Author: dahua <dahuadj@qq.com>
Date:   Wed Aug 30 14:17:49 2023 +0800
    add 1
    
commit 01180266efcfa99bd3e0999501a0bbb52ff51c30
Author: dahua <dahuadj@qq.com>
Date:   Wed Aug 30 14:09:12 2023 +0800
    V1.0

如何把 2.txt 回退到上一个版本呢?
拉取最近一次提交到暂存区,该操作不影响工作区

$ cat 2.txt
hello
add 123
$ git reset HEAD^
Unstaged changes after reset:
M       2.txt

执行“git checkout 文件名”,从暂存区拉取到工作区

$ git checkout .
Updated 1 path from the index

如何把 2.txt 回退到指定版本呢?

1、查看版本号:git log查找历史或使用git reflog命令查找合并操作的commit ID,也可以上代码托管网页上查看history,找到需要回滚的目标版本号
2、 使用git reset --hard 版本名命令将版本回退。此命令会将HEAD指针、当前分支指针和索引区都指向指定的commit ID,并重置工作区为该版本。

$ git log
commit 315b68efffe767306838869cfe435b1d33b7678f
Author: dahua <dahuadj@qq.com>
Date:   Wed Aug 30 14:28:48 2023 +0800

    V1.1
$ git reset --hard 315b68efffe767306838869cfe435b1d33b7678f
HEAD is now at 315b68e V1.1

步骤2:“git checkout 文件名”,从暂存区拉取到工作区。

$ cat 2.txt
hello
add 123
147

3、使用git push -f提交更改,此时如果用“git push”会报错,因为我们本地库HEAD指向的版本比远程库的要旧,用“git push -f”强制推上去。
//把当前分支重命名为main

$ git branch -M main

然后执行命令git remote add origin + 仓库地址

$ git remote add origin https://github.com/dahuadj/dahuadj.git

注:如果执行后出现 remote origin already exists 就是异常
解决方法:先执行 git remote rm origin 再执行git remote add origin + 仓库地址

$ git remote rm origin

提交时,需要输入验证码同意git上传到github
//用本地的main覆盖远端的main

$ git push -u origin main

1.查看所有分支
用命令:git branch -a
2.创建新分支
命令:git branch test。将会创建一个名为test的新分支
把新分支推送到远程分支(github仓库上):
$ git push origin test
3.切换分支
$ git checkout test
$ git push --set-upstream origin test
4.删除本地分支test
$ git branch -d test
5.删除远程分支
删除完本地,就应该删除远程了。输入以下命令:
$ git branch -r -d origin/test

创建分支:

git branch branch_name

切换分支:

git checkout branch_name

查看当前分支:

git branch

获取所有分支:

git fetch

合并某分支到当前分支:

git merge branch_name

删除分支:

git branch -d branch_name

强制删除分支(用于为合并就删除时):

git branch -D branch_name

7.彻底回退到某个commit
先使用以下命令查看想回退到的commit的id是多少,id就是一串长长的数字。

git log

然后使用:(注意命令中的两个“-”)以下命令,彻底回退到这个commitid上。

git reset --hard <commit_id>

如果想清空这个commitid之后所有已经提交了的commit,则继续执行以下命令:
注意是两个横杠

git push origin HEAD --force      

剔除某次提交(删除某次提交)
使用命令:git revert ,网上说的rebase、reset之类的都不对,正确的应该是用revert。

git revert <commit-id>
/drives/d/workspace/Resource/doc_and_source_for_livestream   master  git push -u origin master
Username for 'https://gitee.com':
Password for 'https://hu-dahua@gitee.com':
To https://gitee.com/hu-dahua/weidongshan_live_doc.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'https://gitee.com/hu-dahua/weidongshan_live_doc.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

从提示语中可以看出是,问题(Non-fast-forward)的出现原因在于:git仓库中已经有一部分代码,所以它不允许你直接把你的代码覆盖上去。于是你有2个选择方式:
1、强推,即利用强覆盖方式用你本地的代码替代git仓库内的内容,如果远程仓库是刚建的,没有代码,可以这样操作,尽量避免这种操作方法。

master  git push -f -u origin master
Username for 'https://gitee.com':
Password for 'https://hu-dahua@gitee.com':
Enumerating objects: 5634, done.
Counting objects: 100% (5634/5634), done.
Delta compression using up to 8 threads
Compressing objects: 100% (2651/2651), done.
Writing objects:  46% (2618/5634), 332.73 MiB | 1.19 MiB/s

2、先把git的东西fetch到你本地然后merge后再push

参考链接:https://blog.csdn.net/kiritomzzz/article/details/131546316
https://blog.csdn.net/catshitone/article/details/54973968
https://blog.csdn.net/pinnuli/article/details/81292703?ops_request_misc=&request_id=&biz_id=102&utm_term=%E8%87%AA%E5%AE%9A%E4%B9%89git%20checkout%E5%91%BD%E4%BB%A4%E8%87%AA%E5%8A%A8%E7%AE%A1%E7%90%86%E6%AF%8F%E4%B8%AA%E5%88%86%E6%94%AF%E7%9A%84%E5%AD%98%E5%82%A8&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-2-81292703.142v99pc_search_result_base9&spm=1018.2226.3001.4187
https://blog.csdn.net/m0_37806112/article/details/82289606

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐