Home > Article > Development Tools > The Git usage skills summarized by Daniel are so practical
What is Git
Official words: Git is a free and open source distributed version control system designed to quickly and efficiently handle tasks ranging from small to large Everything from large-scale projects.
It can automatically help me record every file change, and also allows colleagues to collaborate on editing, so I don’t have to manage a bunch of similar files myself, and I don’t need to pass files around. If you want to see a certain change, you only need to take a look in the software.
Why you should learn Git
Be asked in interviews. Can handle interviews.
Many companies use Git to handle projects during development. If you don’t learn it now, you will definitely have to learn it later.
In my opinion, Git is something that all programmers today must master, and it must be used to develop projects with colleagues in the future. Being proficient in Git commands can improve the efficiency of development.
Install Git
Windows
Download directly from the official website. After the download is complete, right-click on a file and if there is Git Bash Here, the installation will be successful. After installation, you also need to enter on the command line:
$git config --global user.name"你的名字" $git config --global user.email"你的邮箱"
global means global. All Git repositories on this machine will use this configuration. Allow individual repositories to use other names and email addresses.
Mac
Mac can also be installed like Windows by following the steps above.
You can also install Xcode directly from the AppStore. Xcode integrates Git, but it is not installed by default. You need to run Xcode, select the menu "Xcode"->"Preferences", and find "Downloads" in the pop-up window. Select "Command Line Tools" and click "Install" to complete the installation.
Warehouse
The local warehouse is for the remote warehouse. Local warehouse = workspace version area.
The workspace is a collection of files on the disk.
The version area (version library) is the .git file.
Repository = staging area (stage) branch (master) pointer Head.
Take the git command I use most frequently, which is submitting to github, as an example.
git init Originally the local warehouse only contained the workspace, which is the most common working state. At this time, git init means that a .git file is created in the local area and the version area is established.
git add . means submitting all files in the workspace to the temporary storage area in the version area.
Of course you can also add them to the staging area one by one through git add ./xxx/.
git commit -m "xxx" Submits all the files in the temporary storage area to the warehouse area, and the temporary storage area is empty.
git remote add origin https://github.com/name/name_cangku.git connects the local warehouse with the remote warehouse.
git push -u origin master Submit the files in the warehouse area to the remote warehouse.
Once submitted, if you do not make any modifications to the workspace, then the workspace is "clean". There will be a message like nothing to commit, working tree clean.
Related recommendations: "php Getting Started Tutorial"
Submit to GitHub
When I was not familiar with git commands before, I To submit a project to GitHub, you pull the files directly from the web page and submit them. A little shameful.
git init. Initialization means turning this file into a warehouse that can be managed by Git. After initialization, open the hidden file and you can see that there is a .git file.
git add . A dot after it indicates that all files will be submitted to the temporary storage area.
git add ./readme.md/ means submitting the readme.md file under this file to the temporary storage area.
git commit -m "Do you want to comment on something?" git commit means to submit all the files in the temporary storage area to the local warehouse. -m followed by a comment.
git remote add origin https://github.com/name/name_cangku.git means connecting your local warehouse to the remote warehouse on GitHub. You only need to connect once, and you don't need to use this command when submitting in the future. name is your github name, name_cangku is your warehouse name. Be careful not to miss the .git at the end. Because this is how I came along, and I took many detours. As for how to create a new warehouse on GitHub, there are many tutorials on the Internet, so I won’t go into details here.
git push -u origin master Submits the local warehouse to the remote warehouse. (Last step) Refresh your remote repository to see the files you submitted.
The last thing mentioned is that before git commit -m "", you can repeat git add to the staging area. But git commit will submit all the files you previously stored in the staging area to the local warehouse at once.
Version Backtracking and Forward
提交一个文件,有时候我们会提交很多次,在提交历史中,这样就产生了不同的版本。每次提交,Git会把他们串成一条时间线。如何回溯到我们提交的上一个版本,用git reset --hard + 版本号即可。版本号可以用git log来查看,每一次的版本都会产生不一样的版本号。
回溯之后,git log查看一下发现离我们最近的那个版本已经不见了。但是我还想要前进到最近的版本应该如何?只要git reset --hard + 版本号就行。退一步来讲,虽然我们可以通过git reset --hard + 版本号,靠记住版本号来可以在不同的版本之间来回穿梭。
但是,有时候把版本号弄丢了怎么办?git reflog帮你记录了每一次的命令,这样就可以找到版本号了,这样你又可以通过git reset来版本穿梭了。
撤销
场景1:在工作区时,你修改了一个东西,你想撤销修改,git checkout -- file。廖雪峰老师指出撤销修改就回到和版本库一模一样的状态,即用版本库里的版本替换工作区的版本。
场景2:你修改了一个内容,并且已经git add到暂存区了。想撤销怎么办?回溯版本,git reset --hard + 版本号,再git checkout -- file,替换工作区的版本。
场景3:你修改了一个内容,并且已经git commit到了master。跟场景2一样,版本回溯,再进行撤销。
删除
如果你git add一个文件到暂存区,然后在工作区又把文件删除了,Git会知道你删除了文件。如果你要把版本库里的文件删除,git rm 并且git commit -m "xxx".
如果你误删了工作区的文件,怎么办?使用撤销命令,git checkout --就可以。这再次证明了撤销命令其实就是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
分支
分支,就像平行宇宙,你创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作。用 Git 和 Github 提高效率的 10 个技巧!这篇也推荐看下。
创建与合并分支
在没有其他分支插进来时,只有一个master主分支。每次你git push -u origin master 提交就是增加一条时间轴,master也会跟着移动。
创建一个other的分支,通过other提交,虽然时间轴向前走了,但是主分支master还在原来的位置。
理论分析完,看一下命令怎么写。
创建分支other,切换到other分支。
gitbranch other gitcheckout other
查看当前所有分支
gitbranch * othermaster
当前的分支会有一个*
用other提交
gitadd ./xxx/ git commit -m"xxx"
other分支完成,切换回master
git checkoutmaster
此时,master分支上并没有other的文件,因为分支还没有合并。
合并分支
gitmergeother
合并完成之后,就可以在master分支上查看到文件了。
删除other分支
gitbranch -d other
我由此想到,在以后工作中,应该是一个开放小组共同开发一个项目,组长会创建很多分支,每一个分支可以交给一个人去开发某一个功能,一个小组共同开发而且不会相互干扰。谁的功能完成了,可以由组长合并一下完成了的分支。哦,完美!
解决合并分支问题
Suppose there is such a situation, the branch other has been committed, but at this time the pointer points back to the master, and the master is not merged, but submitted by git add / commit. In this way, a conflict occurs, and the content of the master file of the main branch is different from the content of other branches. Can't merge! So, modify the contents of the file to make it consistent.
git add git commit commit.
The branches are merged.
git log --graph View the branch merge graph
git branch -d other Delete the branch and the task ends.
Branch management strategy
git merge --no-ff other Disable Fast forward mode, because using Fast forward mode, branch history information will be lost after deleting a branch. Super detailed Git practical tutorial, even a fool can understand it at a glance!
BUG branch
Every bug in the work can be fixed through a new temporary branch. After repair, merge the branches, and then delete the temporary branch. But if you have a branch at work, your superior will ask you to fix the bugs in another branch.
You need to save the branch you are working on now, use git stash to "store" the current work site, and continue working after restoring it later. After you solve the bug, git checkout other and return to your own branch. Use git stash list to see where the work you just "stashed" has gone.
At this point you have to resume work:
git stash apply restores but does not delete the stash content, git stash drop deletes the stash content.
When git stash pop is restored, the stash content is also deleted.
At this time, if you use git stash list to view it, you can't see any stash content.
Summary: When fixing a bug, we will fix it by creating a new bug branch, then merge it, and finally delete it; when the work at hand is not completed, first git stash the work site and then repair it. After fixing the bug, git stash pop and return to the work site.
Delete branch
git branch -d branch may fail to be deleted because Git will protect branches that have not been merged.
git branch -D branch forcibly deletes and discards branches that have not been merged.
Multiple Collaboration
git remote View the information of the remote library, origin will be displayed, the default name of the remote warehouse is origin
git remote -v displays more detailed information
git push -u origin master pushes the master branch to the origin remote warehouse.
git push -u origin other Push other to the origin remote warehouse.
Get the branch
When the conflict in the above picture occurs,
git pull pulls the latest commit from Fetch it from the remote warehouse, merge it locally, and resolve conflicts. When performing git pull
If git pull also fails, you must also specify the link between branches. Git will remind you what to do in this step. Then git pull again.
The working mode of multi-person collaboration is usually as follows:
First, you can try to use git push origin
to push your own changes;
If the push fails , because the remote branch is newer than your local one, you need to use git pull to try to merge it first;
If there is a conflict in the merge, resolve the conflict and submit it locally;
There is no conflict or resolve it After the conflict, use git push origin
to push successfully!
If git pull prompts no tracking information, it means that the link relationship between the local branch and the remote branch has not been created. Use the command git branch --set-upstream-to origin/.
Rebase
git rebase "organizes" the forked commit history into a straight line, which looks more intuitive. The disadvantage is that the local forked commit has been modified. .
Finally perform git push -u origin master
The purpose of rebase is to make it easier for us to view changes in historical submissions, because forked submissions require three-way comparison.
tag management
For example, if an APP is to be launched online, a tag (tag) is usually added to the version library. In this way, the tagged version is determined. Whenever in the future, retrieving a tagged version means taking out the historical version at that tagged moment. Therefore, a tag is also a snapshot of the repository.
Although the Git tag is a snapshot of the repository, it is actually a pointer to a commit.
tag is actually a meaningful name that is easy to remember, and it is tied to a certain commit. For example, tag v2.1 refers to a historical version called v2.1
Create tag
Steps:
git branch to view the current branch, git checkout master switch to the master branch.
git tag
The default tag is placed on the latest commit. If you want to label a previous commit, use git log to find the commit id of the historical commit.
If a commt id is du2n2d9, execute git tag v1.0 du2n2d9 to label this version v1.0.
git tag View all tags, you can know that the historical versions of tag
tags are not listed in chronological order, but in alphabetical order.
git show
git tag -a
Operation tag
git tag -d v1.0 Delete tag. Because the created tags are only stored locally and will not be automatically pushed to the remote. Therefore, mistyped tags can be safely deleted locally.
git push origin
git push origin --tags Push all local tags that have not been pushed to the remote at one time
If the tag Push to remote. git tag -d v1.0 first deletes the local tag v1.0. git push origin :refs/tags/v1.0Delete remote tag v1.0
Customize Git
git config --global color.ui true to let Git display The color will make the command output look more eye-catching
Ignore special files Create a .gitignore file and fill in the file names that need to be ignored. Git will automatically ignore these files. I have also encountered such a problem in my studies. For example, the node_modules file can be ignored.
Ignore file principle: Ignore files automatically generated by the operating system, such as thumbnails, etc.; ignore intermediate files, executable files, etc. generated by compilation. That is, if a file is automatically generated by another file, then There is no need to put automatically generated files into the repository, such as .class files generated by Java compilation; ignore your own configuration files with sensitive information, such as configuration files that store passwords.
Force submission of ignored files. git add -f
git check-ignore -v
Assign aliases to Git commands. This is a bit awkward. When you want to enter git rebase in the future, you give it a "nickname" and call it git nb. In the future you can use git nb instead of git rebase.
Summary of commonly used Git commands
git config --global user.name "your name" lets all your Git repositories bind your name
git config --global user.email "your email" Let all your Git repositories bind your email
git init initialize your repository
git add . Put the workspace Submit all the files in the workspace to the temporary storage area
git add ./
git commit -m "xxx" Submit all the files in the temporary storage area to the warehouse area, and the temporary storage area is empty
git remote add origin https://github.com/name/name_cangku.git Connect the local warehouse to the remote warehouse
git push -u origin master Submit the main branch master in the warehouse area to the remote warehouse
git push -u origin
git status View the status of the current warehouse
git diff View the specific content of file modifications
git log Displays the commit history from the most recent to the farthest
git clone warehouse address Download the clone file
git reset --hard The version number goes back to the version. The version number follows the master when committing
git reflog displays the command history
git checkout - -
git rm in the Git world deletes the files in the repository
git branch Views all current branches
git branch
git checkout
git merge
git branch -d
git branch -D
git log --graph View branch merge graph
git merge --no-ff
git stash When other tasks are inserted, "store" the current work site, and continue working after recovery later
git stash list Check where the work you just "stored" has gone
git stash apply restores but does not delete the stash content
git stash drop deletes the stash content
git stash pop deletes the stash content while restoring
git remote view The information of the remote library will display origin. The default name of the remote warehouse is origin
git remote -v displays more detailed information
git pull grabs the latest submission from the remote warehouse. Merge locally, contrary to git push
git rebase "organizes" the forked commit history into a straight line, which looks more intuitive
git tag View all tags, you can know the historical version tag
git tag
git tag
git show
git tag -a
git tag -d
git push origin
git push origin --tags Push all local tags that have not been pushed to the remote at once
git push origin :refs/tags/
git config --global color.ui true lets Git display colors, which will make the command output look more eye-catching
git add -f
git check-ignore -v
gitbranch other
The above is the detailed content of The Git usage skills summarized by Daniel are so practical. For more information, please follow other related articles on the PHP Chinese website!