适合初学者的Git的各种内容
首先
由于经常看到一些人在使用Git时遇到困难,所以这次我尝试写一下!
目录
-
- Git是什么??
-
- git add / git commit 做了什么
-
- 在不清楚的时候可以使用的命令
-
- 之前解释过的命令的优势
- 解读错误信息
首先,”Git” 是什么?
简单地解释的话,它是用来管理版本的东西。
更详细地说,它是用来管理差异的东西。
差异是指比较两个数据集合,找出它们之间不同部分的内容。
我认为,仅有这一个例子的话,可能无法想象出来。
データ.txt
aaa
データ.txt
aaa
+ bbb
使用git diff命令可以显示具有差异的文件。
这个时候的差异将变为bbb(在git中以一个空格为单位识别)。
2. git add / git commit 所做的事情
关系图
工作目录…自己进行工作的地方(进行文件更改的地方)
暂存区…暂时存放想要提交的差异的地方
本地仓库…永久保存索引中的差异的地方
远程仓库…存放在GitHub上的内容
简言之,自上而下的理解是,在工作目录(working dir)进行操作,当进行添加操作(add)时,工作的差异会被临时放置在索引(index)中。当进行提交操作(commit)时,索引中的差异会被正式保存在本地仓库(local repository)中。
想要了解更详细信息的人,请参考以下链接↓
3. 在不太清楚的情况下可使用的命令
能够了解当前状况的指令
git log --oneline
可以查看提交记录和HEAD的位置引用。
当阅读完时,这个命令会变得很棒。(或许…)
git status
简而言之,以下是3点要点(建议参考图片)。
git addしたけどまだ、git commitされてないファイル一覧の表示(Changes to be committed: )
編集・削除・更新されているけど、まだ git add されてないファイルの一覧(Changes not staged for commit:)
gitで管理されてない、かつ.gitignoreで管理対象外にもされてないファイルの一覧(Untracked files:)
$ git status
On branch main
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: "A\343\203\207\343\203\274\343\202\277.txt"
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: "B\343\203\207\343\203\274\343\202\277.txt"
Untracked files:
(use "git add <file>..." to include in what will be committed)
"C\343\203\207\343\203\274\343\202\277.txt"
想问“就这些吗?”的人,请继续阅读。
4. 上述所述的指令的优势
-
- 为什么查看提交记录很好?
-
- 如果了解以前的记录,就可以回到之前的版本。
-
- 例如,在订单功能的提交中没有错误,但之后的版本中出现了太多错误,让人困扰。所以,先回到没有错误的进展部分!就像这样使用。
- 因为解释回滚很麻烦,请参考以下链接:
- 能够看到头部的位置有什么好处?
-
- リモートリポジトリのバージョンがわかる
-
- ローカルリポジトリのバージョンがわかる
-
- headと書かれている位置が今自分がいる場所のことです。
- これだけだと良くわからないと思うので素晴らしさを知ってもらいます。
5. 解开错误的谜题 de
在Git中经常遇到的reject(non-fast-forward)错误。
$ git push origin main
To github.com:*******
! [rejected] main -> main (non-fast-forward)
error: failed to push some refs to '******/qiita.git'
hint: Updates were rejected because a pushed branch tip is behind its remote
hint: counterpart. If you want to integrate the remote changes, use 'git pull'
hint: before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
这是为什么会发生呢?
简单来解释一下,
本地仓库的版本旧于推送到的远程仓库。
当切换到Order分支时,Main分支的版本为m1。
当在Fix分支上进行修正并提交时,Main分支的版本会变为m2。
当尝试从Order分支重新提交时,Main分支的版本会变为m3。
此时,由于Main分支的版本已经变成m2,与切换分支时的版本不同。
换句话说,如果其他人已经在同一分支上提交了更改,那么自己无法将自己的更改推送到Git上。
为了解决这个问题,只需统一版本。
-
- 将远程仓库的最新信息获取到本地(git fetch)
-
- 将获取到的最新信息合并到想要push的分支上(git merge remote/origin/远程仓库的分支名)
- 将合并后的信息推送到远程仓库(git push)
说明
-
- 将远程存储库的最新信息获取到本地(git fetch)。
-
- 确保本地环境和远程环境的版本相同(如果以图形表示,则为m2)。
-
- 在使用git fetch之后,通过git branch -a确认从远程获取的信息都被标记为remote/~~。
-
- 将获取到的远程最新信息合并到想要推送的本地分支上(git merge remote/origin/远程存储库的分支名)。
-
- 在将远程存储库的最新信息合并到本地环境后,经常会出现合并冲突的情况。
- 关于冲突的详细说明比较麻烦,请参考以下链接。
将本地文件添加到远程仓库
git add .
git commit -m “~~”
git push origin ~~
你可以用这个方法来解决错误问题?。
补充 + ab
有一只是章鱼(?),当出现拒绝错误时,就会使用git push -f命令,但请停止这样做。这将导致历史改变并造成严重后果。请不要轻易使用git push -f命令。如果我认识的人这样做了,我会给予一番教诲。
手順1和手順2都可以用pull来完成!我想你是个很努力学习的人。git pull实际上同时进行了两个操作。
git pull = git fetch + git merge
因此,可以使用git pull来替代。
然而,偶尔使用git pull会出现这样的”错误”。
From xxxxxxxxx
* branch feature/1 -> FETCH_HEAD
hint: You have divergent branches and need to specify how to reconcile them.
hint: You can do so by running one of the following commands sometime before
hint: your next pull:
hint:
hint: git config pull.rebase false # merge
hint: git config pull.rebase true # rebase
hint: git config pull.ff only # fast-forward only
hint:
hint: You can replace "git config" with "git config --global" to set a default
hint: preference for all repositories. You can also pass --rebase, --no-rebase,
hint: or --ff-only on the command line to override the configured default per
hint: invocation.
fatal: Need to specify how to reconcile divergent branches.
这不是一个错误。
这是一个警告。
简要概括上述内容,可分为以下4点。
-
- git merge
-
- git rebase
-
- git fast-forward only
-
- この中のいずれかを使用してください!!
-
- または、configを用いてgit pullするときにpull.rebaseかpull.ffなのかを事前に設定してからgit pullコマンド使ってね~とのこと
- つまり、git pullだと3つのうちどれかわからないからconfigで事前にどれに該当してるのか設定しておいてね~とのことでした。
在git的终端中回复的许多错误和警告中隐藏着许多提示。让我们仔细地读完错误和警告!
总结
git 是一个用于管理差异的系统。
git log 可以告诉你提交历史记录和 head 的位置。
git status 可以告诉你文件的状态。
git fetch 可以将远程存储库的最新信息获取到本地。
git merge 可以通过将任意分支指定给当前分支来合并任意分支的信息,此时远程分支也适用。
git pull 是 git fetch 和 git merge 的组合操作。
結束。
希望各位閱讀這篇文章後都能度過愉快的git生活!?