Git

使用 Git 可以追踪代码的历史修改记录,方便团队协作、代码共享和代码重构。

Git 的基本工作流程如下:
1.在开始编写代码之前,首先需要创建一个 Git 仓库(repository),用于存储代码和版本历史记录。
2.在编写代码时,可以通过 git add 命令将更改的文件添加到 Git 的暂存区(staging area)中。
3.通过 git commit 命令将暂存区中的更改提交到 Git 仓库中,并生成一个新的版本号(commit hash)。
4.如果需要撤销某个提交,可以使用 git revert 命令来创建一个新的提交,该提交将会抵消先前的提交效果。
5.如果需要合并不同分支的代码,可以使用 git merge 命令进行合并。
6.如果需要查看代码的历史提交记录,可以使用 git log 命令来获取详细信息。
7.如果需要将代码推送到远程仓库,可以使用 git push 命令将本地代码推送到远程仓库。
8.如果需要从远程仓库中获取代码,可以使用 git pull 命令将远程代码拉取到本地。
————————————————

主要区域
Workspace:工作区
Index / Stage:暂存区
Repository:仓库区(或本地仓库)
Remote:远程仓库

配置

下载到任意盘,完成后添加环境变量:pathto/git/bin和pathto/git.cmd

环境变量配置完成后需重启生效.

关联到名字和邮箱

$git config --global user.name xxx  //设置别名
$git config --global user.email xxxxxx@email.com  //设置你的邮箱,别人可以通过这两个信息知道是谁提交的代码。

git config其他配置

查看当前所有配置
$git config --list
设置默认编辑器,如vim等
$git config --global core.editor "vim"

配置换行符处理,有多个选项,用于在不同操作系统间处理换行符。
$git config --global core.autocrlf true

配置别名,为常用命令设置好用的别名
$git config --global alias.co checkout

获取指定键的值,如获取用户名的值
$git config --get user.name

删除某个配置,如
$git config --unset user.name

初始化一个新的Git仓库

1.进入该目录 , 使用命令,将"普通文件目录"转为"Git版本库",告诉git这个文件夹需要版本控制
$git init

初始化后可以在文件夹中看见.git的隐藏文件夹.
git的所有记录都会在.git这个隐藏文件夹里,一般来说不需要去研究文件夹内的文件具体有什么作用.
初始化git后,一般会默认显示”master”.也就是我们的主分支.也就是说,初始化后,默认处于主分支内.

创建文件

1.使用echo创建文件:
$ehco "内容" > 1kun.md

双引号内的内容就是要写入文件的内容,尖括号后是文件名.后缀名

查看当前状态

由于git有好好多个区域,当不知道自己处于什么状态时,可以使用git status命令来查看;
git status命令有一些重要的信息,当前所处分支,当前提交状态,文件状态等。

$git status

git add

1.需要把文件提交到缓存区使用git add.
$git add 1kun.md 

当在Git中执行git add命令时,如果出现警告信息“warning: in the working copy of ‘1kun.md’, LF will be replaced by CRLF the next time Git touches it”,这通常是因为Git检测到文件中的换行符在Windows和Linux/Unix系统之间不一致。具体来说,Windows系统使用CRLF(回车加换行,\r\n)作为换行符,而Linux/Unix系统只使用LF(换行,\n)作为换行符。

出现这个警告的原因可能是你在Windows系统上工作,但文件中的换行符是LF格式,这通常发生在从Linux/Unix系统或其他跨平台项目中获取的代码。Git为了保持文件在Windows系统上的兼容性,会在提交时自动将LF转换为CRLF。

解决方法

  1. 忽略警告 如果你的项目只在Windows系统上开发和维护,可以忽略这个警告。因为Git会自动在提交时转换换行符,确保文件在Windows上正确显示。
  2. 更改Git配置 如果你希望避免这个警告,可以更改Git的core.autocrlf配置。这可以通过运行以下命令来完成:
$git config --global core.autocrlf true //这会将所有添加的文件视为文本文件,并在提交时将CRLF转换为LF,在检出时将LF转换为CRLF。
  • 使用.gitattributes文件 为了更精细地控制换行符的转换,可以在项目根目录下创建一个.gitattributes文件,并在其中指定特定文件的换行符处理方式。这可以确保在不同平台上的多人协作时,文件属性保持一致。

这个警告通常不会影响项目的正常运行,但为了保持代码的一致性和避免不必要的混淆,建议根据项目需求选择合适的解决方法。如果项目涉及跨平台开发,更改core.autocrlf配置或使用.gitattributes文件是更好的选择。

再次查看状态

这个时候,可以看到系统提示文件可以进行commit提交.

git commit

$git commit -a -m  //“修改的信息或版本信息”和 git commit -am “修改的信息或版本信息”等效,a是全部、m是修改信息
$git commit 
  1. 提交完成后自动进入了vim编辑器.并且展示内容.vim编辑器是git的默认编辑器,也可以修改成其他编辑器打开.
  2. 文件内容都被注释了,可以把有需要的内容取消注释.修改内容后保存并退出
  3. 回到bash界面,可以看到提示有文件被修改,并显示修改的内容,这里显示添加了”versuin_1″这一小段内容.

再次查看状态

再次查看状态,就会提示说工作区已经没有东西了.
也就是说当前已经把所有文件都提交到本地的版本库了.

特殊情况:多次修改未追踪或提交

如果我们在1kun.md里面再新增一行内容,可以直接使用vim编辑器进入或使用其他方式修改内容
然后再使用git status查看状态

这时候就会提示文件被修改的状态:

然后使用git add 1kun.md ,把内容添加到暂存区;
然后在添加修改一次内容,再一次查看状态;

这时候就会出现两种状态:

如果要退回到unstage状态,也就是工作区的时候,这里也有提示你操作的命令,在最后一次修改内容的时候,没有进行进一步操作,因此这行内容还在工作区,也就是unstage状态,这种情况可以先进行git add来把新增内容放在缓存区里,然后用git commit进行提交.
修改内容也不需要每次都打开vim编辑器,可以通过git commit -m "添加的内容"来添加提交信息就可以.

回车确认后,会显示提交结果.

查看日志

$git log
  1. 使用git log查看日志
  2. 日志从上到下为新到旧日志.
  3. 并且每一份提交都显示了操作人的名字和邮箱
  4. 还有一串哈希数字,每串哈希都代表了不同的commit.
  5. 退出日志界面:按q即可

忽略文件

  1. 在开发中会有一些不需要提交的文件,就需要让git来忽略掉这些文件.
  2. 如果有一个文件修改了或者刚刚创建,查看状态时就会显示文件被修改未提交:
  1. 这时候就可以创建一个.gitignore文件夹来存放这些不需要提交的文件
  2. 使用touch .gitignore ,查看状态时发现需要忽略的文件还存在
  1. 这时候就要把需要用编辑器打开.gitignore文件,添加图片的名字和后缀,就表示需要忽略的文件.
  2. 这时候再查看状态,可以看见需要忽略的文件已经被忽略.

上传本地分支到远端

$git push origin -u <branch>:<remote-branch>
推送本地 main 分支到远程仓库的 main 分支:
$git push origin main

推送本地所有分支到远程仓库:
$git push --all origin

推送本地所有标签到远程仓库:
$git push --tags origin

分支

创建分支

$git branch + 分支名  //创建分支
$git branch  //查看是否创建成功。

但是这个指令不会让我们马上跳转到新分支上,首先使用git branch 查看是否创建成功。

切换分支

$git checkout + 分支名//切换分支,切换到halfto3分支上(也可以使用下面方式)
$git switch  + 分支名

使用 ls 查看当前目录下的文件,可以知道文件夹里的文件都是从master主分支那里复制过来的.

删除分支文件

$git commit -a -m "xxxx" 
删库测试,手动删除文件,然后使用,测试删库后会不会对主分支有影响

查看主分支情况,使用 switchcheckout 切换到master主分支,然后ls查看当前目录文件

发现主分支下只有1kun.md文件,而被忽略的文件已不存在.因为被忽略的文件不被追踪.这也是.gitignore的注意事项.

.gitignore

.gitignore 文件是 Git 版本控制系统中一个非常重要的组成部分,它用于指定哪些文件或目录应该被 Git 忽略,不进行版本控制。以下是关于 .gitignore 文件的一些核心信息:

1.作用: .gitignore 文件告诉 Git 哪些文件或目录不需要被跟踪,这对于排除临时文件、编译生成的文件、个人配置文件等非常有用,可以减少仓库的大小,提高工作效率。

2. 创建与位置: 通常情况下,.gitignore 文件应放在仓库的根目录下,它可以递归应用于整个仓库。也可以放在子目录中,此时它的作用域仅限于该目录及其子目录。

3.格式规范: .gitignore 文件中的每一行都是一个模式,用于匹配要忽略的文件或目录。 支持 glob 模式匹配,例如 * 匹配任意多个字符,? 匹配任意一个字符,[abc] 匹配括号中的任意一个字符等。 可以使用 ! 前缀来取反模式,例如 !lib.a 表示忽略所有 .a 文件,但 lib.a 除外。 可以使用 / 开头或结尾来指定目录,例如 build/ 表示忽略名为 build 的目录及其内容。

4.注意事项: 如果文件已经被 Git 跟踪,那么更改 .gitignore 文件不会立即生效,需要使用 git rm --cached 命令来取消跟踪该文件。 .gitignore 文件本身可以提交到仓库中,适用于使用仓库的所有人。

5.常见问题: 如果需要忽略的文件已经被提交,需要先从 Git 中移除这些文件的跟踪,然后更新 .gitignore 文件,并提交更改。 如果需要忽略某个特定的文件或目录,但该文件或目录的父目录已经被忽略,那么需要使用 ! 前缀来重新包含该文件或目录。

删除分支

$git branch -d + 分支名 //使用-d系统会提示使用-D来删除
$git branch -D + 分支名 //如果你非常明确要删除,使用这个

创建分支同时切换分支

$git checkout -b + 分支名

合并分支内容到主分支

$git merge + 分支名 :比如当前我在msater分支,要合并其他分支的内容,就是git merge temp
$git commit -a -m "version4"在temp分支上对1kun.md进行新增内容,然后合并到主分支master中,使用

现在主分支master肯定没有这一行内容,切换到master分支查看

要把分支内容合并到主分支:

$git merge + 分支名  //把temp分支合并到主分支

分支合并冲突

比如现在为master分支新增了一行内容,同时temp分支也新增了一行不一样的内容,此时同时提交,然后进行分支合并(git merge)就会出现冲突.,并且会提示冲突的文件,这时候,在冲突的文件按照提示把内容修改过来就可以.当然,也有一些merge的工具可以处理这样的冲突问题.

  1. 使用vim打开冲突文件,会显示冲突的内容.
  2. HEAD是当前分支冲突文件的内容冲突位置

下面是合并过来的内容

查看当前远程仓库信息:

git remote -v
  • 其中:
  • origin 是远程仓库名称,通常就是origin,
  • 后面的URL是该远程仓库的地址,用于fetch和push操作
  • 当进行fetch和push操作的时候,就可以使用origin来代替URL了

git push

  • git add
  • git commit
  • git push

在push的时候,第一次使用会提示登陆账户,这里使用的是gitee,因此需要使用当前仓库的gitee账户登陆,登陆完成后即可完成push.

如果使用的是github,会提示 Support for password authentication was removed on August 13 2021.Please us a personal access token instead . 即使用密码登陆方式来验证身份已被弃用,建议使用个人访问令牌.

  1. 生成个人访问令牌
    • 登录GitHub账户,进入个人设置页面,选择“Developer settings”>“Personal access tokens”。
    • 点击“Generate new token”按钮,填写令牌名称,选择令牌的有效期和访问权限(如选择repo以允许访问仓库)。
    • 点击“Generate token”按钮,生成令牌并保存,因为一旦离开页面将无法再次查看。
  2. 使用个人访问令牌
    • 在提交代码时,将生成的令牌用于身份验证,代替原来的密码。
    • 也可以将令牌添加到远程仓库链接中,避免每次提交代码时都需要输入令牌。

新分支关联到远程仓库

当你在使用Git进行代码提交时,如果遇到“The current branch newbch has no upstream branch.”这个错误提示,这通常意味着你当前所在的本地分支newbch还没有与远程仓库中的任何分支建立关联。上游分支(upstream branch)是指本地分支与之关联的远程分支,用于推送(push)和拉取(pull)操作。

  • 出现错误的原因
    • 1. 创建新分支:当你在本地上创建了一个新分支newbch,并尝试直接推送这个分支到远程仓库时,会遇到这个错误,因为新分支还没有与远程的任何分支建立关联。
    • 2. 分支切换:如果你从一个已经关联了上游分支的分支切换到newbch分支,并且newbch分支没有设置上游分支,也会出现这个错误。
  • 解决方法
    • 1. 设置上游分支 使用以下命令来设置当前分支newbch的上游分支,关联到远程仓库origin的对应分支:
      • git push --set-upstream origin newbch
      • 或者使用简写形式:git push -u origin newbch
      • 这个命令会设置本地newbch分支与远程origin/newbch分支的关联,以后就可以直接使用git push和git pull命令了。
    • 2. 显式指定远程分支 如果你不想设置上游分支,也可以在使用git push命令时显式指定远程分支:
      • git push origin newbch
      • 这种方式不需要设置上游分支,但每次推送都需要手动指定分支名称。
  • 注意事项
    • 在设置上游分支或推送代码前,确保你的本地代码是最新的,避免代码冲突。
    • 如果远程仓库中还没有newbch分支,使用git push -u origin newbch命令会创建远程分支。
    • 如果遇到代码冲突或其他推送失败的情况,可能需要先解决冲突或使用git pull –rebase origin newbch 命令拉取远程更新并重新基点合并。

更新本地仓库

当远程仓库文件出现了变动,在本地的仓库是暂时不会随之更新的.使用git fetch.

Git fetch是一个用于从远程仓库获取最新代码和提交信息的命令。它不会自动合并这些更新到你的当前分支,而是将它们存储在本地仓库中,以便你可以在合并之前查看和处理冲突。以下是关于git fetch的一些关键点和常用用法:

$git fetch:这个命令会从默认的远程仓库(通常是origin)获取所有分支的最新代码和提交信息。

$git fetch origin: 从名为origin的远程仓库获取所有分支的最新代码和提交信息。

$git fetch origin branch_name: 从远程仓库origin获取特定分支branch_name的最新代码和提交信息。

2. 与git pull的区别

git fetch只是获取远程仓库的更新,不会自动合并到本地分支。

git pull是git fetch和git merge的组合,它会获取远程仓库的更新并立即尝试将它们合并到当前分支。

使用git fetch是一个安全的更新方法,因为它允许你在合并更新之前查看和解决可能的冲突。

3. 使用git diff 来查看版本区别,使用git diff 查看远程仓库和本地仓库的区别:

git diff origin/master

4.使用 git pull 更新本地仓库

用于从远程仓库获取最新的提交记录,并将其合并到当前本地分支中。

git pull 其实就是 git fetch 和 git merge 的简写,先从远程仓库获取最新的提交记录,然后将这些提交记录合并到你当前的分支中。

  • git pull [远程仓库名] [分支名]
  • [远程仓库名] 通常是 origin,是默认的远程仓库名。
  • [分支名] 是你要合并的远程分支,比如 main 或 master
  • 更新操作:
    • git pull
    • git pull origin
  • 将远程主机 origin 的 master 分支拉取过来,与本地的 brantest 分支合并:
    • git pull origin master:brantest
  • 如果远程分支是与当前分支合并,则冒号后面的部分可以省略。
    • git pull origin master

参考链接:https://www.cnblogs.com/xielaoban/p/17410364.html

No Comments

Send Comment Edit Comment


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
Previous
Next